Problème boucle qui s'arrête à la première ligne
Bonjour le Forum,
Je souhaiterais réaliser une boucle qui me permet de copier-coller des éléments dans d'autres feuilles.
Plus exactement, je souhaiterais que de la ligne 2 à la dernière ligne de mon tableau, la macro copie-colle des champs de données en fonction d'une colonne.
Par exemple, pour Marseille, je souhaite que si la colonne L est non vide, c'est-à-dire la 12ème colonne, alors copier coller certains champs dans la feuille Marseille.
J'ai bien défini MultiRange dans mon doc, mais ne vous l'ai pas transmis pour alléger le code. En effet mon problème porte sur la boucle, qui s'arrête à la première ligne :
Dim Lig As Long 'Lig correspond au numéro de Ligne
Dim DerniereLigne As Integer
'Il s'agit d'un tableau avec entêtes, donc la première ligne est la n°2
Lig = 2
'Définition de la dernière ligne selon la première colonne de mon tableau
DerniereLigne = Worksheets("Source").Cells(Rows.Count, 1).End(xlUp).Row
For Lig = 2 To DerniereLigne
If Worksheets("Source").Cells(Lig, 12).Value <> "" Then
MultipleRangeMarseille.Copy
Sheets("Marseille").Range("B4").PasteSpecial xlPasteValues
Sheets("Marseille").Range("B4").PasteSpecial xlPasteFormats
ElseIf Worksheets("Source").Cells(Lig, 24).Value <> "" Then
MultipleRangeLille.Copy
Sheets("Lille").Range("B4").PasteSpecial xlPasteValues
Sheets("Lille").Range("B4").PasteSpecial xlPasteFormats
ElseIf Worksheets("Source").Cells(Lig, 38).Value <> "" Then
MultipleRangeParis.Copy
Sheets("Paris").Range("B4").PasteSpecial xlPasteValues
Sheets("Paris").Range("B4").PasteSpecial xlPasteFormats
End If
Lig = Lig + 1
Next LigJe ne sais pas si j'ai bien reformulé mon problème,
J'utilise souvent la Vba pour autant, il s'agit de ma première boucle...
Merci beaucoup pour votre aide !
Bonjour,
Il est préférable de joindre un fichier
Ceci dit, comme ça au nez,
est-ce que dans votre feuille "Source" vous avez la colonne A qui est remplie de valeurs ?
A+
Bonsoir mm_b
Voici le fichier en retour avec le code modifié
N'oublie pas
Merci beaucoup pour ton aide, ton code m'aide grandement !
Cependant comment faire pour qu'une ligne, qui remplie chaque condition du If, s'ajoute aux feuilles correspondantes?
Par exemple, le Projet O est à la fois inscrit pour Paris et Marseille mais ne s'ajoute que à la feuille Paris.
Re,
Dans ce cas il ne faut pas mettre de "ElseIF" comme c'était le cas dans le code initial
Il faut mettre 3 If... End If qui se suivent
'Pour le département
If Worksheets("Source").Cells(Lig, 12).Value <> "" Then
' Vérifier si ligne vierge existe sinon en ajouter une
Set LstObj = Sheets("Paris").ListObjects(1)
nLig = LigVierge(LstObj)
' Copier les valeursd
MultipleRangeMarseille.Copy
' Les coller dans le tableau
With LstObj.Range(nLig, 1)
.PasteSpecial Paste:=xlPasteValues
.PasteSpecial Paste:=xlPasteFormats
End With
End If
If Worksheets("Source").Cells(Lig, 24).Value <> "" Then
' Vérifier si ligne vierge existe sinon en ajouter une
Set LstObj = Sheets("Marseille").ListObjects(1)
nLig = LigVierge(LstObj)
' Copier les valeursd
MultipleRangeMarseille.Copy
' Les coller dans le tableau
With LstObj.Range(nLig, 1)
.PasteSpecial Paste:=xlPasteValues
.PasteSpecial Paste:=xlPasteFormats
End With
End If
If Worksheets("Source").Cells(Lig, 38).Value <> "" Then
' Vérifier si ligne vierge existe sinon en ajouter une
Set LstObj = Sheets("Lille").ListObjects(1)
nLig = LigVierge(LstObj)
' Copier les valeursd
MultipleRangeMarseille.Copy
' Les coller dans le tableau
With LstObj.Range(nLig, 1)
.PasteSpecial Paste:=xlPasteValues
.PasteSpecial Paste:=xlPasteFormats
End With
End IfA+