Copie d'une ligne variable en décalant de deux colonnes
tschaef
Messages postés3Date d'inscriptiondimanche 16 janvier 2011StatutMembreDernière intervention 5 juin 2011
-
5 juin 2011 à 12:48
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 2015
-
5 juin 2011 à 23:25
Bonjour à tous,
j'ai construit un module qui compare 3 cellules de deux feuilles et qui, quand il trouve une différence, prévient l'utilisateur et insère dans la seconde feuille la ligne complète trouvée.
Cela fonctionne, mais là ou je rencontre un problème, c'est que je désire, lors de la copie, décaler la ligne de deux colonnes vers la droite parce que la seconde feuille contient déjà des données sur ces 2 premières colonnes.
En espérant être assez clair dans mes explications, voilà le code:
Sub ComparInser()
Dim i As Integer, x As String, y As String
For i = 2 To Cells(Rows.Count, 3).End(xlUp).Row
With Sheets("Nouvelle Source")
x = .Cells(i, 1) & .Cells(i, 2) & .Cells(i, 3)
End With
With Sheets("SourceCopieBO")
y = .Cells(i, 3) & .Cells(i, 4) & .Cells(i, 5)
End With
If x <> y Then
MsgBox "La ligne n° " & i & " a changé. Le tableau va être mis à jour."
Je suppose qu'il y a un souci parce que je copie la ligne entière...En fait je n'ai besoin que des 15 premiers éléments (ou cellules) de ma ligne, mais c'est ce que j'ai pu faire de plus propre et de plus court, maintenant, je bloque.
En attendant une âme charitable pour me donner un coup de pouce, merci.
A voir également:
Copie d'une ligne variable en décalant de deux colonnes
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 5 juin 2011 à 13:22
Salut
Si tu copies une ligne complète, elle ne pourra être recoller que sous forme d'une ligne complète, donc tu n'as aucun choix de décalage de cellules.
Il te faut sélectionner et coller que le groupe de cellules qui t'intéresse.
L'enregistreur de macro te donnera le code permettant d'insérer des cellules avec décalage à droite avant de faire le coller.
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Plusieurs problèmes:
1/ Si la ligne concernée est déjà sélectionnée dans la première feuille, erreur 1004...mais c'est pas systématique (ne m'en demandez pas plus)...
2/ Si une seconde ligne doit être copiée, là c'est une erreur 1004 à tous les coups.
3/Toujours pas trouvé la syntaxe pour le décalage des deux colonnes à droite lors de la copie. J'ai tenté l'utilisation d'offset, mais bon, j'y arrive pas, je connais pas trop.
4/Qu'est-ce que c'est Rows("4:4")? Lapin compris...
tschaef
Messages postés3Date d'inscriptiondimanche 16 janvier 2011StatutMembreDernière intervention 5 juin 2011 5 juin 2011 à 18:11
Rebonjour,
J'ai réussi à adapter le code pour la copie et l'insertion.
Voila ce que ça donne (toujours après la MsgBox):
Sheets("Nouvelle Source").Range("A" & i & ":O" & i).Copy
Sheets("SourceCopieBO").Range("C" & i & ":Q" & i).Select
Selection.Insert Shift:=xlDown
Là, tout fonctionne et est au bon endroit, SAUF QUE:
les deux premières colonnes de ma seconde feuille ne se décale pas vers le bas quand l'insertion se fait. Normal, me direz-vous, il n'y a pas d'instruction concernant ces 2 premières colonnes...
Quelqu'un peut m'aider pour que j'y arrive enfin?
Merci par avance
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 5 juin 2011 à 23:25
Dans ta question initiale, fallait décaler à droite.
Maintenant c'est vers le bas.
On y perd son latin.
"les deux premières colonnes de ma seconde feuille ne se décale pas"
En effet, tu commences le décalage en colonne C
Si tu veux aussi décaler les deux colonnes, il faut ... lui dire
Essaye d'être plus précis, car je ne vois pas trop ce que tu veux faire. Tu veux décaler partiellement, mais tu te plains que tout ne soit pas décalé : je n'y comprends rien.