Macro créer fichier TXT par colonne avec 1 bouton
Résolu/Fermé
ImaSTAT
Messages postés
21
Date d'inscription
vendredi 19 avril 2013
Statut
Membre
Dernière intervention
2 septembre 2016
-
14 mars 2016 à 19:56
ImaSTAT Messages postés 21 Date d'inscription vendredi 19 avril 2013 Statut Membre Dernière intervention 2 septembre 2016 - 16 mars 2016 à 21:03
ImaSTAT Messages postés 21 Date d'inscription vendredi 19 avril 2013 Statut Membre Dernière intervention 2 septembre 2016 - 16 mars 2016 à 21:03
A voir également:
- Macro créer fichier TXT par colonne avec 1 bouton
- Fichier rar - Guide
- Fichier host - Guide
- Créer un compte gmail - Guide
- Créer un compte google - Guide
- Fichier iso - Guide
3 réponses
eriiic
Messages postés
24569
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
14 mars 2024
7 209
14 mars 2016 à 23:18
14 mars 2016 à 23:18
Bonjour,
Je trouve plus simple, autant pour moi que pour l'utilisateur, de mettre le préfixe en D1 :
eric
Je trouve plus simple, autant pour moi que pour l'utilisateur, de mettre le préfixe en D1 :
Sub fich() Dim Repertoire As FileDialog, prefixe As String Dim lig As Long, col As Long Dim numfich As Integer Set Repertoire = Application.FileDialog(msoFileDialogFolderPicker) Repertoire.Show If Repertoire.SelectedItems.Count = 0 Then Exit Sub prefixe = [D1] & "_COL" For col = 1 To 3 numfich = FreeFile Open Repertoire.SelectedItems(1) & "\" & prefixe & Chr(64 + col) & ".txt" For Output As #numfich For lig = 1 To Cells(Rows.Count, col).End(xlUp).Row Print #numfich, Cells(lig, col) & vbCrLf; Next lig Close #numfich Next col End Sub
eric
ImaSTAT
Messages postés
21
Date d'inscription
vendredi 19 avril 2013
Statut
Membre
Dernière intervention
2 septembre 2016
Modifié par ImaSTAT le 15/03/2016 à 18:40
Modifié par ImaSTAT le 15/03/2016 à 18:40
Bonjour Eric,
Wow, ça fonctionne très bien. Mettre le préfixe dans une cellule peut convenir effectivement.
Petit soucis par contre, en réalité j'aurai 9 colonnes à prendre en considération, et ce ne sont pas les 9 premières. Ce sera quelque chose dans les alentours des colonnes PT à QB, soit les colonnes #436 à #444. Lorsque j'essaie en changeant comme suit:
ça fonctionne bien. Mais lorsque j'essaie:
ça me donne une erreur "Argument ou appel de procédure incorrect" avec la ligne:
Aussi, dans mon exemple, j'avais le suffixe _COLX mais en fait, ce sera autre chose dépendamment de la colonne. Comment mettre du texte différent en fonction de la colonne ?
Ex:
Fichier créé à partir de COLA = prefixe(D1)_bonjour
Fichier créé à partir de COLB = prefixe(D1)_salut
Fichier créé à partir de COLC = prefixe(D1)_allo
Finalement, est-ce possible de faire en sorte que le fichier pour une colonne spécifique n'est pas créer si les lignes 3 à 300 de cette colonne sont vides ? (J'ai deux en-têtes, dans les lignes 1 et 2 de chaque colonne qui ont toujours du texte, donc il ne faut pas en tenir compte).
Attention: lorsque je dis vide, je parle d'aucun texte (""), car chaque cellule contient des formules.
Merci beaucoup pour ton aide et ce beau travail !
Wow, ça fonctionne très bien. Mettre le préfixe dans une cellule peut convenir effectivement.
Petit soucis par contre, en réalité j'aurai 9 colonnes à prendre en considération, et ce ne sont pas les 9 premières. Ce sera quelque chose dans les alentours des colonnes PT à QB, soit les colonnes #436 à #444. Lorsque j'essaie en changeant comme suit:
prefixe = [PS3] & "_" & [PS4] & "_COL"
For col = 1 To 9
ça fonctionne bien. Mais lorsque j'essaie:
For col = 436 To 444
ça me donne une erreur "Argument ou appel de procédure incorrect" avec la ligne:
Open Repertoire.SelectedItems(1) & "\" & prefixe & Chr(64 + col) & ".txt" For Output As #numfich
Aussi, dans mon exemple, j'avais le suffixe _COLX mais en fait, ce sera autre chose dépendamment de la colonne. Comment mettre du texte différent en fonction de la colonne ?
Ex:
Fichier créé à partir de COLA = prefixe(D1)_bonjour
Fichier créé à partir de COLB = prefixe(D1)_salut
Fichier créé à partir de COLC = prefixe(D1)_allo
Finalement, est-ce possible de faire en sorte que le fichier pour une colonne spécifique n'est pas créer si les lignes 3 à 300 de cette colonne sont vides ? (J'ai deux en-têtes, dans les lignes 1 et 2 de chaque colonne qui ont toujours du texte, donc il ne faut pas en tenir compte).
Attention: lorsque je dis vide, je parle d'aucun texte (""), car chaque cellule contient des formules.
Merci beaucoup pour ton aide et ce beau travail !
eriiic
Messages postés
24569
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
14 mars 2024
7 209
Modifié par eriiic le 15/03/2016 à 18:48
Modifié par eriiic le 15/03/2016 à 18:48
Bonjour,
Dans mon exemple, j'avais le suffixe _COLX mais en fait, ce sera autre chose dépendamment de la colonne. Comment mettre du texte différent en fonction de la colonne ?
Mettre le suffixe en entête de colonne c'est possible ?
lorsque je dis vide, je parle d'aucun texte ("")
Est-ce qu'il peut y avoir des "" au milieu ou sont-ils obligatoirement à la fin de la colonne ?
S'il y en a au milieu faut-il les sauter ou les conserver ?
J'ai deux en-têtes, dans les lignes 1 et 2 de chaque colonne...
Dépose un fichier exemple en précisant où tu as mis le préfixe et les suffixes
cjoint.com et coller ici le lien fourni.
eric
Dans mon exemple, j'avais le suffixe _COLX mais en fait, ce sera autre chose dépendamment de la colonne. Comment mettre du texte différent en fonction de la colonne ?
Mettre le suffixe en entête de colonne c'est possible ?
lorsque je dis vide, je parle d'aucun texte ("")
Est-ce qu'il peut y avoir des "" au milieu ou sont-ils obligatoirement à la fin de la colonne ?
S'il y en a au milieu faut-il les sauter ou les conserver ?
J'ai deux en-têtes, dans les lignes 1 et 2 de chaque colonne...
Dépose un fichier exemple en précisant où tu as mis le préfixe et les suffixes
cjoint.com et coller ici le lien fourni.
eric
ImaSTAT
Messages postés
21
Date d'inscription
vendredi 19 avril 2013
Statut
Membre
Dernière intervention
2 septembre 2016
Modifié par ImaSTAT le 15/03/2016 à 19:54
Modifié par ImaSTAT le 15/03/2016 à 19:54
Bonjour,
Mettre le suffixe en entête de colonne c'est possible ?
Oui, je pourrais utiliser la Ligne 1 de chaque colonne comme suffixe, on aurait ainsi les fichiers finaux qui serait nommés selon:
prefixe_ligne1deLaColonne1
prefixe_ligne1deLaColonne2
etc.
Est-ce qu'il peut y avoir des "" au milieu ou sont-ils obligatoirement à la fin de la colonne ?
S'il y en a au milieu faut-il les sauter ou les conserver ?
En fait, il n'y a pas de guillemets. Les lignes 3 à 300 de chaque colonne peuvent contenir des valeurs ou non, en fonction de ce qui retourne de la formule. Donc les lignes 3 à 300 de mes 9 colonnes contiennent nécessairement des formules, mais pas nécessairement des valeurs. Toutefois, les lignes 1 et 2 de chaque colonnes contiennent des valeurs en tout temps.
Donc, ce que j'aimerais c'est que le fichier pour une colonne X ne soit pas créé si sa colonne n'a aucune valeur du tout en ligne 3:300
Voir ci-joint le fichier d'exemple que j'ai fait. Dans cet exemple, on créer un fichier .txt contenant les lignes 2 à 5 pour chaque colonne F à N si cette dernière contient des valeurs dans la plage des lignes 3 à 5.
Ainsi, je devrais obtenir 5 fichiers:
PREFIXE_SUFFIXE1 contenant les valeurs F2 à F5
PREFIXE_SUFFIXE3 contenant les valeurs H2 à H5
PREFIXE_SUFFIXE4 contenant les valeurs I2 à I5
PREFIXE_SUFFIXE6 contenant les valeurs K2 à K5
PREFIXE_SUFFIXE8 contenant les valeurs M2 à M5
Dans cet exemple j'ai utiliser
et ça fonctionne pour sortir les 9 colonnes dans des fichiers.
Pourquoi est-ce que ça ne fonctionne pas avec 436 To 444 ?
Oh et je prend une chance. Lorsque le fichier .TXT est créer, il y a toujours une ligne "vide" à la fin du fichier. Est-ce possible de supprimer cette ligne vide pour que le fichier arrête réellement à la dernière ligne de texte (aucun retour final). Le serveur où j'upload les fichiers est très pointilleux et il retournera un erreur s'il y a une ligne de commande vide dans le fichier .txt
http://www.cjoint.com/c/FCpsTiERMGx
Merci beaucoup !
Mettre le suffixe en entête de colonne c'est possible ?
Oui, je pourrais utiliser la Ligne 1 de chaque colonne comme suffixe, on aurait ainsi les fichiers finaux qui serait nommés selon:
prefixe_ligne1deLaColonne1
prefixe_ligne1deLaColonne2
etc.
Est-ce qu'il peut y avoir des "" au milieu ou sont-ils obligatoirement à la fin de la colonne ?
S'il y en a au milieu faut-il les sauter ou les conserver ?
En fait, il n'y a pas de guillemets. Les lignes 3 à 300 de chaque colonne peuvent contenir des valeurs ou non, en fonction de ce qui retourne de la formule. Donc les lignes 3 à 300 de mes 9 colonnes contiennent nécessairement des formules, mais pas nécessairement des valeurs. Toutefois, les lignes 1 et 2 de chaque colonnes contiennent des valeurs en tout temps.
Donc, ce que j'aimerais c'est que le fichier pour une colonne X ne soit pas créé si sa colonne n'a aucune valeur du tout en ligne 3:300
Voir ci-joint le fichier d'exemple que j'ai fait. Dans cet exemple, on créer un fichier .txt contenant les lignes 2 à 5 pour chaque colonne F à N si cette dernière contient des valeurs dans la plage des lignes 3 à 5.
Ainsi, je devrais obtenir 5 fichiers:
PREFIXE_SUFFIXE1 contenant les valeurs F2 à F5
PREFIXE_SUFFIXE3 contenant les valeurs H2 à H5
PREFIXE_SUFFIXE4 contenant les valeurs I2 à I5
PREFIXE_SUFFIXE6 contenant les valeurs K2 à K5
PREFIXE_SUFFIXE8 contenant les valeurs M2 à M5
Dans cet exemple j'ai utiliser
For col = 6 To 14
et ça fonctionne pour sortir les 9 colonnes dans des fichiers.
Pourquoi est-ce que ça ne fonctionne pas avec 436 To 444 ?
Oh et je prend une chance. Lorsque le fichier .TXT est créer, il y a toujours une ligne "vide" à la fin du fichier. Est-ce possible de supprimer cette ligne vide pour que le fichier arrête réellement à la dernière ligne de texte (aucun retour final). Le serveur où j'upload les fichiers est très pointilleux et il retournera un erreur s'il y a une ligne de commande vide dans le fichier .txt
http://www.cjoint.com/c/FCpsTiERMGx
Merci beaucoup !
eriiic
Messages postés
24569
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
14 mars 2024
7 209
15 mars 2016 à 20:30
15 mars 2016 à 20:30
En fait, il n'y a pas de guillemets
Oui, c'était pour symboliser une cellule vide avec formule ="".
J'ai beau relire, je ne vois pas la réponse : peut-il y en avoir en milieu de colonne ? (et donc avec des valeur <>"" qui suivent.
Les colonnes à sortir démarreront toujours en F ?
Leur nombre peut être variable ?
Oui, c'était pour symboliser une cellule vide avec formule ="".
J'ai beau relire, je ne vois pas la réponse : peut-il y en avoir en milieu de colonne ? (et donc avec des valeur <>"" qui suivent.
Les colonnes à sortir démarreront toujours en F ?
Leur nombre peut être variable ?
ImaSTAT
Messages postés
21
Date d'inscription
vendredi 19 avril 2013
Statut
Membre
Dernière intervention
2 septembre 2016
>
eriiic
Messages postés
24569
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
14 mars 2024
15 mars 2016 à 20:44
15 mars 2016 à 20:44
Bonjour,
Oui, il peut y avoir des cellules vides en milieu de colonne. Mon erreur, j'ai oublié d'inclure ce scénario dans mon fichier. La colonne H par exemple, pourrait avoir des valeurs en H3 et H5 mais aucune valeur en H4, quoi que la formule serait toujours présente mais retournerais "".
Dans mon exemple, c'est toujours en F que ça débute, oui. En réalité, je ne connais pas encore la vrai colonne de départ car mon fichier n'est pas terminé à 100%. Mais ce sera quelque chose dans les alentours de PT, soit la 436e colonne. Ce sont toujours les même 9 colonnes, pour l'instant, et il sont une à la suite de l'autre. Il se pourrait que dans le futur j'ai besoin d'en ajouter, mais pour l'instant c'est fixe.
Merci
Oui, il peut y avoir des cellules vides en milieu de colonne. Mon erreur, j'ai oublié d'inclure ce scénario dans mon fichier. La colonne H par exemple, pourrait avoir des valeurs en H3 et H5 mais aucune valeur en H4, quoi que la formule serait toujours présente mais retournerais "".
Dans mon exemple, c'est toujours en F que ça débute, oui. En réalité, je ne connais pas encore la vrai colonne de départ car mon fichier n'est pas terminé à 100%. Mais ce sera quelque chose dans les alentours de PT, soit la 436e colonne. Ce sont toujours les même 9 colonnes, pour l'instant, et il sont une à la suite de l'autre. Il se pourrait que dans le futur j'ai besoin d'en ajouter, mais pour l'instant c'est fixe.
Merci
ImaSTAT
Messages postés
21
Date d'inscription
vendredi 19 avril 2013
Statut
Membre
Dernière intervention
2 septembre 2016
>
ImaSTAT
Messages postés
21
Date d'inscription
vendredi 19 avril 2013
Statut
Membre
Dernière intervention
2 septembre 2016
15 mars 2016 à 21:55
15 mars 2016 à 21:55
Pour préciser également, dès qu'il y a une valeur entre la ligne 3 et 300 dans une colonne, celle-ci doit avoir un fichier .TXT qui contiendra uniquement la ligne 2 + les lignes qui ont des valeurs (si possible). Si trop complexe, nous pourrons supprimer les valeurs vides dans le fichier TXT manuellement.
Merci
Merci
eriiic
Messages postés
24569
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
14 mars 2024
7 209
15 mars 2016 à 22:49
15 mars 2016 à 22:49
Non, pas plus complexe que ça. Le tout est de savoir le besoin et le contexte exacts.
1) donc ta 1ère colonne est appeler à changer.
Tu adapteras ou on peut se baser sur la 1ère cellule vide ligne 2 qui ne pourrait être que celle sous le préfixe à coup sûr ?
2) le nombre de col peut varier aussi. Je me base sur le fait que les suffixe seront suivi d'une cellule vide ou tu préfères une constante en début de programme à adapter ?
Je vois ça demain.
1) donc ta 1ère colonne est appeler à changer.
Tu adapteras ou on peut se baser sur la 1ère cellule vide ligne 2 qui ne pourrait être que celle sous le préfixe à coup sûr ?
2) le nombre de col peut varier aussi. Je me base sur le fait que les suffixe seront suivi d'une cellule vide ou tu préfères une constante en début de programme à adapter ?
Je vois ça demain.
ImaSTAT
Messages postés
21
Date d'inscription
vendredi 19 avril 2013
Statut
Membre
Dernière intervention
2 septembre 2016
>
eriiic
Messages postés
24569
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
14 mars 2024
16 mars 2016 à 02:08
16 mars 2016 à 02:08
Bonjour,
Je comprend qu'il peut être difficile de s'y retrouver sans le contexte global.
En fait, j'ai monté le fichier d'exemple en supposant qu'il serait facile de définir les colonnes à traiter par la suite.
1) Dans mon fichier exemple, les colonnes A à D sont appelés à changer fréquemment, il pourrait y en avoir plus ou moins. Mais effectivement, la colonne Préfixe demeure celle qui délimite ce qui est à extraire (toutes les colonnes après le préfixe peuvent être extraient), et la Ligne 2 de cette colonne demeurera vide, présentement les lignes 3 et 4 définissent le préfixe (voir plus bas), et toutes les autres lignes en dessous de la colonne préfixe sont vides. Un ou l'autre me convient, je peux adapter la macro en fonction des colonnes que je modifie si ça allège le code.
2) Les suffixe ne seront pas suivi d'une cellule vide s'ils sont placés en Ligne 1 de chaque colonne à extraire. La Ligne 2 de ces colonnes aura toujours du texte, qui doit être extrait d'ailleurs. Je crois qu'une constante à adapter serait l'idéal.
Si tu aimes la lecture, voici un petit roman expliquant mon scénario plus précisément :)
En réalité, j'ai un fichier avec plusieurs colonnes qui, au final, une fois compilées de différentes façons, se retrouve avec un résultat dans les 9 dernières colonnes de la feuille (pourrait éventuellement être plus, mais resterons les dernières colonnes du fichier). Ce sont ces dernières colonnes qui doivent être extraient. Le préfixe se trouvera sur une colonne quelconque, entre les colonnes du début et les colonnes à extraire, Le préfixe sera constitué des cellules 3 et 4 de la colonne "préfixe".
Ainsi, supposons que la colonne préfixe est PR (c'est celle-là pour l'instant, mais est portée à changer en fonction des colonnes que j'ajouterai/supprimerai avant).
PR3 et PR4 constituerons le préfixe, soit:
Toutes les colonnes qui suivront (pour l'instant PS à QA), seront celle qui doivent être extraient en fichier TXT si au moins une des lignes 3 à 300 contiennent une valeur. J'ai besoin d'être en mesure de définir ces colonnes, car il est très probable que des colonnes s'ajoutent ou se retirent avant le préfixe, ce qui décalera les colonnes à extraire également.
Le suffixe ne changera jamais pour chaque colonne, mais si une nouvelle colonne à extraire est nécessaire dans le futur, elle nécessitera un nouveau suffixe.
Le suffixe peut être n'importe où, il ne correspond pas nécessairement à une cellule. Idéalement, ce serait une constante dans le code, soit par exemple Suffixe de COL PS = Bienvenue, sinon il peut correspondre à la Ligne 1 de chaque colonne à extraire.
Supposons que le suffixe est sur la première ligne de chaque colonne à extraire, et que:
PR3 = Allo
PR4 = Bonjour
PS1 = Bienvenue
Le fichier final correspondant à la colonne PS sera:
Allo_Bonjour_Bienvenue.txt
et contiendra les cellules avec des valeurs de PS2 à PS300, en autant qu'il y ai au moins une valeur dans la plage PS3 à PS300. Si aucune valeur dans cette plage, alors le fichier n'est pas créé. Si par exemple, il y a des valeurs seulement aux lignes PS30 et PS101, alors le fichier contiendra uniquement les lignes PS2, PS30 et PS101 (Ligne 2 est toujours présente on top, elle correspond aux "headers").
En espérant que ça t'aide à comprendre mon besoin. Merci énormément de ton temps.
N'hésites pas si tu as des questions :)
Je comprend qu'il peut être difficile de s'y retrouver sans le contexte global.
En fait, j'ai monté le fichier d'exemple en supposant qu'il serait facile de définir les colonnes à traiter par la suite.
1) Dans mon fichier exemple, les colonnes A à D sont appelés à changer fréquemment, il pourrait y en avoir plus ou moins. Mais effectivement, la colonne Préfixe demeure celle qui délimite ce qui est à extraire (toutes les colonnes après le préfixe peuvent être extraient), et la Ligne 2 de cette colonne demeurera vide, présentement les lignes 3 et 4 définissent le préfixe (voir plus bas), et toutes les autres lignes en dessous de la colonne préfixe sont vides. Un ou l'autre me convient, je peux adapter la macro en fonction des colonnes que je modifie si ça allège le code.
2) Les suffixe ne seront pas suivi d'une cellule vide s'ils sont placés en Ligne 1 de chaque colonne à extraire. La Ligne 2 de ces colonnes aura toujours du texte, qui doit être extrait d'ailleurs. Je crois qu'une constante à adapter serait l'idéal.
Si tu aimes la lecture, voici un petit roman expliquant mon scénario plus précisément :)
En réalité, j'ai un fichier avec plusieurs colonnes qui, au final, une fois compilées de différentes façons, se retrouve avec un résultat dans les 9 dernières colonnes de la feuille (pourrait éventuellement être plus, mais resterons les dernières colonnes du fichier). Ce sont ces dernières colonnes qui doivent être extraient. Le préfixe se trouvera sur une colonne quelconque, entre les colonnes du début et les colonnes à extraire, Le préfixe sera constitué des cellules 3 et 4 de la colonne "préfixe".
Ainsi, supposons que la colonne préfixe est PR (c'est celle-là pour l'instant, mais est portée à changer en fonction des colonnes que j'ajouterai/supprimerai avant).
PR3 et PR4 constituerons le préfixe, soit:
[PR3] & "_" & [PR4] & "_"
Toutes les colonnes qui suivront (pour l'instant PS à QA), seront celle qui doivent être extraient en fichier TXT si au moins une des lignes 3 à 300 contiennent une valeur. J'ai besoin d'être en mesure de définir ces colonnes, car il est très probable que des colonnes s'ajoutent ou se retirent avant le préfixe, ce qui décalera les colonnes à extraire également.
Le suffixe ne changera jamais pour chaque colonne, mais si une nouvelle colonne à extraire est nécessaire dans le futur, elle nécessitera un nouveau suffixe.
Le suffixe peut être n'importe où, il ne correspond pas nécessairement à une cellule. Idéalement, ce serait une constante dans le code, soit par exemple Suffixe de COL PS = Bienvenue, sinon il peut correspondre à la Ligne 1 de chaque colonne à extraire.
Supposons que le suffixe est sur la première ligne de chaque colonne à extraire, et que:
PR3 = Allo
PR4 = Bonjour
PS1 = Bienvenue
Le fichier final correspondant à la colonne PS sera:
Allo_Bonjour_Bienvenue.txt
et contiendra les cellules avec des valeurs de PS2 à PS300, en autant qu'il y ai au moins une valeur dans la plage PS3 à PS300. Si aucune valeur dans cette plage, alors le fichier n'est pas créé. Si par exemple, il y a des valeurs seulement aux lignes PS30 et PS101, alors le fichier contiendra uniquement les lignes PS2, PS30 et PS101 (Ligne 2 est toujours présente on top, elle correspond aux "headers").
En espérant que ça t'aide à comprendre mon besoin. Merci énormément de ton temps.
N'hésites pas si tu as des questions :)