Mise a jour valeurs identiques

bonjour,

je suis en train de comparer 2 colonnes dans 2 feuilles différentes et copier le résultat dans une 3e feuille si valeurs identiques.

jusque là , pas de problème. en revanche, une fois ces valeurs identiques copiées, je n'arrive pas à les mettre à jour ligne par ligne

dans ce fichier 3. ma macro ne met à jour que la 1ere ligne...

comment je peux faire pour mettre à jour les valeurs présentes dans la feuil3 à chaque fois qu'une valeur identique est présente dans la feuil 1 ?

Merci

voici ma macro

Sub CompareBD() ' FILM

col_ref = "A"

col_ref2 = "B"

Set f1 = Sheets("Feuil1") 'saisie formulaire par l'utilisateur

Set f2 = Sheets("Base").Range("A1:A5") ' base produits

Set f3 = Sheets("LastOrder") 'resultats comparaison

ligne = 2 ' commence ici , sous les intitulés de chaque colonne

largeurBD = 4

'---communs

For i = 2 To f1.Range(col_ref2 & "65000").End(xlUp).Row

temp = f1.Cells(i, col_ref2)

p = Application.Match(temp, f2.Range(col_ref & ":" & col_ref), 0)

If Not IsError(p) Then

f1.Cells(i, 2).Resize(, 4).Copy f3.Cells(ligne, 1)

ligne = ligne + 1

End If

Next i

End Sub

Bonsoir,

Et un petit fichier, un...

Cdlt

Voici ,

Merci par avance pour votre aide

19classeur1.zip (18.68 Ko)

Bonsoir,

Sub test()
Dim Rg, Cel As Range, Sh1, Sh2, Sh3 As Worksheet, lRow%, Flag As Boolean
Set Sh1 = Sheets("Feuil1"): Set Sh2 = Sheets("Base"): Set Sh3 = Sheets("LastOrder")
  lRow = Sh3.Range("A" & Rows.Count).End(xlUp).Row + 1
  Application.ScreenUpdating = 0
  For Each Cel In Sh1.Range("A2:A" & Sh1.Range("A1").End(xlDown).Row)
    Set Rg = Sh3.[aLast].Find(Cel.Value)
    If Not Rg Is Nothing Then Flag = True
    Set Rg = Sh2.[aBase].Find(Cel.Value)
    If Not Rg Is Nothing And Flag = False Then
      Sh3.Range("A" & lRow).Resize(1, 3) = Cel.Resize(1, 3).Value
      lRow = lRow + 1
    End If
    Set Rg = Nothing: Flag = False
  Next Cel
Set Sh1 = Nothing: Set Sh2 = Nothing: Set Sh3 = Nothing
End Sub

Pas lu le post en entier donc pas vu non plus qu'il fallait juste ajuster le code...

Cdt,

Darzou

Merci Beaucou Darzou,

cependant, une fois les valeurs copiés dans la 3e feuille, ligne après ligne, on ne peut plus les mettre à jour et c'est précisemment ce je voudrais. il faut que quand l'une de ces valeurs est présente une nouvelle fois dans la feuille 1 , avec une quantité et un conditionnement différent parfois, elle soit mise jour dans la feuille 3. vous auriez une idée pour cela ?

NB : quand la feuille 1 est vide et je lance la macro, cela plante et suis obligé de faire crtl+pause : le message de débogage indique alors la ligne " If Not Rg Is Nothing Then Flag = True"

Option Explicit

Sub test()
Dim Rg, Cel As Range, Sh1, Sh2, Sh3 As Worksheet, lRow%, Flag As Boolean
Set Sh1 = Sheets("Feuil1"): Set Sh2 = Sheets("Base"): Set Sh3 = Sheets("LastOrder")
  lRow = Sh3.Range("A" & Rows.Count).End(xlUp).Row + 1
  Application.ScreenUpdating = 0
  For Each Cel In Sh1.[aSh1]
    Set Rg = Sh3.[aLast].Find(Cel.Value)
    If Not Rg Is Nothing Then
      Rg.Resize(1, 3) = Cel.Resize(1, 3).Value: Flag = 1
    End If
    Set Rg = Sh2.[aBase].Find(Cel.Value)
    If Not Rg Is Nothing And Flag = 0 Then
      Sh3.Range("A" & lRow).Resize(1, 3) = Cel.Resize(1, 3).Value: lRow = lRow + 1
    End If
    Set Rg = Nothing: Flag = 0
  Next Cel
Set Sh1 = Nothing: Set Sh2 = Nothing: Set Sh3 = Nothing
End Sub

Prendre le fichier joint, j'y ai modifié une cellule nommée.

En cas de doublon en Column A, le dernier sera reporté en Sheet 3

Cdt,

Darzou

Bravo Darzou !! j'ai adapté la cellule nommée pour chaque article dans la base et j'obtiens exactement ce que je veux. Merci mille fois d'avoir pris la peine d'étudier cela. Une excellente soirée à vous !

Re bonjour Darzou,

je souhaite rajouter de nouvelles données et je bloque sur le code, tout ce que j'ai essayé n'est pas concluant :

comment updater la nouvelle rangée "Palettes" qui se trouve à côté de la plage " Films" ?

je joins le fichier, j'ai ajouté un 2e bouton test pour une nouvelle macro test2'() , votre aide serait vraiment appréciée,

merci par avance

Pas compris...

Le code commenté pourra peut être vous aider:

Option Explicit

Sub test()
Dim Rg, Cel As Range, Sh1, Sh2, Sh3 As Worksheet, lRow%, Flag As Boolean
Set Sh1 = Sheets("Feuil1"): Set Sh2 = Sheets("Base"): Set Sh3 = Sheets("LastOrder")
  lRow = Sh3.Range("A" & Rows.Count).End(xlUp).Row + 1 'Première ligne vide ds Sh LastOrder
  Application.ScreenUpdating = 0
  For Each Cel In Sh1.[aSh1] 'Pour chaque cellule des données saisies en Feuil1
    Set Rg = Sh3.[aLast].Find(Cel.Value)
    If Not Rg Is Nothing Then 'On check si la référence est déjà dans la Sh LastOrder
      Rg.Resize(1, 3) = Cel.Resize(1, 3).Value: Flag = True 'si oui on y remplace les données
    End If
    Set Rg = Sh2.[aBase].Find(Cel.Value) 'On check maintenant si la référence est présente ds la Sh Base
    If Not Rg Is Nothing And Flag = False Then 
      Sh3.Range("A" & lRow).Resize(1, 3) = Cel.Resize(1, 3).Value: lRow = lRow + 1 'si oui on l'inscrit en Sh LastOrder
    End If
    Set Rg = Nothing: Flag = False
  Next Cel
Set Sh1 = Nothing: Set Sh2 = Nothing: Set Sh3 = Nothing
End Sub

Si ça ne suffit pas il va falloir reformuler la question avec une phrase de la forme "J'ai ça, je souhaite ça ici de telle manière lorsque je fais ça.".

Cdt,

Darzou

En fait, je souhaite juste DECALER la recherche dans Feuille "Base" : ne plus parcourir la colonne A de la base, mais la colone D.

J'ai essayé avec Set Rg = Sh2.Cells(1, 4)(5, 4).Find(Cel.Value) ' recheche dans la colonne D1:D4 mais pas de résultat

Onglet formules/gestionnaire des noms:

Pour aBase, changer

=DECALER(Base!$A$1;1;;NBVAL(Base!$A:$A)-1;)

en

=DECALER(Base!$D$1;1;;NBVAL(Base!$D:$D)-1;)

Cdt,

Darzou

excellent, en fait je ne savais pas à quoi faisait référence Sh2.[aBase], il fallait regarder dans l'onglet Formules - du coup, j'ai créé autant de nouvelles références que je voulais et ça fonctionne parfaitement .

Merci beaucoup pour votre éclairage.

vous savez si ce type de référence "[aBase]" fonctionne avec la version Excel 2003 ? et le cas échéant, par quoi il faudrait passer pour obtenir le même résultat ?

cdlt

Rechercher des sujets similaires à "mise jour valeurs identiques"