Bonjour à tous
Quand je fais une recherche, genre :
Sub Find()
Dim c
With ActiveSheet.Range([zone de recherche allant de la ligne suivante à la
dernière ligne])
Set c = .find([cequejecherche], LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Select
Exit Do
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
Else
MsgBox "y a plus !"
End If
End With
End Sub
J'essaie d'afficher un message quand il n'y a plus rien à trouver (msgbox
"y a plus !"), or.... il ne se passe rien ! pas moyen d'afficher ce
message...
Une idée ?
Merci
Serge
Bonjour à tous
Quand je fais une recherche, genre :
Sub Find()
Dim c
With ActiveSheet.Range([zone de recherche allant de la ligne suivante à la
dernière ligne])
Set c = .find([cequejecherche], LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Select
Exit Do
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
Else
MsgBox "y a plus !"
End If
End With
End Sub
J'essaie d'afficher un message quand il n'y a plus rien à trouver (msgbox
"y a plus !"), or.... il ne se passe rien ! pas moyen d'afficher ce
message...
Une idée ?
Merci
Serge
Bonjour à tous
Quand je fais une recherche, genre :
Sub Find()
Dim c
With ActiveSheet.Range([zone de recherche allant de la ligne suivante à la
dernière ligne])
Set c = .find([cequejecherche], LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Select
Exit Do
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
Else
MsgBox "y a plus !"
End If
End With
End Sub
J'essaie d'afficher un message quand il n'y a plus rien à trouver (msgbox
"y a plus !"), or.... il ne se passe rien ! pas moyen d'afficher ce
message...
Une idée ?
Merci
Serge
(Je suppose que la condition "Exit do", n'a été écrite que pour un test
rapide du programme)
Ton test "if then else", est avant la boucle "Do Loop"
=> la boucle "Do Loop" n'est effectuée que "si" la chaine recherchée
existe
"sinon" (else) affichage du message.
(Ton message "y a plus !" ne s'affiche que si "il n'y en a pas").
Pour afficher un message en fin de recherche il faut :
- tester si la chaine rechercher existe
- Si oui, effectuer la boucle puis afficher le message
- si non, ne rien faire ou afficher un message "il n'y en a pas"
If Not c Is Nothing Then
Do
c.Select
' Exit Do
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
==> MsgBox " Il n'y en a plus!"
Else
MsgBox "y a plus !"
End If
Cordialement
(Je suppose que la condition "Exit do", n'a été écrite que pour un test
rapide du programme)
Ton test "if then else", est avant la boucle "Do Loop"
=> la boucle "Do Loop" n'est effectuée que "si" la chaine recherchée
existe
"sinon" (else) affichage du message.
(Ton message "y a plus !" ne s'affiche que si "il n'y en a pas").
Pour afficher un message en fin de recherche il faut :
- tester si la chaine rechercher existe
- Si oui, effectuer la boucle puis afficher le message
- si non, ne rien faire ou afficher un message "il n'y en a pas"
If Not c Is Nothing Then
Do
c.Select
' Exit Do
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
==> MsgBox " Il n'y en a plus!"
Else
MsgBox "y a plus !"
End If
Cordialement
(Je suppose que la condition "Exit do", n'a été écrite que pour un test
rapide du programme)
Ton test "if then else", est avant la boucle "Do Loop"
=> la boucle "Do Loop" n'est effectuée que "si" la chaine recherchée
existe
"sinon" (else) affichage du message.
(Ton message "y a plus !" ne s'affiche que si "il n'y en a pas").
Pour afficher un message en fin de recherche il faut :
- tester si la chaine rechercher existe
- Si oui, effectuer la boucle puis afficher le message
- si non, ne rien faire ou afficher un message "il n'y en a pas"
If Not c Is Nothing Then
Do
c.Select
' Exit Do
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
==> MsgBox " Il n'y en a plus!"
Else
MsgBox "y a plus !"
End If
Cordialement
(Je suppose que la condition "Exit do", n'a été écrite que pour un test
rapide du programme)
non, c''est juste pour m'arreter sur la ligne suivante trouvée. Sinon, il
contune jusqu'à la finTon test "if then else", est avant la boucle "Do Loop"
=> la boucle "Do Loop" n'est effectuée que "si" la chaine recherchée
existe
"sinon" (else) affichage du message.
(Ton message "y a plus !" ne s'affiche que si "il n'y en a pas").
Pour afficher un message en fin de recherche il faut :
- tester si la chaine rechercher existe
- Si oui, effectuer la boucle puis afficher le message
- si non, ne rien faire ou afficher un message "il n'y en a pas"
Non, ce que je veux c'est afficher un message quand je suis à la fin de
marecherche, qu'il n'y a plus rien à trouver
Et dans mon exemple le > MsgBox "y a plus !" apres le else ne
fonctionne pas, ce qui ne me parait pas logique, mais bon...
D'où ma question :)
Oualla
SergeIf Not c Is Nothing Then
Do
c.Select
' Exit Do
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
==> MsgBox " Il n'y en a plus!"
Else
MsgBox "y a plus !"
End If
Cordialement
(Je suppose que la condition "Exit do", n'a été écrite que pour un test
rapide du programme)
non, c''est juste pour m'arreter sur la ligne suivante trouvée. Sinon, il
contune jusqu'à la fin
Ton test "if then else", est avant la boucle "Do Loop"
=> la boucle "Do Loop" n'est effectuée que "si" la chaine recherchée
existe
"sinon" (else) affichage du message.
(Ton message "y a plus !" ne s'affiche que si "il n'y en a pas").
Pour afficher un message en fin de recherche il faut :
- tester si la chaine rechercher existe
- Si oui, effectuer la boucle puis afficher le message
- si non, ne rien faire ou afficher un message "il n'y en a pas"
Non, ce que je veux c'est afficher un message quand je suis à la fin de
marecherche, qu'il n'y a plus rien à trouver
Et dans mon exemple le > MsgBox "y a plus !" apres le else ne
fonctionne pas, ce qui ne me parait pas logique, mais bon...
D'où ma question :)
Oualla
Serge
If Not c Is Nothing Then
Do
c.Select
' Exit Do
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
==> MsgBox " Il n'y en a plus!"
Else
MsgBox "y a plus !"
End If
Cordialement
(Je suppose que la condition "Exit do", n'a été écrite que pour un test
rapide du programme)
non, c''est juste pour m'arreter sur la ligne suivante trouvée. Sinon, il
contune jusqu'à la finTon test "if then else", est avant la boucle "Do Loop"
=> la boucle "Do Loop" n'est effectuée que "si" la chaine recherchée
existe
"sinon" (else) affichage du message.
(Ton message "y a plus !" ne s'affiche que si "il n'y en a pas").
Pour afficher un message en fin de recherche il faut :
- tester si la chaine rechercher existe
- Si oui, effectuer la boucle puis afficher le message
- si non, ne rien faire ou afficher un message "il n'y en a pas"
Non, ce que je veux c'est afficher un message quand je suis à la fin de
marecherche, qu'il n'y a plus rien à trouver
Et dans mon exemple le > MsgBox "y a plus !" apres le else ne
fonctionne pas, ce qui ne me parait pas logique, mais bon...
D'où ma question :)
Oualla
SergeIf Not c Is Nothing Then
Do
c.Select
' Exit Do
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
==> MsgBox " Il n'y en a plus!"
Else
MsgBox "y a plus !"
End If
Cordialement
bonjour,
je ne suis pas sur de ce que tu veux mais la proc telle qu'écrite fait
fonctionnellement la chose suivante:
Soit elle trouve quelque chose une 1ere fois et dans ces conditions elle
passe par le Exit Do , auquel cas, il ne peut y avoir de message "Y' a plus"
puisqu'on passe bien par le exit Do mais pas par le else de If Not c Is
Nothing .
Soit elle ne trouve rien une 1ere fois et dans ce cas c est nothing et donc
on passe par le else de If Not c Is Nothing et donc on a le message "Y'a
plus" .
Donc cette proc fonctionne correctement mais ne répond à pas ce que tu
demandes parce que ta emande ne parait pas extrêmement claire. En effet, tu
ne veux pas aller plus loin que la 1ere occurence trouvée mais ca ne garantit
pas qu'il n'existe plus d'occurences.
A+(Je suppose que la condition "Exit do", n'a été écrite que pour un test
rapide du programme)
non, c''est juste pour m'arreter sur la ligne suivante trouvée. Sinon, il
contune jusqu'à la finTon test "if then else", est avant la boucle "Do Loop"
=> la boucle "Do Loop" n'est effectuée que "si" la chaine recherchée existe
"sinon" (else) affichage du message.
(Ton message "y a plus !" ne s'affiche que si "il n'y en a pas").
Pour afficher un message en fin de recherche il faut :
- tester si la chaine rechercher existe
- Si oui, effectuer la boucle puis afficher le message
- si non, ne rien faire ou afficher un message "il n'y en a pas"
Non, ce que je veux c'est afficher un message quand je suis à la fin de
marecherche, qu'il n'y a plus rien à trouver
Et dans mon exemple le > MsgBox "y a plus !" apres le else ne
fonctionne pas, ce qui ne me parait pas logique, mais bon...
D'où ma question :)
Oualla
SergeIf Not c Is Nothing Then
Do
c.Select
' Exit Do
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
==> MsgBox " Il n'y en a plus!"
Else
MsgBox "y a plus !"
End If
Cordialement
bonjour,
je ne suis pas sur de ce que tu veux mais la proc telle qu'écrite fait
fonctionnellement la chose suivante:
Soit elle trouve quelque chose une 1ere fois et dans ces conditions elle
passe par le Exit Do , auquel cas, il ne peut y avoir de message "Y' a plus"
puisqu'on passe bien par le exit Do mais pas par le else de If Not c Is
Nothing .
Soit elle ne trouve rien une 1ere fois et dans ce cas c est nothing et donc
on passe par le else de If Not c Is Nothing et donc on a le message "Y'a
plus" .
Donc cette proc fonctionne correctement mais ne répond à pas ce que tu
demandes parce que ta emande ne parait pas extrêmement claire. En effet, tu
ne veux pas aller plus loin que la 1ere occurence trouvée mais ca ne garantit
pas qu'il n'existe plus d'occurences.
A+
(Je suppose que la condition "Exit do", n'a été écrite que pour un test
rapide du programme)
non, c''est juste pour m'arreter sur la ligne suivante trouvée. Sinon, il
contune jusqu'à la fin
Ton test "if then else", est avant la boucle "Do Loop"
=> la boucle "Do Loop" n'est effectuée que "si" la chaine recherchée existe
"sinon" (else) affichage du message.
(Ton message "y a plus !" ne s'affiche que si "il n'y en a pas").
Pour afficher un message en fin de recherche il faut :
- tester si la chaine rechercher existe
- Si oui, effectuer la boucle puis afficher le message
- si non, ne rien faire ou afficher un message "il n'y en a pas"
Non, ce que je veux c'est afficher un message quand je suis à la fin de
marecherche, qu'il n'y a plus rien à trouver
Et dans mon exemple le > MsgBox "y a plus !" apres le else ne
fonctionne pas, ce qui ne me parait pas logique, mais bon...
D'où ma question :)
Oualla
Serge
If Not c Is Nothing Then
Do
c.Select
' Exit Do
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
==> MsgBox " Il n'y en a plus!"
Else
MsgBox "y a plus !"
End If
Cordialement
bonjour,
je ne suis pas sur de ce que tu veux mais la proc telle qu'écrite fait
fonctionnellement la chose suivante:
Soit elle trouve quelque chose une 1ere fois et dans ces conditions elle
passe par le Exit Do , auquel cas, il ne peut y avoir de message "Y' a plus"
puisqu'on passe bien par le exit Do mais pas par le else de If Not c Is
Nothing .
Soit elle ne trouve rien une 1ere fois et dans ce cas c est nothing et donc
on passe par le else de If Not c Is Nothing et donc on a le message "Y'a
plus" .
Donc cette proc fonctionne correctement mais ne répond à pas ce que tu
demandes parce que ta emande ne parait pas extrêmement claire. En effet, tu
ne veux pas aller plus loin que la 1ere occurence trouvée mais ca ne garantit
pas qu'il n'existe plus d'occurences.
A+(Je suppose que la condition "Exit do", n'a été écrite que pour un test
rapide du programme)
non, c''est juste pour m'arreter sur la ligne suivante trouvée. Sinon, il
contune jusqu'à la finTon test "if then else", est avant la boucle "Do Loop"
=> la boucle "Do Loop" n'est effectuée que "si" la chaine recherchée existe
"sinon" (else) affichage du message.
(Ton message "y a plus !" ne s'affiche que si "il n'y en a pas").
Pour afficher un message en fin de recherche il faut :
- tester si la chaine rechercher existe
- Si oui, effectuer la boucle puis afficher le message
- si non, ne rien faire ou afficher un message "il n'y en a pas"
Non, ce que je veux c'est afficher un message quand je suis à la fin de
marecherche, qu'il n'y a plus rien à trouver
Et dans mon exemple le > MsgBox "y a plus !" apres le else ne
fonctionne pas, ce qui ne me parait pas logique, mais bon...
D'où ma question :)
Oualla
SergeIf Not c Is Nothing Then
Do
c.Select
' Exit Do
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
==> MsgBox " Il n'y en a plus!"
Else
MsgBox "y a plus !"
End If
Cordialement
Bonjour à toutes à tous et à anonymousA qui nous a tapoter de ses petits
doigt ce qui suit :bonjour,
je ne suis pas sur de ce que tu veux mais la proc telle qu'écrite fait
fonctionnellement la chose suivante:
Soit elle trouve quelque chose une 1ere fois et dans ces conditions
elle passe par le Exit Do , auquel cas, il ne peut y avoir de message
"Y' a plus" puisqu'on passe bien par le exit Do mais pas par le else
de If Not c Is Nothing .
Soit elle ne trouve rien une 1ere fois et dans ce cas c est nothing et
donc on passe par le else de If Not c Is Nothing et donc on a le
message "Y'a plus" .
Donc cette proc fonctionne correctement mais ne répond à pas ce que tu
demandes parce que ta emande ne parait pas extrêmement claire. En
effet, tu ne veux pas aller plus loin que la 1ere occurence trouvée
mais ca ne garantit pas qu'il n'existe plus d'occurences.
A+(Je suppose que la condition "Exit do", n'a été écrite que pour un test
rapide du programme)
non, c''est juste pour m'arreter sur la ligne suivante trouvée.
Sinon, il contune jusqu'à la finTon test "if then else", est avant la boucle "Do Loop"
=> la boucle "Do Loop" n'est effectuée que "si" la chaine recherchée
existe
"sinon" (else) affichage du message.
(Ton message "y a plus !" ne s'affiche que si "il n'y en a pas").
Pour afficher un message en fin de recherche il faut :
- tester si la chaine rechercher existe
- Si oui, effectuer la boucle puis afficher le message
- si non, ne rien faire ou afficher un message "il n'y en a pas"
Non, ce que je veux c'est afficher un message quand je suis à la fin
de marecherche, qu'il n'y a plus rien à trouver
Et dans mon exemple le > MsgBox "y a plus !" apres le else
ne fonctionne pas, ce qui ne me parait pas logique, mais bon...
D'où ma question :)
Oualla
SergeIf Not c Is Nothing Then
Do
c.Select
' Exit Do
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
==> MsgBox " Il n'y en a plus!"
Else
MsgBox "y a plus !"
End If
Cordialement
Je ne comprends pas trop la macro, Not c Is Nothing ne m'inspire qu'une
grande admiration pour celles et ceux qui l'utilisent, mais je pense que
notre ami Serge veux creer une proc qui lui trouve une occurence a
l'interieur d'une plage, qui active la cellule trouvee et qui sort de la
procedure. Ensuite, s'il la relance il veut trouver l'occurence suivante
et ainsi de suite jusqu'a la fin. Mais a mon avis, il tourne en rond car
il recommence a chaque fois du debut de la plage donc soit il trouve
toujours la meme valeur, soit il devrait avoir le message 8-o
JLuc (sur de rien sur e coup la :') )
Bonjour à toutes à tous et à anonymousA qui nous a tapoter de ses petits
doigt ce qui suit :
bonjour,
je ne suis pas sur de ce que tu veux mais la proc telle qu'écrite fait
fonctionnellement la chose suivante:
Soit elle trouve quelque chose une 1ere fois et dans ces conditions
elle passe par le Exit Do , auquel cas, il ne peut y avoir de message
"Y' a plus" puisqu'on passe bien par le exit Do mais pas par le else
de If Not c Is Nothing .
Soit elle ne trouve rien une 1ere fois et dans ce cas c est nothing et
donc on passe par le else de If Not c Is Nothing et donc on a le
message "Y'a plus" .
Donc cette proc fonctionne correctement mais ne répond à pas ce que tu
demandes parce que ta emande ne parait pas extrêmement claire. En
effet, tu ne veux pas aller plus loin que la 1ere occurence trouvée
mais ca ne garantit pas qu'il n'existe plus d'occurences.
A+
(Je suppose que la condition "Exit do", n'a été écrite que pour un test
rapide du programme)
non, c''est juste pour m'arreter sur la ligne suivante trouvée.
Sinon, il contune jusqu'à la fin
Ton test "if then else", est avant la boucle "Do Loop"
=> la boucle "Do Loop" n'est effectuée que "si" la chaine recherchée
existe
"sinon" (else) affichage du message.
(Ton message "y a plus !" ne s'affiche que si "il n'y en a pas").
Pour afficher un message en fin de recherche il faut :
- tester si la chaine rechercher existe
- Si oui, effectuer la boucle puis afficher le message
- si non, ne rien faire ou afficher un message "il n'y en a pas"
Non, ce que je veux c'est afficher un message quand je suis à la fin
de marecherche, qu'il n'y a plus rien à trouver
Et dans mon exemple le > MsgBox "y a plus !" apres le else
ne fonctionne pas, ce qui ne me parait pas logique, mais bon...
D'où ma question :)
Oualla
Serge
If Not c Is Nothing Then
Do
c.Select
' Exit Do
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
==> MsgBox " Il n'y en a plus!"
Else
MsgBox "y a plus !"
End If
Cordialement
Je ne comprends pas trop la macro, Not c Is Nothing ne m'inspire qu'une
grande admiration pour celles et ceux qui l'utilisent, mais je pense que
notre ami Serge veux creer une proc qui lui trouve une occurence a
l'interieur d'une plage, qui active la cellule trouvee et qui sort de la
procedure. Ensuite, s'il la relance il veut trouver l'occurence suivante
et ainsi de suite jusqu'a la fin. Mais a mon avis, il tourne en rond car
il recommence a chaque fois du debut de la plage donc soit il trouve
toujours la meme valeur, soit il devrait avoir le message 8-o
JLuc (sur de rien sur e coup la :') )
Bonjour à toutes à tous et à anonymousA qui nous a tapoter de ses petits
doigt ce qui suit :bonjour,
je ne suis pas sur de ce que tu veux mais la proc telle qu'écrite fait
fonctionnellement la chose suivante:
Soit elle trouve quelque chose une 1ere fois et dans ces conditions
elle passe par le Exit Do , auquel cas, il ne peut y avoir de message
"Y' a plus" puisqu'on passe bien par le exit Do mais pas par le else
de If Not c Is Nothing .
Soit elle ne trouve rien une 1ere fois et dans ce cas c est nothing et
donc on passe par le else de If Not c Is Nothing et donc on a le
message "Y'a plus" .
Donc cette proc fonctionne correctement mais ne répond à pas ce que tu
demandes parce que ta emande ne parait pas extrêmement claire. En
effet, tu ne veux pas aller plus loin que la 1ere occurence trouvée
mais ca ne garantit pas qu'il n'existe plus d'occurences.
A+(Je suppose que la condition "Exit do", n'a été écrite que pour un test
rapide du programme)
non, c''est juste pour m'arreter sur la ligne suivante trouvée.
Sinon, il contune jusqu'à la finTon test "if then else", est avant la boucle "Do Loop"
=> la boucle "Do Loop" n'est effectuée que "si" la chaine recherchée
existe
"sinon" (else) affichage du message.
(Ton message "y a plus !" ne s'affiche que si "il n'y en a pas").
Pour afficher un message en fin de recherche il faut :
- tester si la chaine rechercher existe
- Si oui, effectuer la boucle puis afficher le message
- si non, ne rien faire ou afficher un message "il n'y en a pas"
Non, ce que je veux c'est afficher un message quand je suis à la fin
de marecherche, qu'il n'y a plus rien à trouver
Et dans mon exemple le > MsgBox "y a plus !" apres le else
ne fonctionne pas, ce qui ne me parait pas logique, mais bon...
D'où ma question :)
Oualla
SergeIf Not c Is Nothing Then
Do
c.Select
' Exit Do
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
==> MsgBox " Il n'y en a plus!"
Else
MsgBox "y a plus !"
End If
Cordialement
Je ne comprends pas trop la macro, Not c Is Nothing ne m'inspire qu'une
grande admiration pour celles et ceux qui l'utilisent, mais je pense que
notre ami Serge veux creer une proc qui lui trouve une occurence a
l'interieur d'une plage, qui active la cellule trouvee et qui sort de la
procedure. Ensuite, s'il la relance il veut trouver l'occurence suivante
et ainsi de suite jusqu'a la fin. Mais a mon avis, il tourne en rond car
il recommence a chaque fois du debut de la plage donc soit il trouve
toujours la meme valeur, soit il devrait avoir le message 8-o
JLuc (sur de rien sur e coup la :') )
bonjour,
pour ton info , not c is nothing parait nébuleux et je me propose ( sans
prétention ) de le démystifier.
En l'occurence Set c = .find([cequejecherche], LookIn:=xlValues) affecte à c
un objet range (une plage) résultat de la recherche de "cequejecherche" dans
les valeurs ( pas forcément les valeurs exactes mais dans les valeurs
contenant "cequejecherche") de la plage de recherche .
Si on ne trouve pas de correspondance , alors le résultat est nothing donc du
coup set c= nothing revient à affecter nothing à l'objet c que par défaut (
c.à.d sans définition de variables ) VBA a défini de type variant.
En l'occurence, si la recherche renvoie queleque chose alors c est équivalent
à un range et donc c ne renverrait pas nothing donc on compare c à nothing
en utilisant is nothing .
On pourrait utiliser if c is nothing pour ce faire mais du coup , il faudrait
utiliser Else pour activer l'action principale que l'on veut faire.
Donc on utilise Not c is nothing ( Not: opérateur logique renvoyant le
complémentaire dans l'ensemble booleen des valeurs du résultat du test - c is
nothing - qui renvoie Vrai ou Faux ) pour renvoyer le résultat "Vrai" et
normalement éviter le Else.En pratique d'ailleurs ici dans cet exemple
précis, ca n'a pas un interet fou mais le programmeur aussi est un peu
routinier.
Si donc Not c is nothing est égale à Vrai, alors la recherche a abouti et on
peut rentrer dans la boucle Do.
Enfin,pour la demande notre correspondant , s'il veut faire ce que tu dis, il
faudrait conserver l'addresse de l'occurence précédente entre 2 appels de
procédure , ce qui n'est possible qu'en en conservant celle-ci par tous
moyens à notre disposition ( déclaration dans une plage nommée, stockage de
l'addresse dans une cellule sous forme de string, déclaration de variable
publique avec affectation de celle ci avec le résultat de la recherche ,
stockage dans une clé de regsitre, dans un fichier texte ou ini associé, dans
une instruction VBA inscrite dynamiquement dans un module, bref tout un tas
de possibilités..).
Puis une fois stockée cette valeur, démarrer la recherche sur une plage au
delà de cette valeur, étant entendu que la détermination de la valeur
suivante dépend du paramètre After de la méthode find que l'utilisateur a
rentré.
Enfin, comme d'hab, on peut arriver à tout , sous réserve de savoir vraiement
ce qu'on veut et de bien border les critères de recherche.
A+
bonjour,
pour ton info , not c is nothing parait nébuleux et je me propose ( sans
prétention ) de le démystifier.
En l'occurence Set c = .find([cequejecherche], LookIn:=xlValues) affecte à c
un objet range (une plage) résultat de la recherche de "cequejecherche" dans
les valeurs ( pas forcément les valeurs exactes mais dans les valeurs
contenant "cequejecherche") de la plage de recherche .
Si on ne trouve pas de correspondance , alors le résultat est nothing donc du
coup set c= nothing revient à affecter nothing à l'objet c que par défaut (
c.à.d sans définition de variables ) VBA a défini de type variant.
En l'occurence, si la recherche renvoie queleque chose alors c est équivalent
à un range et donc c ne renverrait pas nothing donc on compare c à nothing
en utilisant is nothing .
On pourrait utiliser if c is nothing pour ce faire mais du coup , il faudrait
utiliser Else pour activer l'action principale que l'on veut faire.
Donc on utilise Not c is nothing ( Not: opérateur logique renvoyant le
complémentaire dans l'ensemble booleen des valeurs du résultat du test - c is
nothing - qui renvoie Vrai ou Faux ) pour renvoyer le résultat "Vrai" et
normalement éviter le Else.En pratique d'ailleurs ici dans cet exemple
précis, ca n'a pas un interet fou mais le programmeur aussi est un peu
routinier.
Si donc Not c is nothing est égale à Vrai, alors la recherche a abouti et on
peut rentrer dans la boucle Do.
Enfin,pour la demande notre correspondant , s'il veut faire ce que tu dis, il
faudrait conserver l'addresse de l'occurence précédente entre 2 appels de
procédure , ce qui n'est possible qu'en en conservant celle-ci par tous
moyens à notre disposition ( déclaration dans une plage nommée, stockage de
l'addresse dans une cellule sous forme de string, déclaration de variable
publique avec affectation de celle ci avec le résultat de la recherche ,
stockage dans une clé de regsitre, dans un fichier texte ou ini associé, dans
une instruction VBA inscrite dynamiquement dans un module, bref tout un tas
de possibilités..).
Puis une fois stockée cette valeur, démarrer la recherche sur une plage au
delà de cette valeur, étant entendu que la détermination de la valeur
suivante dépend du paramètre After de la méthode find que l'utilisateur a
rentré.
Enfin, comme d'hab, on peut arriver à tout , sous réserve de savoir vraiement
ce qu'on veut et de bien border les critères de recherche.
A+
bonjour,
pour ton info , not c is nothing parait nébuleux et je me propose ( sans
prétention ) de le démystifier.
En l'occurence Set c = .find([cequejecherche], LookIn:=xlValues) affecte à c
un objet range (une plage) résultat de la recherche de "cequejecherche" dans
les valeurs ( pas forcément les valeurs exactes mais dans les valeurs
contenant "cequejecherche") de la plage de recherche .
Si on ne trouve pas de correspondance , alors le résultat est nothing donc du
coup set c= nothing revient à affecter nothing à l'objet c que par défaut (
c.à.d sans définition de variables ) VBA a défini de type variant.
En l'occurence, si la recherche renvoie queleque chose alors c est équivalent
à un range et donc c ne renverrait pas nothing donc on compare c à nothing
en utilisant is nothing .
On pourrait utiliser if c is nothing pour ce faire mais du coup , il faudrait
utiliser Else pour activer l'action principale que l'on veut faire.
Donc on utilise Not c is nothing ( Not: opérateur logique renvoyant le
complémentaire dans l'ensemble booleen des valeurs du résultat du test - c is
nothing - qui renvoie Vrai ou Faux ) pour renvoyer le résultat "Vrai" et
normalement éviter le Else.En pratique d'ailleurs ici dans cet exemple
précis, ca n'a pas un interet fou mais le programmeur aussi est un peu
routinier.
Si donc Not c is nothing est égale à Vrai, alors la recherche a abouti et on
peut rentrer dans la boucle Do.
Enfin,pour la demande notre correspondant , s'il veut faire ce que tu dis, il
faudrait conserver l'addresse de l'occurence précédente entre 2 appels de
procédure , ce qui n'est possible qu'en en conservant celle-ci par tous
moyens à notre disposition ( déclaration dans une plage nommée, stockage de
l'addresse dans une cellule sous forme de string, déclaration de variable
publique avec affectation de celle ci avec le résultat de la recherche ,
stockage dans une clé de regsitre, dans un fichier texte ou ini associé, dans
une instruction VBA inscrite dynamiquement dans un module, bref tout un tas
de possibilités..).
Puis une fois stockée cette valeur, démarrer la recherche sur une plage au
delà de cette valeur, étant entendu que la détermination de la valeur
suivante dépend du paramètre After de la méthode find que l'utilisateur a
rentré.
Enfin, comme d'hab, on peut arriver à tout , sous réserve de savoir vraiement
ce qu'on veut et de bien border les critères de recherche.
A+
Bonjour à toutes à tous et à anonymousA qui nous a tapoter de ses petits
doigt ce qui suit :bonjour,
pour ton info , not c is nothing parait nébuleux et je me propose (
sans prétention ) de le démystifier.
En l'occurence Set c = .find([cequejecherche], LookIn:=xlValues)
affecte à c un objet range (une plage) résultat de la recherche de
"cequejecherche" dans les valeurs ( pas forcément les valeurs exactes
mais dans les valeurs contenant "cequejecherche") de la plage de
recherche .
Si on ne trouve pas de correspondance , alors le résultat est nothing
donc du coup set c= nothing revient à affecter nothing à l'objet c que
par défaut ( c.à.d sans définition de variables ) VBA a défini de type
variant.
En l'occurence, si la recherche renvoie queleque chose alors c est
équivalent à un range et donc c ne renverrait pas nothing donc on
compare c à nothing en utilisant is nothing .
On pourrait utiliser if c is nothing pour ce faire mais du coup , il
faudrait utiliser Else pour activer l'action principale que l'on veut
faire.
Donc on utilise Not c is nothing ( Not: opérateur logique renvoyant le
complémentaire dans l'ensemble booleen des valeurs du résultat du test
- c is nothing - qui renvoie Vrai ou Faux ) pour renvoyer le résultat
"Vrai" et normalement éviter le Else.En pratique d'ailleurs ici dans
cet exemple précis, ca n'a pas un interet fou mais le programmeur
aussi est un peu routinier.
Si donc Not c is nothing est égale à Vrai, alors la recherche a abouti
et on peut rentrer dans la boucle Do.
Enfin,pour la demande notre correspondant , s'il veut faire ce que tu
dis, il faudrait conserver l'addresse de l'occurence précédente entre
2 appels de procédure , ce qui n'est possible qu'en en conservant
celle-ci par tous moyens à notre disposition ( déclaration dans une
plage nommée, stockage de l'addresse dans une cellule sous forme de
string, déclaration de variable publique avec affectation de celle ci
avec le résultat de la recherche , stockage dans une clé de regsitre,
dans un fichier texte ou ini associé, dans une instruction VBA
inscrite dynamiquement dans un module, bref tout un tas de
possibilités..).
Puis une fois stockée cette valeur, démarrer la recherche sur une
plage au delà de cette valeur, étant entendu que la détermination de
la valeur suivante dépend du paramètre After de la méthode find que
l'utilisateur a rentré.
Enfin, comme d'hab, on peut arriver à tout , sous réserve de savoir
vraiement ce qu'on veut et de bien border les critères de recherche.
A+
Ok, je te remercie de tes precisions. En fait on teste que c n'EST PAS
vide. C'est une sacre torture du cerveau, on pourrait pas faire : IF c
tout simplement ?
Merci encore
JLuc
Bonjour à toutes à tous et à anonymousA qui nous a tapoter de ses petits
doigt ce qui suit :
bonjour,
pour ton info , not c is nothing parait nébuleux et je me propose (
sans prétention ) de le démystifier.
En l'occurence Set c = .find([cequejecherche], LookIn:=xlValues)
affecte à c un objet range (une plage) résultat de la recherche de
"cequejecherche" dans les valeurs ( pas forcément les valeurs exactes
mais dans les valeurs contenant "cequejecherche") de la plage de
recherche .
Si on ne trouve pas de correspondance , alors le résultat est nothing
donc du coup set c= nothing revient à affecter nothing à l'objet c que
par défaut ( c.à.d sans définition de variables ) VBA a défini de type
variant.
En l'occurence, si la recherche renvoie queleque chose alors c est
équivalent à un range et donc c ne renverrait pas nothing donc on
compare c à nothing en utilisant is nothing .
On pourrait utiliser if c is nothing pour ce faire mais du coup , il
faudrait utiliser Else pour activer l'action principale que l'on veut
faire.
Donc on utilise Not c is nothing ( Not: opérateur logique renvoyant le
complémentaire dans l'ensemble booleen des valeurs du résultat du test
- c is nothing - qui renvoie Vrai ou Faux ) pour renvoyer le résultat
"Vrai" et normalement éviter le Else.En pratique d'ailleurs ici dans
cet exemple précis, ca n'a pas un interet fou mais le programmeur
aussi est un peu routinier.
Si donc Not c is nothing est égale à Vrai, alors la recherche a abouti
et on peut rentrer dans la boucle Do.
Enfin,pour la demande notre correspondant , s'il veut faire ce que tu
dis, il faudrait conserver l'addresse de l'occurence précédente entre
2 appels de procédure , ce qui n'est possible qu'en en conservant
celle-ci par tous moyens à notre disposition ( déclaration dans une
plage nommée, stockage de l'addresse dans une cellule sous forme de
string, déclaration de variable publique avec affectation de celle ci
avec le résultat de la recherche , stockage dans une clé de regsitre,
dans un fichier texte ou ini associé, dans une instruction VBA
inscrite dynamiquement dans un module, bref tout un tas de
possibilités..).
Puis une fois stockée cette valeur, démarrer la recherche sur une
plage au delà de cette valeur, étant entendu que la détermination de
la valeur suivante dépend du paramètre After de la méthode find que
l'utilisateur a rentré.
Enfin, comme d'hab, on peut arriver à tout , sous réserve de savoir
vraiement ce qu'on veut et de bien border les critères de recherche.
A+
Ok, je te remercie de tes precisions. En fait on teste que c n'EST PAS
vide. C'est une sacre torture du cerveau, on pourrait pas faire : IF c
tout simplement ?
Merci encore
JLuc
Bonjour à toutes à tous et à anonymousA qui nous a tapoter de ses petits
doigt ce qui suit :bonjour,
pour ton info , not c is nothing parait nébuleux et je me propose (
sans prétention ) de le démystifier.
En l'occurence Set c = .find([cequejecherche], LookIn:=xlValues)
affecte à c un objet range (une plage) résultat de la recherche de
"cequejecherche" dans les valeurs ( pas forcément les valeurs exactes
mais dans les valeurs contenant "cequejecherche") de la plage de
recherche .
Si on ne trouve pas de correspondance , alors le résultat est nothing
donc du coup set c= nothing revient à affecter nothing à l'objet c que
par défaut ( c.à.d sans définition de variables ) VBA a défini de type
variant.
En l'occurence, si la recherche renvoie queleque chose alors c est
équivalent à un range et donc c ne renverrait pas nothing donc on
compare c à nothing en utilisant is nothing .
On pourrait utiliser if c is nothing pour ce faire mais du coup , il
faudrait utiliser Else pour activer l'action principale que l'on veut
faire.
Donc on utilise Not c is nothing ( Not: opérateur logique renvoyant le
complémentaire dans l'ensemble booleen des valeurs du résultat du test
- c is nothing - qui renvoie Vrai ou Faux ) pour renvoyer le résultat
"Vrai" et normalement éviter le Else.En pratique d'ailleurs ici dans
cet exemple précis, ca n'a pas un interet fou mais le programmeur
aussi est un peu routinier.
Si donc Not c is nothing est égale à Vrai, alors la recherche a abouti
et on peut rentrer dans la boucle Do.
Enfin,pour la demande notre correspondant , s'il veut faire ce que tu
dis, il faudrait conserver l'addresse de l'occurence précédente entre
2 appels de procédure , ce qui n'est possible qu'en en conservant
celle-ci par tous moyens à notre disposition ( déclaration dans une
plage nommée, stockage de l'addresse dans une cellule sous forme de
string, déclaration de variable publique avec affectation de celle ci
avec le résultat de la recherche , stockage dans une clé de regsitre,
dans un fichier texte ou ini associé, dans une instruction VBA
inscrite dynamiquement dans un module, bref tout un tas de
possibilités..).
Puis une fois stockée cette valeur, démarrer la recherche sur une
plage au delà de cette valeur, étant entendu que la détermination de
la valeur suivante dépend du paramètre After de la méthode find que
l'utilisateur a rentré.
Enfin, comme d'hab, on peut arriver à tout , sous réserve de savoir
vraiement ce qu'on veut et de bien border les critères de recherche.
A+
Ok, je te remercie de tes precisions. En fait on teste que c n'EST PAS
vide. C'est une sacre torture du cerveau, on pourrait pas faire : IF c
tout simplement ?
Merci encore
JLuc
si.!! on pourrait (cf mon post précédent) écrire if c is nothing mais si tu
relis bien ce que je t'ai envoyé, tu as l'explication du pourquoi du comment.
A+
Ok ! voila ce que je crois avoir compris :
si.!! on pourrait (cf mon post précédent) écrire if c is nothing mais si tu
relis bien ce que je t'ai envoyé, tu as l'explication du pourquoi du comment.
A+
Ok ! voila ce que je crois avoir compris :
si.!! on pourrait (cf mon post précédent) écrire if c is nothing mais si tu
relis bien ce que je t'ai envoyé, tu as l'explication du pourquoi du comment.
A+
Ok ! voila ce que je crois avoir compris :