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 
	 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		