Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1818 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [RESOLU ] [VBA] ERREUR 91 - FINDNEXT

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[RESOLU ] [VBA] ERREUR 91 - FINDNEXT

n°2235340
vb_user
Le partage de l'info...
Posté le 10-08-2014 à 18:39:44  profilanswer
 

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 :
 

Code :
  1. Option Explicit
  2. Dim RechCel, ValRechCarte, PremCell, ValCel, ValCelTab, ValCarte As Variant
  3. Dim ValDecoup As Variant
  4. Sub Btn_test()
  5.    
  6.     With Feuil1.Range("A:A" )
  7.    
  8.         Set RechCel = .Find("BLABLA", , xlValues)
  9.         If Not RechCel Is Nothing Then
  10.             PremCell = RechCel.Address
  11.             Do
  12.                 RechCel.Value = "BLA"
  13.                 Set RechCel = .FindNext(RechCel)
  14.             Loop While Not RechCel Is Nothing And RechCel.Address <> PremCell
  15.         End If
  16.        
  17.         Set RechCel = .Find("BLOUBLOU", , xlValues)
  18.         If Not RechCel Is Nothing Then
  19.             PremCell = RechCel.Address
  20.             Do
  21.                 RechCel.Value = "BLOU"
  22.                 Set RechCel = .FindNext(RechCel)
  23.             Loop While Not RechCel Is Nothing And RechCel.Address <> PremCell    <=========== L'erreur survient ici.
  24.         End If


Merci de votre aide.


Message édité par vb_user le 12-08-2014 à 12:24:26
mood
Publicité
Posté le 10-08-2014 à 18:39:44  profilanswer
 

n°2235346
Marc L
Posté le 10-08-2014 à 19:56:17  profilanswer
 


           Bonjour,
 
           merci de respecter les règles du forum en éditant le post et en balisant le code via l'icône appropriée …
  

n°2235362
vb_user
Le partage de l'info...
Posté le 11-08-2014 à 08:21:15  profilanswer
 

Bonjour,
 
Est-ce bon ainsi?

n°2235365
patrice337​40
Avec la réponse, c'est facile.
Posté le 11-08-2014 à 09:15:05  profilanswer
 

Bonjour,
 
Lorsque tu écris :

    Set RechCel = .FindNext(RechCel)
Loop While Not RechCel Is Nothing And RechCel.Address <> PremCell


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)
    If RechCel Is Nothing Then Exit Do
Loop While RechCel.Address <> PremCell


               


---------------
Cordialement, Patrice
n°2235373
vb_user
Le partage de l'info...
Posté le 11-08-2014 à 12:06:36  profilanswer
 

Merci patrice.
 
Avec ce code  
     

Code :
  1. Set RechCel = .Find("BLABLA", , xlValues)
  2.         If Not RechCel Is Nothing Then
  3.             PremCell = RechCel.Address
  4.             Do
  5.                 RechCel.Value = "BLA"
  6.                 Set RechCel = .FindNext(RechCel)
  7.                 If RechCel Is Nothing Then
  8.                     Exit Do
  9.                 End If
  10.             Loop While RechCel.Address <> PremCell
  11.         End If


 
C'est fonctionnel.
 
Bonne journée


Message édité par vb_user le 12-08-2014 à 10:44:27
n°2235379
patrice337​40
Avec la réponse, c'est facile.
Posté le 11-08-2014 à 13:47:01  profilanswer
 

Re,
 
Lorsqu'il n'y a qu'un seule instruction dans la condition, au lieu de :

   If RechCel Is Nothing Then
        Exit Do
    End If


Tu peux ecrite sur une seule ligne :

   If RechCel Is Nothing Then Exit Do


---------------
Cordialement, Patrice
n°2235381
vb_user
Le partage de l'info...
Posté le 11-08-2014 à 14:30:43  profilanswer
 

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 :
  1. Select ...
  2.   Case Else
  3.        If ValStopRech = "" Then
  4.           ValStopRech = RechCel.Address
  5.        End If
  6. End Select


 
Le bug survient ici :

Code :
  1. Set RechCel = .FindNext(RechCel)
  2.     If RechCel Is Nothing Then
  3.        Exit Do
  4.     ElseIf RechCel.Address < ValStopRech Then
  5.                     Exit Do
  6.     End If


 
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 :
  1. decoup = Split(ValStopRech2, "$" )
  2. decoup2 = Split(RechCel.Address, "$" )
  3. ElseIf decoup2(1) < decoup(1) Then
  4.    Exit Do
  5. End If


Pourquoi ce bug?
 
Merci pour vos réponses.


Message édité par vb_user le 12-08-2014 à 10:45:17
n°2235394
patrice337​40
Avec la réponse, c'est facile.
Posté le 11-08-2014 à 17:27:42  profilanswer
 

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 !


Message édité par patrice33740 le 11-08-2014 à 17:36:22

---------------
Cordialement, Patrice
n°2235401
vb_user
Le partage de l'info...
Posté le 11-08-2014 à 22:27:08  profilanswer
 

J'ai suivi ta solution mais j'ai du faire des modification pour que ça marche :

Code :
  1. Case Else
  2.                                 If ValStopRech = 0 Then
  3.                                     ValStopRech = RechCel.Row
  4.                                 End If
  5.                                
  6.                         End Select
  7.                 End Select
  8.                
  9.                 Set RechCel = .FindNext(RechCel)
  10.                 If RechCel Is Nothing Or (RechCel.Row < ValStopRech + 1) Then Exit Do.


Merci.


Message édité par vb_user le 12-08-2014 à 10:45:38
n°2235408
vb_user
Le partage de l'info...
Posté le 11-08-2014 à 22:42:26  profilanswer
 

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 :
  1. Private Sub ProcCbOwner(LaIci As String)
  2.     Dim LI as String
  3.    
  4.     If Not RechCel.Cells.Find("1", , xlValues) Is Nothing Then
  5.         LI = "la"
  6.     Else
  7.         LI = "ici"
  8.     End If
  9.    
  10.     LaIci= LI


 
Dans mon script principale
       

Code :
  1. Set RechCel = .Find("BLABLA", , xlValues)
  2.         If Not RechCel Is Nothing Then
  3.             PremCell = RechCel.Address
  4.             Do
  5.                 ProcCbOwner LaIci
  6.                 ValCel = RechCel.Value
  7.                 ValCelTab = Split(ValCel, " " )
  8.                 ValDecoup = UBound(ValCelTab)
  9.                
  10.                 Select Case ValCelTab(3) & " " & ValCelTab(4)
  11.                     Case "RO RO"
  12.                         RechCel.Value = LaIci & "LALO " & ValCelTab(ValDecoup - 1) & _
  13.                             " " & ValCelTab(ValDecoup)
  14.                     Case "RI RI"
  15.                         RechCel.Value = LaIci & "LOLI " & ValCelTab(ValDecoup - 1) & _
  16.                             " " & ValCelTab(ValDecoup)
  17.                     Case Else
  18.                         Select Case ValCelTab(3)
  19.                             Case "BLU"
  20.                                 RechCel.Value = LaIci & "LOLU " & ValCelTab(ValDecoup - 1) & _
  21.                                 " " & ValCelTab(ValDecoup)
  22.                             Case "BLO"
  23.                                 RechCel.Value = LaIci & "LELI " & ValCelTab(ValDecoup - 1) & _
  24.                                 " " & ValCelTab(ValDecoup)
  25.                              Case Else
  26.                                 If ValStopRechCarte = 0 Then
  27.                                     ValStopRechCarte = RechCel.Row
  28.                                 End If
  29.                                
  30.                         End Select
  31.                 End Select


 
 
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.


Message édité par vb_user le 12-08-2014 à 10:46:20
mood
Publicité
Posté le 11-08-2014 à 22:42:26  profilanswer
 

n°2235431
Marc L
Posté le 12-08-2014 à 09:31:20  profilanswer
 

 
           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é ! …
 

n°2235437
vb_user
Le partage de l'info...
Posté le 12-08-2014 à 10:10:39  profilanswer
 

;) 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.

n°2235438
vb_user
Le partage de l'info...
Posté le 12-08-2014 à 10:14:00  profilanswer
 

Du coup, j'ai tout balisé. Peux-tu m'aider maintenant? ;)

n°2235439
Marc L
Posté le 12-08-2014 à 10:21:57  profilanswer
 

 
           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 ‼  :sarcastic:  
 
           Bref la recherche doit être effectuée avec le paramètre "BLABLA*" …
 

n°2235442
vb_user
Le partage de l'info...
Posté le 12-08-2014 à 10:43:21  profilanswer
 

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++.


Message édité par vb_user le 12-08-2014 à 10:48:34
n°2235444
vb_user
Le partage de l'info...
Posté le 12-08-2014 à 12:23:39  profilanswer
 

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.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [RESOLU ] [VBA] ERREUR 91 - FINDNEXT

 

Sujets relatifs
[RESOLU] [VBA] - EXCEL 2010 - Optimisation de codeHELP pour comparaison de cellules VBA
Help SVP "erreur d'exécution 13 incompatibilité de type, vba"VBA - creer tableau dans word
L'indice n'appartient pas à la sélection, VBA ExcelDemande de réunion VBA Excel/Outlook
Liens Hypertexte dans Listbox VBAHelp SVP "sous-répertoires VBA"
[PDO] erreur avec fetchColumnProtection feuille VBA sauf userform
Plus de sujets relatifs à : [RESOLU ] [VBA] ERREUR 91 - FINDNEXT


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR