Bonjour, je cherche une macro pour mettre à jour automatiquement des données entre des fichiers Excel.
- Fichier 1 (qui est une consolidation des fichiers 2 et 3) contient la liste globale de clients : colonne A (Identifiant du client), colonne B (Nom du client), colonne C (Région), colonne D (Date), colonne E (Article), colonne F (Quantité).
- Fichier 2 contient la liste des clients de la région 1: colonne A (Identifiant du client), colonne B (Nom du client), colonne C (Région), colonne D (Date), colonne E (Article), colonne F (Quantité).
- Fichier 2 contient la liste des clients de la région 2: colonne A (Identifiant du client), colonne B (Nom du client), colonne C (Région), colonne D (Date), colonne E (Article), colonne F (Quantité).
Un même client peut acheter plusieurs articles différents. Et donc avoir plusieurs lignes dans une feuille.
L'idée est que lorsque je mets à jour le Fichier 1 et si l'identifiant du client (d'une région donnée) n'existait pas dans la Feuille 2 ou 3, alors la macro rajoute une ligne dans la feuille de la région concernée (Feuille 2 ou 3), dans le cas contraire, que la ligne se mette à jour en fonction des nouvelles données qui seront renseignées dans la feuille principale.
Et donc mon problème est qu'avec ma macro, c'est que lorsque je mets à jour le Fichier 1 pour un ancien client qui achète un nouvel article (donc rajout d'une nouvelle ligne) ou que je modifie la quantité d'un article d'un client, la macro ne rajoute pas de nouvelle ligne mais modifie l'ancienne donnée qui est dans la Feuille 2 ou 3.
- DONNEE FEUILLE 1
IDENTIFIANT NOM REGION DATE ARTICLE QUANTITE
P0054 BERTRAND FRANCOIS REGION 1 10/10/2022 COFFRET CADEAUX 1
P0055 DUPOND JEAN REGION 2 10/10/2022 COFFRET CADEAUX 1
P0055 DUPOND JEAN REGION 2 10/10/2022 PARFUM 1
P0056 VALLIN URBAIN REGION 2 27/10/2022 BOX 1
P0057 MICHOT LISA REGION 1 05/11/2022 PARFUM 1
P0058 VERNET JEAN REGION 2 05/11/2022 BOITE SURPRISE 1
P0059 LAMBREY HENRY REGION 1 05/11/2022 COFFRET CADEAUX 1
P0059 LAMBREY HENRY REGION 1 24/12/2022 BOITE SURPRISE 1
P0060 LAMBERT XAVIER REGION 2 25/11/2022 PARFUM 1
_ CODE VBA
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim REGION1 As Worksheet
Dim REGION2 As Worksheet
If Sh.Name = "Feuil1" And Sh.Range("A" & Target.Row) <> "" And Sh.Range("C" & Target.Row) = "REGION 1" Then
Set REGION1 = ThisWorkbook.Worksheets("Feuil2")
With REGION1
Set ID = .Columns("A").Find(Sh.Range("A" & Target.Row).Value, LookIn:=xlValues, lookat:=xlWhole)
If ID Is Nothing Then
Lastlig = .Cells(999999, 1).End(xlUp).Row
Sh.Range("A" & Target.Row & ":F" & Target.Row).Copy .Range("A" & Lastlig + 1)
Else
Sh.Range("A" & Target.Row & ":F" & Target.Row).Copy ID
End If
End With
End If
If Sh.Name = "Feuil1" And Sh.Range("A" & Target.Row) <> "" And Sh.Range("C" & Target.Row) = "REGION 2" Then
Set REGION2 = ThisWorkbook.Worksheets("Feuil3")
With REGION2
Set ID = .Columns("A").Find(Sh.Range("A" & Target.Row).Value, LookIn:=xlValues, lookat:=xlWhole)
If ID Is Nothing Then
Lastlig = .Cells(999999, 1).End(xlUp).Row
Sh.Range("A" & Target.Row & ":F" & Target.Row).Copy .Range("A" & Lastlig + 1)
Else
Sh.Range("A" & Target.Row & ":F" & Target.Row).Copy ID
End If
End With
End If
End Sub
Je vous remercie d'avance.
- Fichier 1 (qui est une consolidation des fichiers 2 et 3) contient la liste globale de clients : colonne A (Identifiant du client), colonne B (Nom du client), colonne C (Région), colonne D (Date), colonne E (Article), colonne F (Quantité).
- Fichier 2 contient la liste des clients de la région 1: colonne A (Identifiant du client), colonne B (Nom du client), colonne C (Région), colonne D (Date), colonne E (Article), colonne F (Quantité).
- Fichier 2 contient la liste des clients de la région 2: colonne A (Identifiant du client), colonne B (Nom du client), colonne C (Région), colonne D (Date), colonne E (Article), colonne F (Quantité).
Un même client peut acheter plusieurs articles différents. Et donc avoir plusieurs lignes dans une feuille.
L'idée est que lorsque je mets à jour le Fichier 1 et si l'identifiant du client (d'une région donnée) n'existait pas dans la Feuille 2 ou 3, alors la macro rajoute une ligne dans la feuille de la région concernée (Feuille 2 ou 3), dans le cas contraire, que la ligne se mette à jour en fonction des nouvelles données qui seront renseignées dans la feuille principale.
Et donc mon problème est qu'avec ma macro, c'est que lorsque je mets à jour le Fichier 1 pour un ancien client qui achète un nouvel article (donc rajout d'une nouvelle ligne) ou que je modifie la quantité d'un article d'un client, la macro ne rajoute pas de nouvelle ligne mais modifie l'ancienne donnée qui est dans la Feuille 2 ou 3.
- DONNEE FEUILLE 1
IDENTIFIANT NOM REGION DATE ARTICLE QUANTITE
P0054 BERTRAND FRANCOIS REGION 1 10/10/2022 COFFRET CADEAUX 1
P0055 DUPOND JEAN REGION 2 10/10/2022 COFFRET CADEAUX 1
P0055 DUPOND JEAN REGION 2 10/10/2022 PARFUM 1
P0056 VALLIN URBAIN REGION 2 27/10/2022 BOX 1
P0057 MICHOT LISA REGION 1 05/11/2022 PARFUM 1
P0058 VERNET JEAN REGION 2 05/11/2022 BOITE SURPRISE 1
P0059 LAMBREY HENRY REGION 1 05/11/2022 COFFRET CADEAUX 1
P0059 LAMBREY HENRY REGION 1 24/12/2022 BOITE SURPRISE 1
P0060 LAMBERT XAVIER REGION 2 25/11/2022 PARFUM 1
_ CODE VBA
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim REGION1 As Worksheet
Dim REGION2 As Worksheet
If Sh.Name = "Feuil1" And Sh.Range("A" & Target.Row) <> "" And Sh.Range("C" & Target.Row) = "REGION 1" Then
Set REGION1 = ThisWorkbook.Worksheets("Feuil2")
With REGION1
Set ID = .Columns("A").Find(Sh.Range("A" & Target.Row).Value, LookIn:=xlValues, lookat:=xlWhole)
If ID Is Nothing Then
Lastlig = .Cells(999999, 1).End(xlUp).Row
Sh.Range("A" & Target.Row & ":F" & Target.Row).Copy .Range("A" & Lastlig + 1)
Else
Sh.Range("A" & Target.Row & ":F" & Target.Row).Copy ID
End If
End With
End If
If Sh.Name = "Feuil1" And Sh.Range("A" & Target.Row) <> "" And Sh.Range("C" & Target.Row) = "REGION 2" Then
Set REGION2 = ThisWorkbook.Worksheets("Feuil3")
With REGION2
Set ID = .Columns("A").Find(Sh.Range("A" & Target.Row).Value, LookIn:=xlValues, lookat:=xlWhole)
If ID Is Nothing Then
Lastlig = .Cells(999999, 1).End(xlUp).Row
Sh.Range("A" & Target.Row & ":F" & Target.Row).Copy .Range("A" & Lastlig + 1)
Else
Sh.Range("A" & Target.Row & ":F" & Target.Row).Copy ID
End If
End With
End If
End Sub
Je vous remercie d'avance.