Bonjour,
Je suis débutante en VBA et ça fait une semaine que je cherche une solution à mon problème mais je trouves pas.
J'ai un classeur excel contenant deux feuilles (Base) et (Base 2). Je veux à chaque fois qu'une valeur d'une cellule de la colonne G de la feuille Base soit différente à la valeur d'une cellule de la colonne G de la feuille Base 2 on copie et on colle la ligne entière de la feuille Base vers Base 2 juste au-dessous de la ligne ancienne.
Par exemple:
dans la feuille Base si la cellule G2 change de 6461156 vers 10000
FR0000045072
09/11/2021
13.164
13.268
13.046
13.10
6461156
FR0000120073
09/11/2021
150.40
151.72
150.14
150.90
556272
NL0000235190
09/11/2021
115.24
117.18
114.84
116.32
1403630
FR0010220475
09/11/2021
31.63
31.99
31.03
31.90
1735235
dans la feuille Base 2 on trouve (comme une sorte de garder la ligne ancienne et la nouvelle)
Bonjour Nae, et bienvenu sur XLD,
En PJ j'ai supposé que les modifs en colonne G de base sont faites à la main.
C'est donc automatique quand on modifie une valeur de cette colonne, avec :
VB:
Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("A2:G10000")) Is Nothing Then
Application.ScreenUpdating = False
LigneBase2 = 1 + Application.Match(Cells(Target.Row, "A"), Sheets("Base 2").[A:A], 0)
If Cells(Target.Row, "G") <> Sheets("Base 2").Cells(LigneBase2, "G") Then
Sheets("Base 2").Rows(LigneBase2).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Range("A" & Target.Row & ":G" & Target.Row).Copy _...
Bonjour Nae, et bienvenu sur XLD,
En PJ j'ai supposé que les modifs en colonne G de base sont faites à la main.
C'est donc automatique quand on modifie une valeur de cette colonne, avec :
VB:
Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("A2:G10000")) Is Nothing Then
Application.ScreenUpdating = False
LigneBase2 = 1 + Application.Match(Cells(Target.Row, "A"), Sheets("Base 2").[A:A], 0)
If Cells(Target.Row, "G") <> Sheets("Base 2").Cells(LigneBase2, "G") Then
Sheets("Base 2").Rows(LigneBase2).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Range("A" & Target.Row & ":G" & Target.Row).Copy _
Destination:=Sheets("Base 2").Range("A" & LigneBase2 & ":G" & LigneBase2)
End If
End If
Application.ScreenUpdating = True
End Sub
Si Base est une feuille importée alors la macro doit être différente. Dans ce cas précisez le.
Bonjour Nae, et bienvenu sur XLD,
En PJ j'ai supposé que les modifs en colonne G de base sont faites à la main.
C'est donc automatique quand on modifie une valeur de cette colonne, avec :
VB:
Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("A2:G10000")) Is Nothing Then
Application.ScreenUpdating = False
LigneBase2 = 1 + Application.Match(Cells(Target.Row, "A"), Sheets("Base 2").[A:A], 0)
If Cells(Target.Row, "G") <> Sheets("Base 2").Cells(LigneBase2, "G") Then
Sheets("Base 2").Rows(LigneBase2).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Range("A" & Target.Row & ":G" & Target.Row).Copy _
Destination:=Sheets("Base 2").Range("A" & LigneBase2 & ":G" & LigneBase2)
End If
End If
Application.ScreenUpdating = True
End Sub
Si Base est une feuille importée alors la macro doit être différente. Dans ce cas précisez le.
Bonjour,
Merci pour le temps accordé à ce problème, j'apprécie votre disponibilité.
Feuille Base n'est pas importée et le code fonction bien sauf que la macro elle copie la ligne modifiée et la colle juste au-dessous sans insérer une nouvelle ligne. C'est de ma faute j'ai oublié de préciser que je veux que la ligne copiée se colle dans une nouvelle ligne insérée juste après la ligne modifiée.
Merci beaucoup
Euh, Si. Je ne comprends pas.
En Base2 j'ai :
Si dans Base je modifie G2 avec 123456, j'obtiens en Base2 :
Donc cette ligne a bien été insérée après la ligne, ici en ligne 3.
Ce n'est pas cela ?
Dans ce cas, que devrions nous avoir ?
Euh, Si. Je ne comprends pas.
En Base2 j'ai : Regarde la pièce jointe 1121032
Si dans Base je modifie G2 avec 123456, j'obtiens en Base2 : Regarde la pièce jointe 1121035
Donc cette ligne a bien été insérée après la ligne, ici en ligne 3.
Ce n'est pas cela ?
Dans ce cas, que devrions nous avoir ?
Je m'excuse j'ai pas fait attention !! ça marche parfaitement
Cependant j'ai une autre question svp
Je sais pas si c'est possible de comparer les deux bases et détecter toute sorte de changements effectués ou bien c'est compliqué !!!
C'est plutôt vague.
En PJ un essai.
Dans Base2, chaque valeur différente de la précédente est en bleu.
On peut faire plein de choses ... dès l'instant où les spécifications sont claires.