Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

probléme avec FIND ? ou Pb de type de données ?

5 réponses
Avatar
Le Nordiste
Bonjour tertous,

=C0 l'aide du code ci-dessous je parcours une plage (colonne A:A) d'une
feuille 'Feuil1' nomm=E9e 'plageTravailId' =E0 la recherche des valeurs
( intIdCherche) qui y sont pr=E9sentes sans =E9tre pr=E9sentes dans la
colonne A:A d'une feuille 'Feuil2' nomm=E9e 'plageReferenceId'.
Si intIdCherche est trouv=E9 la ligne contenant intIdCherche est
marqu=E9e (italique police r=E9duite et ligne color=E9e en violet).

'=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D

For Each plageCellule In plageTravailId
'relev=E9 de la valeur de l'Id contenu dans la cellule
intIdCherche =3D plageCellule.Value
'RECHERCHE DE 'intIdCherche' DANS LA FEUILLE 'REFERENCE'
With plageReferenceId
Set C =3D .Find(What:=3DintIdCherche, after:=3DplageCellule,
LookIn:=3DxlValues, _
LookAt:=3DxlWhole, SearchOrder:=3DxlByColumns,
SearchDirection:=3DxlNext)
If C Is Nothing Then
'LA VALEUR 'intIdCherche' N'EST PAS PR=C9SENTE DANS LA
FEUILLE 'CONTRAT'
'MARQUER LA LIGNE DE 'intIdCherche'
'MsgBox "absent" 'pour d=E9verminer
plageCellule.EntireRow.Select
With Selection
With .Font
.Strikethrough =3D True
.FontStyle =3D "Italique"
.Size =3D 6
End With
.Interior.ColorIndex =3D 39
End With
'passer =E0 la cellule suivante
Set plageCellule =3D .FindNext(plageCellule)
Else
'LA VALEUR 'intIdCherche' EST PAS PR=C9SENTE DANS LA
FEUILLE 'CONTRAT'
End If
End With
Next plageCellule

'=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
Les valeurs sont croissantes dans la plageTravailId, mais =E7a ne sera
pas le cas longtemps.
Il me parcours sans probl=E9me les cellules et marque les premi=E8res
lignes absentes dans Feuil2.
Puis me trouve une erreur de type arriv=E9 =E0 1726 ? alors que tous les
IdCherche sont des entiers dans les deux feuilles.


Pourquoi tant de haine, Mr VB ?=20

Merci pour votre aide.

5 réponses

Avatar
michdenis
Bonjour Le Nordiste,

À première vue :

| If C Is Nothing Then

tu as omis : "Not"

If not c is nothing then


Salutations!




"Le Nordiste" a écrit dans le message de news:

Bonjour tertous,

À l'aide du code ci-dessous je parcours une plage (colonne A:A) d'une
feuille 'Feuil1' nommée 'plageTravailId' à la recherche des valeurs
( intIdCherche) qui y sont présentes sans étre présentes dans la
colonne A:A d'une feuille 'Feuil2' nommée 'plageReferenceId'.
Si intIdCherche est trouvé la ligne contenant intIdCherche est
marquée (italique police réduite et ligne colorée en violet).

'=========
For Each plageCellule In plageTravailId
'relevé de la valeur de l'Id contenu dans la cellule
intIdCherche = plageCellule.Value
'RECHERCHE DE 'intIdCherche' DANS LA FEUILLE 'REFERENCE'
With plageReferenceId
Set C = .Find(What:=intIdCherche, after:=plageCellule,
LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByColumns,
SearchDirection:=xlNext)
If C Is Nothing Then
'LA VALEUR 'intIdCherche' N'EST PAS PRÉSENTE DANS LA
FEUILLE 'CONTRAT'
'MARQUER LA LIGNE DE 'intIdCherche'
'MsgBox "absent" 'pour déverminer
plageCellule.EntireRow.Select
With Selection
With .Font
.Strikethrough = True
.FontStyle = "Italique"
.Size = 6
End With
.Interior.ColorIndex = 39
End With
'passer à la cellule suivante
Set plageCellule = .FindNext(plageCellule)
Else
'LA VALEUR 'intIdCherche' EST PAS PRÉSENTE DANS LA
FEUILLE 'CONTRAT'
End If
End With
Next plageCellule

'========== Les valeurs sont croissantes dans la plageTravailId, mais ça ne sera
pas le cas longtemps.
Il me parcours sans probléme les cellules et marque les premières
lignes absentes dans Feuil2.
Puis me trouve une erreur de type arrivé à 1726 ? alors que tous les
IdCherche sont des entiers dans les deux feuilles.


Pourquoi tant de haine, Mr VB ?

Merci pour votre aide.
Avatar
Le Nordiste
Je ne pense pas que cela joue sur le fait de ne pas passer le cap de
1726 ; car j'ai testé ainsi la macro et ça aller bien.
J'essaye quand même.

Merci de la proposition.
Avatar
michdenis
Oublie ma suggestion... je n'avais pas vu ta question en bas de la procédure.

Quel est ton message d'erreur ?


Salutations!



"Le Nordiste" a écrit dans le message de news:

Je ne pense pas que cela joue sur le fait de ne pas passer le cap de
1726 ; car j'ai testé ainsi la macro et ça aller bien.
J'essaye quand même.

Merci de la proposition.
Avatar
Le Nordiste
Queque chose comme "out of range' de mémoire.
Avatar
michdenis
Bonjour Le Nordiste,

A propos de la procédure :

A ) J'aime bien lorsque l'indentation est respectée
cela augmente la lisibilité
B ) De commenter le code, c'est très bien... il est préférable
de le faire discrètement (pas de majuscule)...l'essentiel
demeurant le code
C ) Je t'invite à faire un peu de lecture sur la méthode FindNext
En gros, cette dernière permet de continuer la recherche après
qu'elle est trouvé un premier élément cherché dans la plage de
cellules.
Quand tu fais une recherche dans la feuille de calcul en utilisant
Édition / Rechercher / ... si tu appuies sur suivant ... tu fais l'équivalent
de findNext ...tu ne changes pas les critères de recherche mais tu
demande à excel de continuer sur la plage pour voir si une autre
cellule ne correspondrait pas aux critères.

Ta procédure est déficiente à cet égard :
Set plageCellule = .FindNext(plageCellule) <- Problème !

Tu as un exemple simple dans l'aide Excel sur le sujet
Observe.. la procédure contient aussi des conditions qui
vont indiquer à excel que la plage a été totalement balayé
et que tu dois passer à l'élément suivant .

Exemple de l'aide
'-------------------
With Worksheets(1).Range("a1:a500")
Set c = .Find(2, lookin:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Value = 5
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With


Salutations!




"Le Nordiste" a écrit dans le message de news:

Queque chose comme "out of range' de mémoire.