=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.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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.
Bonjour Le Nordiste,
À première vue :
| If C Is Nothing Then
tu as omis : "Not"
If not c is nothing then
Salutations!
"Le Nordiste" <jean-paul.bataille@cegetel.fr> a écrit dans le message de news:
1142333057.018568.30570@j33g2000cwa.googlegroups.com...
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.
À 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.
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.
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.
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.
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.
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" <jean-paul.bataille@cegetel.fr> a écrit dans le message de news:
1142344107.886732.223030@i40g2000cwc.googlegroups.com...
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.
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.
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" <jean-paul.bataille@cegetel.fr> a écrit dans le message de news:
1142352236.327720.185030@z34g2000cwc.googlegroups.com...
Queque chose comme "out of range' de mémoire.
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