Microsoft 365 création d'onglet/ enregistrement fichier en CSV

Grouchet

XLDnaute Nouveau
Bonjour à tous, je viens vers vous car je bloque dans le codage de mon fichier.

J'ai créer un fichier automatique pour avoir une trace informatique des pièces à relancer. Le fichier est tout simple, un formulaire sous userform qui lors de l'enregistrement vient à la suite dans une BDD. Lorsque l'on clique 2 fois dans la colonne "relancé" dans l'onglet "BBD", un oui s'affiche avec l'heure du clic. Lors de la validation des relances, les pièces ayant été indiqué en "oui" viennent s'intégrer dans différentes "fiche_relance" en fonction de leur paramètre (matière, coloris, épaisseur).

Jusqu'ici tout va bien :')

Je souhaite rajouter une fonction supplémentaire lors de la validation des relances. Je m'explique:

Obj: créer un fichier CSV à enregistrer à un endroit imposé dans le serveur avec la listes des pièces qui ont été validés lors de la relance.

-> Lister lors du clic sur "validation des relances" toutes les pièces ayant un "oui" et que la case n'est pas en rouge, toutes les pièces se copie dans l'onglet CSV (uniquement les infos présentes dans l'onglet CSV)

-> Enregistrer sous uniquement l'onglet "CVS" au format CSV à un chemin imposé. Le nom du fichier CSV dois s'enregistrer avec un nom différent à chaque fois.

J'ai mis un fichier exemple, on peut y trouver le fameux onglet "CSV10_02_1" que je souhaite recréer à chaque validation des relances. (copie de l'onglet "CSV" + rajout des lignes)

J'ai nommé une macro "CSV" mais je souhaite combiner à "fiche_relance". Je n'arrive à enlever le code qui permet de créer qu'une seule feuille.

N'hésitez surtout pas à m'interroger sur le sujet, je me tient évidemment à votre disposition pour toute informations complémentaires (je ne me suis pas forcement bien exprimé sur ces quelques lignes, je m'en excuse)

Cordialement,

Maxime 😁
 

Pièces jointes

  • création fichier CSV.xlsm
    221.4 KB · Affichages: 10
Solution
Bonsoir à tous, bonsoir Maxime @Grouchet

Le fichier joint contient une solution.
La macro enregistre le fichier CSV sous le même répertoire que celui du classeur contenant les macros.
(Ne pas oublier d'enregistrer ce classeur avant de lancer la macro.)

En fait il suffit de ne créer la feuille CSV que la 1ère fois ...
VB:
...
                         cel.Interior.ColorIndex = 3 'ajout couleur rouge
                         Call Recherche(ShFr, i) 'recherche bateau urgent
                        
                         'Constitution du fichier CSV
                         '¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
                         If WshCSV2 Is Nothing Then
                              'La 1ère fois on crée la feuille...

AtTheOne

XLDnaute Accro
Supporter XLD
Bonsoir à tous, bonsoir Maxime @Grouchet

Le fichier joint contient une solution.
La macro enregistre le fichier CSV sous le même répertoire que celui du classeur contenant les macros.
(Ne pas oublier d'enregistrer ce classeur avant de lancer la macro.)

En fait il suffit de ne créer la feuille CSV que la 1ère fois ...
VB:
...
                         cel.Interior.ColorIndex = 3 'ajout couleur rouge
                         Call Recherche(ShFr, i) 'recherche bateau urgent
                        
                         'Constitution du fichier CSV
                         '¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
                         If WshCSV2 Is Nothing Then
                              'La 1ère fois on crée la feuille
                                 WshCSV.Copy   'Copie la feuille CSV dans un nouveau classeur
                                 Set WshCSV2 = ActiveSheet
                                 WshCSV2.Name = "REBUS" & "_" & Format(Day(Date), "00") & "-" & Format(Month(Date), "00") & "_" & Format(Time, "hhmmss")
                                 LgnCSV = 1
                         End If
                         'Remplissage de la ligne LgnCSV
                         '¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
                         LgnCSV = LgnCSV + 1
                         WshCSV2.Range("A" & LgnCSV) = cel.Offset(0, -11) 'Design
                         WshCSV2.Range("B" & LgnCSV) = cel.Offset(0, -7)  'long
                         WshCSV2.Range("C" & LgnCSV) = cel.Offset(0, -6)  'larg
                         WshCSV2.Range("D" & LgnCSV) = cel.Offset(0, -8)  'ep
                         WshCSV2.Range("E" & LgnCSV) = cel.Offset(0, -9)  'matière
                         WshCSV2.Range("F" & LgnCSV) = cel.Offset(0, 5)   'sdf
                         WshCSV2.Range("G" & LgnCSV) = cel.Offset(0, -4)  'commentaire
                         WshCSV2.Range("H" & LgnCSV) = cel.Offset(0, 6)   'chant1
                         WshCSV2.Range("I" & LgnCSV) = cel.Offset(0, 7)   'Chant2
                         WshCSV2.Range("J" & LgnCSV) = cel.Offset(0, 8)   'Chant3
                         WshCSV2.Range("K" & LgnCSV) = cel.Offset(0, 9)   'chant4
                         WshCSV2.Range("L" & LgnCSV) = cel.Offset(0, 5)   'Meuble
                         WshCSV2.Range("M" & LgnCSV) = cel.Offset(0, 10)  'repère
                         WshCSV2.Range("N" & LgnCSV) = cel.Offset(0, 4)   'Option
                         WshCSV2.Range("O" & LgnCSV) = cel.Offset(0, -15) 'modèle bateau
                         WshCSV2.Range("P" & LgnCSV) = cel.Offset(0, -16) 'num bateau
                         WshCSV2.Range("Q" & LgnCSV) = cel.Offset(0, -10) 'Qté
                        '¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
                     End If
             End Select
             'ref = ""
         Next cel
         .Range("T_BDD").Sort Key1:=Range("T_BDD[Date]"), Header:=xlYes, Order1:=xlAscending 'tri pour remettre BDD par date
     End With
    
'Sauvegarde du fichier CSV s'il existe
     If Not WshCSV2 Is Nothing Then
          WshCSV2.SaveAs Chemin & "\" & WshCSV2.Name & ".CSV", xlCSV
     End If
...

Voir le classeur joint.
J'ai dû ajouté le préfixe ThisWorkbook dans la ligne suivante :
Code:
...
If cel.Value = "Oui" And cel.Offset(0, -9) & cel.Offset(0, -8) & cel.Offset(0, -13) <> ref Or ref = "" Then
    ThisWorkbook.Sheets("Fiche_relance").Copy after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
    Set ShFr = ActiveSheet
    ShFr.Name = "FR" & "_" & Format(Day(Date), "00") & "-" & Format(Month(Date), "00") & "_" & k
...
car je crée directement la copie de l'onglet CSV dans un nouveau Classeur par la méthode Copy sans préciser After ou Before.
Mises à part les déclarations (en particulier la variable Chemin initialisée avec ThisWorkbook.path) et cette ligne je n'ai pas touché au reste de ton code.

Voilà
Bon courage
Amicalement
Alain
 

Pièces jointes

  • Création fichier CSV.xlsm
    198.9 KB · Affichages: 4

Discussions similaires

Statistiques des forums

Discussions
312 896
Messages
2 093 386
Membres
105 716
dernier inscrit
jrmdprt