Macro - créer un CSV à partir de certaines lignes d'un XLTM
Bonjour à tous,
Après presqu'une après midi à tâtonner pour faire fonctionner des macros ou morceaux de macros trouver sur des forums sans comprendre tous ce que je faisais et surtout sans arriver à mes fins… Je viens demander du secours.
Je cherche à créer un bouton sur mon fichier Modèle Excel .XLTM qui automatise l'export au format CSV point virgule :
* Les lignes sans quantité (ou 0) dans la colonne B et la ligne des entêtes ne doivent pas apparaitre dans le CSV créé.
* Préférence facultative :
- la destination du fichier créé sera le dossier où est enregistré le XLTM
- le nom du fichier sera "BOULONNERIE GRANIT" suivi de la date du jour
Ci joint le fichier XLSM.
Exemple de ma requête :
* données de départ :
| Nr. Comm. | Nb de boite | desi / type / qte par boite |
| 487933011 | 2 | VIS TH 933 8.8 ZI 6X20/Filet total/200 |
| 487933124 | 0 | VIS TH 933 8.8 ZI 6X30/Filet total/200 |
| 487931207 | VIS TH 931 8.8 ZI 6X40/Filet partiel/200 | |
| 487931209 | 10 | VIS TH 931 8.8 ZI 6X50/Filet partiel/200 |
| 487933133 | 0 | VIS TH 933 8.8 ZI 8X16/Filet total/200 |
| 487933022 | 8 | VIS TH 933 8.8 ZI 8X20/Filet total/200 |
* CSV voulu :
487933011;2;VIS TH 933 8.8 ZI 6X20/Filet total/200
487931209;10;VIS TH 931 8.8 ZI 6X50/Filet partiel/200
48793302;8;VIS TH 933 8.8 ZI 8X20/Filet total/200
Avec mes essais, j'avais réussi
- un fichier qui enregistre en CSV mais sans filtrer les lignes
- un fichier qui me supprime les lignes à 0 mais pas les vides et l'entête
- sur d'autres, mon fichier se trouvait écrasé et n'était pas réutilisable..
Bref, est-ce que mon but est atteignable ?
J'espère être compréhensible. Par avance, merci !
Hello,
qqch comme ceci ( il y a peut être 2-3 choses à adapter):
Sub export_csv()
' -- Ajoute feuille pour export csv
Sheets.Add(after:=Sheets(Sheets.Count)).Name = "pour_csv"
' -- Ajoute filtre sur les en tetes
Sheets("BOULONNERIE 8.8").Activate
Range("A1").AutoFilter
' -- Filtre la table sur les differents de 0 et vide
Range("$A$1:$C$100002").AutoFilter Field:=2, Criteria1:="<>0", Operator:=xlAnd, Criteria2:="<>"
' -- Copie la tableau filtrée
Range("A1").CurrentRegion.Copy
Sheets("pour_csv").Paste
Application.CutCopyMode = False
' -- Supprime la feuille des données
Sheets("BOULONNERIE 8.8").Delete
' -- Sauvegarde en csv
ActiveWorkbook.SaveAs Filename:="C:\Users\toto\fichier-commande-boulon-granit2.csv", FileFormat:=xlCSV, CreateBackup:=False, Local:=True
End SubMerci pour ton aide !
Sur ta base j'ai ajusté 2 bricoles :
- suppression de la ligne des entêtes
- enregistrement du fichier dans le dossier source + la date dans le nom
Si ça peux aider quelqu'un d'autre, voila le code que j'utilise:
Sub export_csv()
' -- Ajoute feuille pour export csv
Sheets.Add(after:=Sheets(Sheets.Count)).Name = "pour_csv"
' -- Ajoute filtre sur les en tetes
Sheets("BOULONNERIE 8.8").Activate
Range("A1").AutoFilter
' -- Filtre la table sur les differents de 0 et vide
Range("$A$1:$C$100002").AutoFilter Field:=2, Criteria1:="<>0", Operator:=xlAnd, Criteria2:="<>"
' -- Copie la tableau filtrée
Range("A1").CurrentRegion.Copy
Sheets("pour_csv").Paste
Application.CutCopyMode = False
' -- Supprime la feuille des données
Sheets("BOULONNERIE 8.8").Delete
' -- suppri ligne 1
Rows("1:1").Select
Selection.Delete Shift:=xlUp
' -- Sauvegarde en csv dans le dossier du fichier source !ne fonctionne pas si le fichier est un modèle (sauf si on enregistre)
ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\commande boulons Granit du " & Format(Now(), "dd mm yyyy - hh mm") & ".csv", FileFormat:=xlCSV, CreateBackup:=False, Local:=True
End SubEncore merci