[VBA]Comparaison de lignes et de valeurs

Keviin91 Messages postés 9 Date d'inscription mercredi 23 mars 2011 Statut Membre Dernière intervention 25 avril 2012 - 24 avril 2012 à 10:22
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 28 avril 2012 à 18:24
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

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
24 avril 2012 à 10:50
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
0
Genildf Messages postés 270 Date d'inscription lundi 12 janvier 2009 Statut Membre Dernière intervention 30 décembre 2015 1
24 avril 2012 à 10:52
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
0
Genildf Messages postés 270 Date d'inscription lundi 12 janvier 2009 Statut Membre Dernière intervention 30 décembre 2015 1
24 avril 2012 à 10:53
ah jordane45 a été plus rapide et plus concit que moi
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
24 avril 2012 à 10:54
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
24 avril 2012 à 11:01
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
0
Keviin91 Messages postés 9 Date d'inscription mercredi 23 mars 2011 Statut Membre Dernière intervention 25 avril 2012
25 avril 2012 à 16:47
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.
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
25 avril 2012 à 18:01
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
25 avril 2012 à 18:26
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
25 avril 2012 à 19:17
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
28 avril 2012 à 18:24
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
0
Rejoignez-nous