[VBA]Comparaison de lignes et de valeurs

Signaler
Messages postés
9
Date d'inscription
mercredi 23 mars 2011
Statut
Membre
Dernière intervention
25 avril 2012
-
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
-
Bonjour à tous !
J'ai besoin d'aide pour la réalisation d'un code VBA.
Je débute et le sujet est assez difficile.
Dans un fichier Excel, je dispose de deux onglets dans lesquels il y a des réferences accompagné d'un statut.
Je dois réalisé un code qui compare les références :
- si la référence existe dans les 2 onglets alors il faut comparer le statut, si c'est le même on continue sinon on remplace par le nouveau statut et on colorie la case
- si la référence n'existe pas alors on dois ajouter la ligne dans le 1er onglet

Merci de votre aide !

10 réponses

Messages postés
31607
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
7 mars 2021
344
Bonjour,
Sans avoir le fichier à disposition... je ne peux que te donner quelques idées..

Tu veux parcourir ton premier Onglet, et pour chaque référence regarder si elle existe dans le deuxième onglet.
Puis, si la référence existe dans les deux, comparer les status... etc..


Donc en gros :
1 - Faire une boucle sur la plage de cellules de ton premier Onglet contenant tes références.

Sub CompRef()

' Déclaration de la plage à traiter
Dim Maplage As Range
Set Maplage = Range("A1:A50")

'boucle sur la plage à parcourir
For Each cell In Maplage
    'contenu de la cellule
    Valeur_cellule = cell.Value
    
    ' .. ici.. la suite du code
    '.. par exemple : Utilisation d'un FIND
    ' pour chercher dans l'autre feuille
    ' si la référence existe
    ' ...
    

Next

End Sub




2 - Faire une recherche dans l'autre onglet si la référence existe
-> Regardes du côté de " Find "

Pour le reste.. je te laisse chercher un peu.


Cordialement,
Jordane,
______________________________________________________
Règles du forum à lire avant de poster une question : ICI
Messages postés
272
Date d'inscription
lundi 12 janvier 2009
Statut
Membre
Dernière intervention
30 décembre 2015
1
donc si j'ai bien compris il y a plus de référence dans le 2nd onglet c cela?

je pense que tu devrai faire une boucle for sur les lignes existante sur la l'onglet 2

puis te servir de la fonction find sur l'onglet 1

dit moi si tu veut un exemple de code
Messages postés
272
Date d'inscription
lundi 12 janvier 2009
Statut
Membre
Dernière intervention
30 décembre 2015
1
ah jordane45 a été plus rapide et plus concit que moi
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Bonjour,
J'attends quant à moi :
1) qu'un admin veuille bien déplacer cette discussion vers VBA
2) que les tenants et aboutissants soient exposés plus clairement, notamment en ce qui concerne cette partie :
Dans un fichier Excel, je dispose de deux onglets dans lesquels il y a des réferences accompagné d'un statut.

non suffisamment précise et qui n'a un semblant de logique que si aucun doublon à la source.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
C'est d'ailleurs assezz fou de constater à quel point la présente demande ressemble à celle-ci :
Tapez le texte de l'url ici.
où le demandeur dit avoir résolu son problème, mais sans montrer comment (esprit de forum !!!)
Invite-le donc à montrer son code


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
9
Date d'inscription
mercredi 23 mars 2011
Statut
Membre
Dernière intervention
25 avril 2012

J'ai enfin réussi à terminer mon code. Merci pour vos réponses.
Si une personne à le même problème je serais ravi de l'aider.
Messages postés
31607
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
7 mars 2021
344
Et donc ?
Avant qu'ucfoutu ne s'agace de ne pas lire ta solution ..

Comment as tu fais ?

As tu utilisé un de nos conseils ?

Et si tu as résolu ton souci... penses à mettre également ce sujet en résolu.

Bonne continuation

Cordialement,
Jordane,
______________________________________________________
Règles du forum à lire avant de poster une question : ICI
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Avant qu'ucfoutu ne s'agace de ne pas lire ta solution

Et c'est ce que je fais sans attendre
Il est invraisemblable de confondre forum et moyen "personnel" d'aboutir (et "après moi le déluge ..."). Bel esprit de forum, tiens !


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Une chose est certaine === >>
Si Keviin91 nous montre son code : il bénéficiera d'un autre code (le mien) probablement bien plus rapide.
S'il ne le fait pas : je mettrai ce code ici (pour les autres, dans le futur), mais pas avant trois jours .
A lui de voir, donc.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Les trois jours étant écoulés, voilà ===>>
Mais pour tous les autres qui passeraient par là, pas pour Keviin91, hein !
Solution simple :
Private Sub CommandButton1_Click()
 Application.ScreenUpdating = False
 Dim ma_col As New Collection
 Dim r As Range
 With Sheets("Feuil1")
   derlig = .Range("A" & Rows.Count).End(xlUp).Row
   For Each r In .Range("A1:A" & .Range("A" & Rows.Count).End(xlUp).Row)
     On Error Resume Next
     ma_col.Add r.Offset(0, 1).Value, r.Value
     On Error GoTo 0
   Next
 End With
 With Sheets("Feuil2")
    For Each r In .Range("A1:A" & .Range("A" & Rows.Count).End(xlUp).Row)
     On Error Resume Next
     If r.Offset(0, 1).Value <> ma_col(r.Value) Then
        r.Offset(0, 1).Value = ma_col(r.Value)
        Err = 1
     End If
     If Err > 0 Then
       r.Offset(0, 1).Interior.Color = vbRed
     Else
       r.Offset(0, 1).Interior.Color = xlNone
     End If
     On Error GoTo 0
    Next
 End With
 Set ma_col = Nothing
 Application.ScreenUpdating = False
 Sheets("Feuil2").Activate ' juste pour voir le résultat
End Sub


Nota :
1) j'ai utilisé ici une collection, ce qui force à une gestion d'erreur.
Cette gestion n'est plus nécessaire en utilisant un objet Dictionnary (mais je n'ai pas voulu compliquer).
2) la solution ci-dessus est très rapide. Elle le serait encore plus en travaillant via deux tableaux dynamiques plutôt qu'en parcourant les cellules. Mais, là encore, je n'ai pas voulu "perdre" les plus débutants.




________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ