XL 2016 Boucle pour copier-coller une ligne automatiquement vers une autre feuille si la valeur d'une cellule change

nae104

XLDnaute Nouveau
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.16413.26813.04613.10
6461156
FR0000120073
09/11/2021​
150.40151.72150.14150.90
556272​
NL0000235190
09/11/2021​
115.24117.18114.84116.32
1403630​
FR0010220475
09/11/2021​
31.6331.9931.0331.90
1735235​

dans la feuille Base 2 on trouve (comme une sorte de garder la ligne ancienne et la nouvelle)
FR0000045072
09/11/2021​
13.16413.26813.04613.10
6461156
FR0000045072
09/11/2021​
13.16413.26813.04613.10
10000
FR0000120073
09/11/2021​
150.40151.72150.14150.90
556272​
NL0000235190
09/11/2021​
115.24117.18114.84116.32
1403630​
FR0010220475
09/11/2021​
31.6331.9931.0331.90
1735235​
 

Pièces jointes

  • FOrum1.xlsx
    15.2 KB · Affichages: 5
Solution
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 _...

sylvanu

XLDnaute Barbatruc
Supporter XLD
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.
 

Pièces jointes

  • FOrum1.xlsm
    22.7 KB · Affichages: 7

nae104

XLDnaute Nouveau
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
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Euh, Si. Je ne comprends pas.
En Base2 j'ai :
1636551925150.png

Si dans Base je modifie G2 avec 123456, j'obtiens en Base2 :
1636552178904.png

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 ?
 

Pièces jointes

  • 1636551995868.png
    1636551995868.png
    11.3 KB · Affichages: 4

nae104

XLDnaute Nouveau
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é !!!
 

Discussions similaires

Statistiques des forums

Discussions
297 996
Messages
1 964 975
Membres
200 792
dernier inscrit
Jdoul