Macro excel vlookup

Résolu
beckie -  
 beckie -
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

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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)
    0
  2. beckie
     
    Merci michel, mais cela n'a rien changer :(
    0
  3. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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 :-)...)
    0
  4. beckie
     
    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
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. beckie
     
    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
    0
  7. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
    0
  8. beckie
     
    Bonjour Michel,
    Désolé pour le retard

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