Bonjour à tous,
je me casse les dents sur une problématique et je viens demander un peu d'aide (ou une autre façon d'aborder le problème...)
J'ai un fichier qui recense dans un onglet des données. (les clients de la société).
Ce fichier va être transmis à plusieurs personnes qui vont l'utiliser, le modifier et l'étoffer.
J'aimerais créer une macro permettant de faire la mise à jour de ces données.
En effet, il y aurait un tableau maître qui aurait toutes les données à jour.
Voilà comment j'imagine la chose :
Il existe 2 types de modifs : modif de ligne existante et création de ligne
Si pas de modif, les données restent telles qu'elles sont dans le tableau maitre
Si modif de ligne existante, la ligne est modifiée au même index dans le tableau maitre
Si création de ligne, implémentation de la nouvelle ligne
Et ce pour chaque tableaux "fils" récupérés...
J'ajoute que chacune de mes lignes commence par un numéro (numéro de client) qui s'incrémente de 1 à ....
Je passe par une étape intermédiaire qui m'affiche, dans un onglet dans le tableau maitre, les nouvelles lignes du tableau fils
Je copie les données du tableau fils dans un onglet appelé "Tableau_fils", je compare aux données du "tableau_maitre" et j'écris les nouvelles lignes dans "Nouvelles_lignes"
Je bute un peu plus sur le code pour les lignes avec le même numéro initial mais avec une modif dans une des colonnes ...
Ces 2 codes sont tirés de Doublons
Ce dernier code marche pour une modif mais dès que j'ai plus d'une ligne modifiées, il ne fonctionne pas.
Il est censé me renvoyer la ligne complète avec en surligné jaune les valeurs modifiées.
Cela permet à l'opérateur final de voir en un coup d'oeil les modifs et de les approuvées ou non.
J'envisage par la suite une autre macro qui va prendre toutes ces lignes (nouvelles et modifiées&validées) et les inscrire dans le tableau maitre.
Bien, j'en ai fini avec les explications (un peu laborieuses).
Je suis à l'écoute pour clarifier vos questions si besoins
Je vous remercie de votre aide
je me casse les dents sur une problématique et je viens demander un peu d'aide (ou une autre façon d'aborder le problème...)
J'ai un fichier qui recense dans un onglet des données. (les clients de la société).
Ce fichier va être transmis à plusieurs personnes qui vont l'utiliser, le modifier et l'étoffer.
J'aimerais créer une macro permettant de faire la mise à jour de ces données.
En effet, il y aurait un tableau maître qui aurait toutes les données à jour.
Voilà comment j'imagine la chose :
Il existe 2 types de modifs : modif de ligne existante et création de ligne
Si pas de modif, les données restent telles qu'elles sont dans le tableau maitre
Si modif de ligne existante, la ligne est modifiée au même index dans le tableau maitre
Si création de ligne, implémentation de la nouvelle ligne
Et ce pour chaque tableaux "fils" récupérés...
J'ajoute que chacune de mes lignes commence par un numéro (numéro de client) qui s'incrémente de 1 à ....
Je passe par une étape intermédiaire qui m'affiche, dans un onglet dans le tableau maitre, les nouvelles lignes du tableau fils
Code:
Application.ScreenUpdating = False
Set f1 = Sheets("Tableau_maitre")
Set f2 = Sheets("Tableau_fils")
a = f1.Range("A1").CurrentRegion.Value
b = f2.Range("A1").CurrentRegion.Value
Set mondico1 = CreateObject("Scripting.Dictionary")
For j = 2 To UBound(a)
mondico1(a(j, 1)) = ""
Next j
ligne = 1
Dim c
ReDim c(1 To Application.Max(UBound(a), UBound(b)), 1 To UBound(a, 2) + 1)
For j = 2 To UBound(b)
temp = ""
For K = 1 To UBound(b, 2): temp = temp & b(j, K): Next K
If Not mondico1.Exists(b(j, 1)) Then
For K = 1 To UBound(b, 2): c(ligne, K) = b(j, K): Next K
c(ligne, K) = j
ligne = ligne + 1
End If
Next
Sheets("Nouvelles_lignes").[a2].Resize(UBound(a, 1), UBound(a, 2) + 1) = c
Next
Je copie les données du tableau fils dans un onglet appelé "Tableau_fils", je compare aux données du "tableau_maitre" et j'écris les nouvelles lignes dans "Nouvelles_lignes"
Je bute un peu plus sur le code pour les lignes avec le même numéro initial mais avec une modif dans une des colonnes ...
Code:
Application.ScreenUpdating = False
Set f1 = Sheets("Tableau_maitre")
Set f2 = Sheets("Tableau_fils")
Set f3 = Sheets("Lignes_modif")
f3.[A2:O1000].ClearContents
f3.[A2:O1000].Interior.ColorIndex = xlNone
a = f1.Range("A1").CurrentRegion.Value
b = f2.Range("A1").CurrentRegion.Value
Set mondico2 = CreateObject("Scripting.Dictionary")
For i = 2 To UBound(a)
mondico2(a(i, 1)) = ""
Next i
ligne = 2
For i = 2 To UBound(b)
temp = ""
For K = 1 To UBound(b, 2): temp = temp & b(i, K): Next K
If mondico2.Exists(b(i, 1)) Then
Set temp = f1.Columns(1).Find(b(i, 1))
For K = 1 To UBound(b, 2)
f3.Cells(ligne, K) = b(i, K)
If b(i, K) <> temp.Offset(, K - 1) Then f3.Cells(ligne, K).Interior.ColorIndex = 6
Next K
f3.Cells(ligne, K) = i
ligne = ligne + 1
End If
Ces 2 codes sont tirés de Doublons
Ce dernier code marche pour une modif mais dès que j'ai plus d'une ligne modifiées, il ne fonctionne pas.
Il est censé me renvoyer la ligne complète avec en surligné jaune les valeurs modifiées.
Cela permet à l'opérateur final de voir en un coup d'oeil les modifs et de les approuvées ou non.
J'envisage par la suite une autre macro qui va prendre toutes ces lignes (nouvelles et modifiées&validées) et les inscrire dans le tableau maitre.
Bien, j'en ai fini avec les explications (un peu laborieuses).
Je suis à l'écoute pour clarifier vos questions si besoins
Je vous remercie de votre aide