ERREUR 91 - FINDNEXT [RESOLU ] [VBA] - VB/VBA/VBS - Programmation
Marsh Posté le 10-08-2014 à 19:56:17
Bonjour,
merci de respecter les règles du forum en éditant le post et en balisant le code via l'icône appropriée …
Marsh Posté le 11-08-2014 à 09:15:05
Bonjour,
Lorsque tu écris :
Set RechCel = .FindNext(RechCel) |
Il se produit une erreur dans l’évaluation de RechCel.Address lorsque la
valeur n'est pas trouvée puisque RechCel est égal à Nothing
Il faut écrire :
Set RechCel = .FindNext(RechCel) |
Marsh Posté le 11-08-2014 à 12:06:36
Merci patrice.
Avec ce code
Code :
|
C'est fonctionnel.
Bonne journée
Marsh Posté le 11-08-2014 à 13:47:01
Re,
Lorsqu'il n'y a qu'un seule instruction dans la condition, au lieu de :
If RechCel Is Nothing Then |
Tu peux ecrite sur une seule ligne :
If RechCel Is Nothing Then Exit Do |
Marsh Posté le 11-08-2014 à 14:30:43
Merci pour l'astuce.
J'ai un autre souci; Je sais pas si j'ouvre un autre sujet.
Il s'agit d'un bug Excel.
je m'explique.
Dans script lance des recherches de mots et renomme la cellule.
Mais à un moment, il repart à zéro et ne s'arrête jamais, j'ai donc intégré dans mon code, un if qui stoppe le script si la cellule est inférieur à une cellule précise, il doit s'arrêter. sauf que ma cellule A100 est considéré comme inférieur à A18.
Voici mon code pour vous éclaircir :
Cette condition permet d'instancier la variable qui va stopper ma boucle:
Code :
|
Le bug survient ici :
Code :
|
J'ai mis le msgbox suivant :
msgbox RechCel.Address & " < " ValStopRech |
Résultat :
$A$100 < $A$18;
J'ai dû passer par une méthode de split pour que ça marche :
Code :
|
Pourquoi ce bug?
Merci pour vos réponses.
Marsh Posté le 11-08-2014 à 17:27:42
Re,
RechCel.Address renvoie une chaine de caractères alphanumériques et
dans l'ordre alphabétique, le 0 étant avant le 8, il est normal que $A$100 soit avant $A$18
Tu aurais pu utiliser RechCel.Row qui renvoi le numéro de ligne sous forme de nombre et tu aurais eu le 18 avant le 100.
C'est une des raisons pour lesquelles il est préférable de déclarer correctement chaque variable
plutôt que de tout déclarer comme Variant !
Edit : Dans 99,9% des cas ce qui semble un Bug Excel est en réalité une erreur dans le développement !
Marsh Posté le 11-08-2014 à 22:27:08
J'ai suivi ta solution mais j'ai du faire des modification pour que ça marche :
Code :
|
Merci.
Marsh Posté le 11-08-2014 à 22:42:26
J'ai un autre souci.
Dans ma recherche, j'ai intégré un Sub pour changer de texte selon un valeur trouvée (ex : si dans ma recherche blabla, il trouve aussi le chiffre 1 alors dans ma modification il va mettre "la" en revanche si il trouve le chiffre 2 alors dans ma modification il va mettre "ici".)
Sauf que lors de la première exécution il fait les modifications "la" mais aucune "ici". C'est après la seconde exécution (vu qu'il n'existe plus de chiffre 1) qu'il va me mettre le 0.
Voici la procédure appelée:
Code :
|
Dans mon script principale
Code :
|
J'ai l'impression que ma recherche initial "BLABLA" se transforme en recherche "BLABLA 1". Parce qu'il saute les cellules contenant "BLABLA 2"
Je sais pas si c'est clair.
Marsh Posté le 12-08-2014 à 09:31:20
Partir du principe le VBA ne se trompant jamais ni ne décide quoique ce soit comme « sauter des cellules »,
c'est donc une erreur de conception et voilà tout !
En fait il manque dans la ligne … Ah zut, le code n'est toujours pas balisé ! …
Marsh Posté le 12-08-2014 à 10:10:39
J'ai balisé le code en allant voir le bbcode de patrice.
Lorsque je passe par le sub ProcCbOwner, la valeur de la variable est changée.
Marsh Posté le 12-08-2014 à 10:21:57
Solution évidente livrée sur un plateau en utilisant le Générateurs de macros,
si la recherche porte sur tous les mots commençant par "BLABLA" comme "BLABLA 1", "BLABLA 2", etc …
modifier alors la ligne n° … Avec quoi as-tu balisé ?‼ Certainement pas avec l'icône dédiée au code ‼
Bref la recherche doit être effectuée avec le paramètre "BLABLA*" …
Marsh Posté le 12-08-2014 à 10:43:21
Je me suis mal exprimé Marc.
Disons que dans mon fichier Excel, j'ai :
A1 = "ffsdfsdfsfsd BLABLA 1 kfsdhfshdklruos,ldufvsorbnhsoifgenrnfojzse"
A2 = "ffsdfsdfsfsd BLABLA 2 fvsdfsdf"
A3 = "ffsdfsdfsfsd BLABLA 1 rbnhsoifgenrnfojzse"
A4 = "ffsdfsdfsfsd BLABLA 2 kfsdhfshdklruos,"
Avec mon script, le résultat final sera ainsi :
A1 = "la BLABLA"
A2 = "ici BLABLA"
A3 = "la BLABLA"
A4 = "ici BLABLA"
...
Je cherche le terme dans la cellule et je le modifie dans un texte plus clair.
Je passe par une procédure supplémentaire afin d'ajouter à mon texte final "la" ou "ici.
Si je supprime ma procédure ProcCbOwner, il me modifiera l'ensemble des cellulles soit A1 à A4. Si je l'active, il ne me modifie que A1 et A3.
Ce qui fait que ta solution ne me convient pas.
Ps : je vais modifier le balisage avec la bonne balise C/C++.
Marsh Posté le 12-08-2014 à 12:23:39
Marc vous avez raison sur un point la solution est évidente.
Je m'explique dans mon script ligne 7 (vive le balisage ) . Je découpe ma recherche, il suffisait de récupérer l'information dans la "découpe" pour modifier ma variable LI.
J'ai cherché compliqué alors que c'était simple.
Merci à vous 2.
Marsh Posté le 10-08-2014 à 18:39:44
Bonjour à tous,
Me revoilà, pour un nouveau problème.
J'ai une erreur 91 "Variable objet ou variable de bloc objet With Non défini"
Voici le code :
Merci de votre aide.
Message édité par vb_user le 12-08-2014 à 12:24:26