Macro excel vlookup

Résolu
Bonjour,
Dans un fichier excel (2007) avec 2 worksheet
- le premier worksheet ("All) j'ai une liste de noms worldwide trié par ordre alphabetique dans une seule colonne
- le deuxième worksheet ("France") j'ai une liste de noms trié par ordre alphabetique dans une seule colonne
ce que je souhaite c'est que chaque fois qu'un nom worldwide est aussi en France je colorie la cellule.
Pour cela j'ai développé la macro suivante, mais cela ne fct pas. Tout aide me serait précieuse. merci beaucoup d'avance

Sub trouver()
Dim cellule As Range
For Each cellule In Sheets("All").Range("A1:A497")
If IsError(Application.VLookup(cellule, Sheets("France").Range("A1:A889"), 1, False)) Then
Rows(cellule.Row).Interior.ColorIndex = -4142
Else
Rows(cellule.Row).Interior.ColorIndex = 6
End If
Next
End Sub

7 réponses

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    Bonjour,

    Essaies en remplacant
    IsError(Application.VLookup(cellule, Sheets("France").Range("A1:A889"), 1, False))

    par
    application.countif(Sheets("France").Range("A1:A889"),cellule.value)=0

    .value à cellule par prudence (à tester)
    1. Contributeur
      Ok, mais quelle est l'erreur? as tu un message d'erreur,si oui lequel et sur quelle ligne?
      As tu aucun effet ?

      essaies en pas à pas (dans VBE, F8) installes des espions (débogage)...
      tu dis, car en lisant ta macro, ca devrait marcher (comme tu t'en ai rendu compte :-)...)
      1. Bonjour Michel, Non je n'ai pas d'erreur, au contraire j'ai toutes les lignes du worksheet ALL qui se colorie en jaune au lieu d'avoir que les lignes dont le contenu des cellules de la premiere colonne est commune avec le worksheet France.
        J'ai réduit la macro à :
        --------------
        Sub trouver()
        Dim cellule As Range
        For Each cellule In Sheets("All").Range("A1:A497")
        If IsError(Application.VLookup(cellule, Sheets("France").Range("A1:A889"), 1, False)) Then
        Rows(cellule.Row).Interior.ColorIndex = 6
        End If
        Next
        End Sub
        ------------
        Cdlt,
        beckie
        1. Encore merci pour votre aide. j'ai trouvé pour quoi cela ne fct pas, il y avait des caratères blanc après chque nom dans une des deux collonnes.
          merci encore de votre aide
          Cordialement,
          Bonne journée.
          beckie
          1. Contributeur
            Bonjour,

            Regarde si cette macro te convient
            Option Explicit
            
            Sub reperer_francais()
            Dim Lig_fr As Long, Cptr As Long, Ref As String
            Dim Dico As Object
            Dim Lig_all As Long
            Set Dico = CreateObject("scripting.dictionary")
            
            With Sheets("france")
                Lig_fr = .Cells(.Cells.Rows.Count, 1).End(xlUp).Row
                For Cptr = 1 To Lig_fr
                    Ref = .Cells(Cptr, 1)
                    Dico.Add Ref, Ref
                Next
            End With
            
            Application.ScreenUpdating = False
            With Sheets("all")
                Lig_all = .Cells(.Cells.Rows.Count, 1).End(xlUp).Row
                For Cptr = 1 To Lig_all
                    Ref = .Cells(Cptr, 1)
                    If Dico.exists(Ref) Then .Rows(Cptr).Interior.ColorIndex = 6
                Next
            End With
            End Sub


            ci joint maquette
            http://www.cijoint.fr/cjlink.php?file=cj201101/cijrlqK0Ks.xls
            1. Bonjour Michel,
              Désolé pour le retard

              Merci beaucoup pour cette macro qui fct trés bien!!
              Bien cordialement,
              beckie