Microsoft 365 Macro avec IsError Application.VLookup....qui ne fait que de me contrarier.

  • Initiateur de la discussion Initiateur de la discussion CHLOE90
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

CHLOE90

XLDnaute Junior
Bonsoir le forum,

Je cale depuis un moment sur quelques lignes de code plus bas.
En fait, tout mes fonds de cellules sont passés en jaune (ColorIndex = 6), alors que je sais pour l'avoir vérifié que certains devraient être sur fond rouge (ColorIndex = 3). En d'autre termes la fonction de RechercheV ne retourne que des"IsError" alors que dans la plage nommée "Actions_Old", certaines valeurs recherchées sont bien renseignées.

Si le bout de code est insuffisant à votre analyse, j'y ajouterai un classeur.

Worksheets("Le fichier de Chloé Old").Select
Range("C3", [C65000].End(xlUp)).Select
ActiveWorkbook.Names.Add Name:="Actions_Old", RefersToR1C1:=Selection

Worksheets("Tampon").Select
Set plage3 = Range("B3", [B65000].End(xlUp))
Dim ValCellule As Range
For Each ValCellule In plage3
If IsError(Application.VLookup(ValCellule, Actions_Old, 1, False)) Then
ValCellule.Interior.ColorIndex = 6
Else
ValCellule.Interior.ColorIndex = 3
End If
Next ValCellule

ActiveWorkbook.Names("Actions_Old").Delete

Merci pour votre perspicacité.
Chloé
 
Bonsoir,

J'aurais tendance à dire, normal 😉

soit vous mettez des crochets pour indiquer une plage à VBA
VB:
If IsError(Application.VLookup(ValCellule, [Actions_Old], 1, False)) Then

Soit vous utiliser l'instruction Range()
Code:
If IsError(Application.VLookup(ValCellule, Range("Actions_Old"), 1, False)) Then

Mais sans fichier, pas certain que ce soit ça

@+
 
Bonjour Chloé, Bruno,

titre du sujet : « Macro avec IsError Application.VLookup....qui ne fait que de me contrarier. »

oui, je suis bien d'accord avec toi : certaines instructions VBA sont particulièrement contrariantes, en particulier la combinaison IsError / VLookup ; du coup, elle réagit comme une femme qui est contrariée par son mari et qui prétend alors qu'elle a la migraine ; solution : un aspro effervescent ? 😁 😄 😇​

Image.jpg




tu as écrit : « En fait, tous mes fonds de cellules sont passés en jaune (ColorIndex = 6), alors que je sais pour l'avoir vérifié que certains devraient être sur fond rouge (ColorIndex = 3). En d'autre termes la fonction de RechercheV ... »

a) j'ai bien l'impression qu'il y a une MFC là-dessous ; MFC = Mise en Forme Conditionnelle ; c'est sur l'onglet Accueil, groupe Style ; b) la fonction RechercheV() recherche des valeurs indépendamment des couleurs (de fond ou de texte), donc je vois mal le rapport entre VLookup et les couleurs ; serait-ce que tu as une version spéciale de VLookup qui te joue des tours à la manière d'un caméléon ? comment ? tu veux un autre cachet d'aspirine ?​

soan
 
Dernière édition:
Merci pour vos réponses :
Bruno, c’était bien la plage qui était en cause avec des [ ] ça va tout de suite mieux.
Soan, non il n’y avait pas de MFC, merci tout de même de t’être penché sur mon sujet. Pour l’aspirine....non bien vrai 😀

bonne journée le forum
Chloé
 
bonjour à tous
ce qu'il y a de bien avec application c'est qu'elle contient sa propre gestion d'erreur en amont
alors bien que je ne comprends pas le besoins de créer un name mais soit
il n'y a quand même nulle besoins de faire des select
apprendre aussi a variabiliser les object que l'on utilise
donc avec un name
VB:
Sub test()
Dim sh As Worksheet, sh2 As Worksheet, cellule As Range
Set sh = Worksheets("Le fichier de Chloé Old")
Set sh2 = Worksheets("Tampon")

ActiveWorkbook.Names.Add Name:="Actions_Old", RefersToR1C1:=sh.Range("C3", [C65000].End(xlUp))

Set plage3 = sh2.Range("B3", [B65000].End(xlUp))

For Each cellule In plage3.Cells
    With Application
        cellule.Interior.ColorIndex = .IfError(.VLookup(cellule.Value, [Actions_Old], 1, False), 6, 3)
    End With
Next ValCellule

ActiveWorkbook.Names("Actions_Old").Delete

End Sub

et sans Name en variabilisant les plages
Code:
Sub test2()
Dim plage1 As Range, plage2  As Range, cellule As Range ' variables

Set plage1 = Worksheets("Le fichier de Chloé Old").Range("C3", [C65000].End(xlUp)) 'plage1
Set plage2 = Worksheets("Tampon").Range("B3", [B65000].End(xlUp)) 'plage2


For Each cellule In plage2.Cells
    With Application
        cellule.Interior.ColorIndex = .IfError(.VLookup(cellule.Value, plage1, 1, False), 6, 3)
    End With
Next ValCellule

'plage2.Parent.Activate 'facultatif

End Sub
😉
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour