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

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é
 
C

Compte Supprimé 979

Guest
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

@+
 

soan

XLDnaute Barbatruc
Inactif
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:

CHLOE90

XLDnaute Junior
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é
 

patricktoulon

XLDnaute Barbatruc
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
;)
 

Statistiques des forums

Discussions
315 127
Messages
2 116 497
Membres
112 765
dernier inscrit
SIDIANW