Salut,
Eh, c'est bien ça !
Alors, dans ce cas, la réponse est "oui, je vais t'aider" !
Alors pour faire plus simple, on va compliquer un peu tout ça.
Je veux deux variables, l'une pour savoir où je lis (source), l'autre où j'écris (cible).
Code:
Dim ws_source As Worksheet
Dim ws_target As Worksheet
Set ws_source = Worksheets("Liste salariés")
Set ws_target = Worksheets("feuil2")
If ws_cible.Range("AG5").Value = "CTEM" Then
ws_cible.Range("A5,B5,AI5,AJ5").Copy Destination:=ws_target.Range("A2")
End If
C'est pas assez compliqué :/
Soit
cols_source les colonnes qui t'intéressent dans la source, c'est-à-dire, A, B, AI et AJ.
Et soit
cel_target, la cellule vers laquelle on copie. (Tu vas voir qu'il faut en faire une variable)
Code:
Dim cols_source As Range
Dim cel_target As Range
Set cols_source = Union(ws_source.Columns("A"), ws_source.Columns("B"), ws_source.Columns("AI"), ws_source.Columns("AJ"))
Set cel_target = ws_target.Range("A2")
Certains voudraient écrire la ligne 4 avec un
With :
Code:
With ws_source
Set cols_source = Union(.Columns("A"), .Columns("B"), .Columns("AI"), .Columns("AJ"))
End With
Bon, il n'y a plus qu'à mettre la ligne 5 de la source en paramètre.
On doit s'occuper de AG5, A5, B5, AI5, AJ5.
Oups, j'ai oublié de m'occuper de la colonne AG.
Voilà qui est fait :
Code:
Dim col_test_source As Range
Set col_test_source = ws_source.Columns("AG")
Soit
lig_souce, une ligne de la feuille source.
Tout ça nous donne :
Code:
Dim ws_source As Worksheet
Dim cols_source As Range
Dim col_test_source As Range
Dim lig_source As Range
Dim ws_target As Worksheet
Dim cel_target As Range
Set ws_source = Worksheets("Liste salariés")
Set ws_target = Worksheets("feuil2")
With ws_source
Set cols_source = Union(.Columns("A"), .Columns("B"), .Columns("AI"), .Columns("AJ"))
Set col_test_source = .Columns("AG")
End With
Set cel_target = ws_target.Range("A2")
' // Pour la ligne 5 !
Set lig_source = ws_source.Rows(5)
If Intersect(lig_source , col_test_source).Value = "CTEM" Then
Intersect(lig_source, cols_source).Copy Destination:=cel_target
End If
Et maintenant ?
Ben on fait varier
lig_source ! (Et
cel_target aussi)
Alors soit tu sais combien tu as de lignes, soit on va de la ligne 5 à la ligne 65536, soit on va de la ligne 5 à la dernière ligne non-vide, soit on s'arrête à la première ligne vide, etc.
Les possibilités ne manquent pas.
Disons que tu veux le faire pour les ligne 5 à 10.
Voilà alors le code à adopter :
Code:
' // Le For Each va faire varier la ligne, de ligne en ligne
For Each lig_source In ws_source.Range(ws_source.Rows(5), ws_source.Rows(10))
If Intersect(lig_source , col_test_source).Value = "CTEM" Then
Intersect(lig_source, cols_source).Copy Destination:=cel_target
' // A la suivante dans la cible !
Set cel_target = cel_target.Offset(1)
End If
Next
T'as vu ?! Grâce à la variable
cel_target, on ne se déplace dans la feuille cible que si on quelque chose à y a copier. Ainsi, pas de "trous", ce qui arrive quand on fait "si Ok copier ligne 5 dans ligne 5".
-----------------------
Alors, ça t'aide ????? :sol: