Bonsoir tout le monde,
J'ai fait ce code qui me permet de copier une plage de données vers un nouveau classeur.
La plage de données se comporte de plusieurs colonnes dont certaines sont masquées. Les données masquées ne doivent pas être exportées.
Je boucle tout d'abord dans la colonne fournisseur.
Avec le nom du fournisseur :
Ce code fonctionne correctement mais j'aimerais l'optimiser (ex enlever les mouvements d'écran dûs notamment aux créations des classeurs). Donc si une âme charitable passe par là.
J'avais dans l'idée, dans un premier temps, de lister les données dans un tableau, filtrer les fournisseurs sans doublon et ensuite de créer autant de fichiers que de fournisseurs. Enfin, incrémenter les données et les photos dans les classeurs fermés.
Mais ça, je ne sais pas faire. Mes tentatives ont échouées et m'ont conduit au code ci-dessous.
J'ai mis en pièce jointe les fonctions persos utilisées et un fichier exemple sans macro.
Par avance merci d'avoir pris le temps de me lire et prendre le temps de me répondre.
Ludwig
J'ai fait ce code qui me permet de copier une plage de données vers un nouveau classeur.
La plage de données se comporte de plusieurs colonnes dont certaines sont masquées. Les données masquées ne doivent pas être exportées.
Je boucle tout d'abord dans la colonne fournisseur.
Avec le nom du fournisseur :
- Je filtre la plage,
- je copie la plage,
- j'ouvre un nouveau classeur,
- je colle la plage,
- J'incrémente les photos en fonction des références,
- Je ferme en enregistrant le nouveau classeur : Commande + nom fournisseur + date + heure.
Ce code fonctionne correctement mais j'aimerais l'optimiser (ex enlever les mouvements d'écran dûs notamment aux créations des classeurs). Donc si une âme charitable passe par là.
J'avais dans l'idée, dans un premier temps, de lister les données dans un tableau, filtrer les fournisseurs sans doublon et ensuite de créer autant de fichiers que de fournisseurs. Enfin, incrémenter les données et les photos dans les classeurs fermés.
Mais ça, je ne sais pas faire. Mes tentatives ont échouées et m'ont conduit au code ci-dessous.
J'ai mis en pièce jointe les fonctions persos utilisées et un fichier exemple sans macro.
Par avance merci d'avoir pris le temps de me lire et prendre le temps de me répondre.
Ludwig
VB:
Dim Wb As String
Dim Nf As String
Sub BonCommande()
Dim Chemin As String
Dim NomFichier As String
Dim NomFour As String
Dim dl As Long
Wb = ActiveWorkbook.Name
Nf = ActiveSheet.Name
dl = DerniereLigne(Wb, Nf, 1)
With Application
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlManual
End With
If Not MsgBox("Voulez-vous valider le panier et générer les bons de commande ?", vbYesNo) = vbYes Then GoTo fin
Call Tri(Wb, Nf, 1, "Nom fournisseur", "Référence Cabi") 'Tri la feuille
For k = 2 To dl 'Boucle sur les noms de fournisseur
NomFour = Cells(k, RechercheC(Wb, Nf, 1, "Nom fournisseur"))
If Not NomFour = Cells(k - 1, RechercheC(Wb, Nf, 1, "Nom fournisseur")) Then 'Si nouveau fournisseur
Cells(1, 1).AutoFilter 'Ajoute les filtres
plage(Wb, Nf, 1).AutoFilter Field:=4, Criteria1:=NomFour 'Filtre sur le fournisseur
Selection.CurrentRegion.Copy 'Copie le tableau filtré
Workbooks.Add 'Ouvre un nouveau Classeur
ActiveSheet.Paste 'Colle le tableau
Application.CutCopyMode = False
ImageBonCommande 'Incrémente les photos
Chemin = "C:\Users\....\Commande fournisseur"
ChDir (Chemin)
NomFichier = "Commande " & NomFour & " du " & Format(Date, "ddmmyyyy") & " " & Format(Time, "hhmmss") & ".xlsx"
ActiveWorkbook.SaveAs Filename:= _
Chemin & "\" & NomFichier _
, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False 'Enregistre le nouveau classeur
ActiveWindow.Close 'Ferme le classeur
End If
Cells(1, 1).AutoFilter 'Enlève les filtres
Next k
plage(Wb, Nf, 1).ClearContents 'Supprime le panier
ListeC(Wb, "TSI", 1, "En commande").ClearContents
ListeC(Wb, "Consolidation", 1, "En commande").ClearContents
fin:
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = xlCalculationAutomatic
End With
End Sub