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