Code VBA excel faire une boucle pour chaque feuille
Résolu/Ferméakb213 Messages postés 18 Date d'inscription mercredi 28 novembre 2018 Statut Membre Dernière intervention 15 mai 2023 - 23 nov. 2022 à 21:51
- Code VBA excel faire une boucle pour chaque feuille
- Liste déroulante excel - Guide
- Feuille de pointage excel - Télécharger - Tableur
- Déplacer une colonne excel - Guide
- Calculer une moyenne sur excel - Guide
- Formule excel pour additionner plusieurs cellules - Guide
4 réponses
21 nov. 2022 à 00:10
Bonjour
Dans le code que tu nous montres, je ne vois aucune boucle sur les feuilles... Impossible donc de te dire où tu as fait une erreur
21 nov. 2022 à 00:22
Ah j'ai pas mis le code car il fonctionne pas le voilà , merci :)
Sub CopyData()
'WB1 source
'WB2 destination
Dim WB1 As Workbook
Dim WB2 As Workbook
'Dont update the screen - makes it work faster
Application.ScreenUpdating = False
'Open the other workbook
'Input the FULL path to the file, including its extension
Set WB2 = ActiveWorkbook
Set WB1 = Workbooks.Open("C:\Users\user\Documents\Dossier Source.xlsx")
'derniere ligne
Dim LastRow As Long
Dim LastRow2 As Long
LastRow = WB1.Worksheet(1).Cells(Rows.Count, 2).End(xlUp).Row
LastRow2 = WB2.Worksheets(1).Cells(Rows.Count, 5).End(xlUp).Row
For a = 1 to 11
'a le numéro de la feuille du classeur
For i = 6 To LastRow
If WB1.Worksheet(a).Cells(i, 2).Value = "ASQ1" Then
WB1.Worksheet(a).Cells(i, 3).Copy _
WB2.Worksheet(a).Celles(LastRow2 + 1, 5)
Application.CutCopyMode = False
End If
Next
Next
'Close the workbook from which we just got some data and make sure not to save it in case accidental changes were made to it.
WB1.Close SaveChanges:=False
'Turn on screen updating again - makes Excel usable
Application.ScreenUpdating = True
End Sub
21 nov. 2022 à 06:24
Tu veux copier les données dans une seule feuille où tu veux que le classeur de destination est autant de feuilles que le classeur d'origine (ce que tu sembles vouloir faire avec le code que tu nous montres)
21 nov. 2022 à 20:00
Le but est de copier pour chaque feuille du classeur source des données dans une feuille du classeur destination
feuille (1) dans feuille (1) etc.
21 nov. 2022 à 20:36
Donc, la feuille à utiliser pour le WB2 doit être fixe ...
WB2.Worksheet(1)
Tu dois également recalculer le numéro de la dernière ligne DANS la boucle
For a = 1 to 11 LastRow = WB1.Worksheet(a).Cells(Rows.Count, 2).End(xlUp).Row LastRow2 = WB2.Worksheets(1).Cells(Rows.Count, 5).End(xlUp).Row
21 nov. 2022 à 21:34
préférable, probablement:
LastRow = WB1.Worksheet(a).Cells(WB1.Worksheet(a).Rows.Count, 2).End(xlUp).Row LastRow2 = WB2.Worksheets(1).Cells(WB2.Worksheets(1).Rows.Count, 5).End(xlUp).Row
Si on ne précise pas de quelle feuille il s'agit, Rows.Count travaille sur la feuille active. Qui est rarement celle imaginée par le programmeur.
22 nov. 2022 à 10:53
Bonjour
Merci pour la réponse, c'est vrai faut mettre les lastrow dans la boucle pour updater sinon ça fait qu'écraser MERCI!
Par contre je souhaite que la feuille (1) source soit copiée dans feuille (1) destination et feuille (2) source soit copiée dans feuille (2) destination et feuille (3) source soit copiée dans feuille (3) destination ainsi de suite.
Je crois que si je fixe
WB2.Worksheet(1) ça me copiera tout dedans non ? Merci encore
De toutes les faons, quand on teste un code, et à moins d'être assez sûr de soi, la première chose à faire est de le faire tourner "en pas à pas". Ainsi tu peux vérifier que ce que tu demandes est bien fait et correspond à ce que tu attends; alors tu peux voir à quelle ligne ça coince et où ton écriture est incorrecte.
Après, si tu ne parviens pas à trouver la réponse à la ligne fautive, alors on peut te répondre et chercher comment en sortir.
Bon courage.
23 nov. 2022 à 21:51
Bonjour,
j'ai crée un nouveau fichier j'ai retapé le code en étant concentré, ça fonctionne la boucle dans la boucle.
Merci pour votre aide
For a = 1 To 10
For i = 14 To LastRow
LastRowDist = WB2.Worksheets(a).Cells(Rows.Count, 3).End(xlUp).Row
If WB1.Worksheets(a).Cells(i, 3).Value = "CQ-300" Then
WB1.Worksheets(a).Cells(i, 11).Copy _
WB2.Worksheets(a).Cells(LastRowDist + 1, 3)
Application.CutCopyMode = False
End If
Next
Next