Find, sur toutes les feuilles du classeur

Résolu
LeDebutantVBAFou -  
 LeDebutantVBAFou -
Bonjour à tous,

Mon projet avance, doucement, mais avance! Me voilà face à un nouveau problème!
Grâce à mes recherches sur le forum j'ai réussi à faire un code qui me convient presque!

J'essaye d'apporter des modifications à un tableau (aux lignes du tableaux) via un userform.
Pour cela j'effectue la recherche sur la REF qui est en colonne A, ensuite je rempli les combobox et textbox du userform avec les valeurs de la ligne trouvée.

Ca fonctionne, mais la recherche ne se fait uniquement si la feuille active, j'aimerais que la recherche se fasse sur toutes les feuilles du classeur.

J'ai trouvé plusieurs piste sur les forums, mais impossible de l'adapter à mon cas.

Voici le code que j'utilise pour le moment.

Private Sub TextBox1_Afterupdate() 'Faire la recherche par REF
Dim ligne As Long
Set ws = ActiveSheet

Dim REF As Range 'Vérifier que la REF existe
Set REF = ([A2:A1048576].Find(what:=TextBox1.Value, LookAt:=xlWhole))
If REF Is Nothing Then
MsgBox "La REF n'existe pas"
TextBox1 = ""
Exit Sub
End If
ligne = ([A2:A1048576].Find(TextBox1.Value).Row) 'Trouve la Ligne ou se trouve la REF


TextBox2 = ws.Cells(ligne, 4)
TextBox3 = ws.Cells(ligne, 6)
TextBox4 = ws.Cells(ligne, 7)
TextBox5 = ws.Cells(ligne, 9)
TextBox6 = ws.Cells(ligne, 13)
TextBox7 = ws.Cells(ligne, 8)
ComboBox1 = ws.Cells(ligne, 2)
ComboBox2 = ws.Cells(ligne, 3)
ComboBox3 = ws.Cells(ligne, 5)
ComboBox4 = ws.Cells(ligne, 10)
ComboBox5 = ws.Cells(ligne, 11)
ComboBox6 = ws.Cells(ligne, 12)
End Sub


Merci d'avance pour l'aide!!!!
A voir également:

4 réponses

ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 
Bonjour

Essaies ceci
Private Sub TextBox1_Afterupdate() 'Faire la recherche par REF
Dim ligne As Long, ws As Worksheet
Dim REF As Object 'Vérifier que la REF existe
For Each ws In ActiveWorkbook.Sheets
  Set REF = ws.[A2:A1048576].Find(what:=TextBox1.Value, LookAt:=xlWhole)
  If REF Is Nothing Then
    MsgBox "La REF n'existe pas"
    TextBox1 = ""
    Exit Sub
  End If
  ligne = REF.Row 'Trouve la Ligne ou se trouve la REF
  TextBox2 = ws.Cells(ligne, 4)
  TextBox3 = ws.Cells(ligne, 6)
  TextBox4 = ws.Cells(ligne, 7)
  TextBox5 = ws.Cells(ligne, 9)
  TextBox6 = ws.Cells(ligne, 13)
  TextBox7 = ws.Cells(ligne, 8)
  ComboBox1 = ws.Cells(ligne, 2)
  ComboBox2 = ws.Cells(ligne, 3)
  ComboBox3 = ws.Cells(ligne, 5)
  ComboBox4 = ws.Cells(ligne, 10)
  ComboBox5 = ws.Cells(ligne, 11)
  ComboBox6 = ws.Cells(ligne, 12)
  Exit for ' REF a été trouvé, on quitte
Next ws
End Sub

Cdlmnt
0
LeDebutantVBAFou
 
Bonjour ccm81,

Tout d'abord merci pour ton aide! Tu m'as déjà aider à surmonter un soucis, donc vraiment un grand merci.

Pour ta solution cette fois ça ne fonctionne pas au premier coup!

Ça m'indique que la référence n'existe pas. Autrement dit, REF is nothing dans tout les cas, même quand elle existe.

J'ai essayé sur un fichier vierge avec le minimum nécessaire pour voir si cela venait d'un détail de mon projet, mais non, toujours la même réponse.

C'est d'ailleurs déjà le problème que j'avais lorsque j'ai essayé de comprendre via les réponses dans le forum, je m'étais dis que je n'arrivais pas à appliquer le code.

Aurais-tu une idée d'ou serait l'erreur?

Cordialement.
LeDebutantVBAFou qui en sait un peu plus à chaque fois grâce à vous!
0
LeDebutantVBAFou
 
          • Mise à jour!


Finalement, sur un fichier "vierge" ça fonctionne mais uniquement sur la première page, les REF que je met dans les autres pages ne sont pas trouvées.

Dans mon projet, la colonne à n'a aucun format spécial. Format Standard.

La méthode find fonctionne quand je fais la recherche uniquement sur une feuille
0
ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 
Le principe fonctionne bien
https://www.cjoint.com/c/ICetwKGkKNB

Cdlmnt
0
LeDebutantVBAFou
 
Je suis certainement vraiment mauvais, je n'arrive pas à appliquer ta solution.
Un fichier ci-joint plus fidèle à ce que je recherche.
Si tu essayes de trouver une RÉF qui n'est pas sur la première page ça ne fonctionne pas.

https://www.cjoint.com/c/ICeu5ypDBX1
0
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 276
 
Bonjour,

tes ref sont numériques et un Textbox, comme son nom l'indique, te retourne une chaine.
Il faut donc la convertir :
Set REF = ws.[A2:A1048576].Find(what:=cdbl(TextBox1.Value), LookAt:=xlWhole)

eric
0
LeDebutantVBAFou
 
Bonjour,
J'ai appliqué votre code mais malheureusement ça ne résout pas le problème.
La recherche ne se fait que sur la première page.
J'ai remarque que même si je lance depuis la 2ème page la recherche se fait également sur la première. Du coup je cherche un peu de ce coté la!

Merci pour l'aide en tout cas!!
0
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 276
 
Bonjour,

Comment ça, ça ne résoud pas ton pb ?
Ta question était Ça m'indique que la référence n'existe pas. Autrement dit, REF is nothing dans tout les cas, même quand elle existe.
Ce pb est-il résolu ?
Maintenant si tu as 2 types de ref (textes ou numériques) il faut que tu fasses 2 find pour pouvoir dire que la ref n'existe pas.

J'ai remarque que même si je lance depuis la 2ème page la recherche se fait également sur la première.
C'est normal puisque c'est ce que tu as demandé :
j'aimerais que la recherche se fasse sur toutes les feuilles du classeur.
Ce que ccm t'a fait
eric
0
LeDebutantVBAFou
 
Bonjour erric,
Merci pour ton intérêt!
08:32 j'étais pas encore bien réveillé il faut croire je me suis mal exprimé. J'ai dis également sur la première feuille mais je voulais dire UNIQUEMENT.
La recherche se fait bien sur la première mais pas du tout sur les autres feuilles. REF is nothing.

Dans le fichier ou je fais le test toutes les REF sont numériques.

Un exemple ci-joint: https://www.cjoint.com/c/ICfjGvFCs1d

Merci encore.
0
ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 
Re,

Un autre essai
https://www.cjoint.com/c/ICfkAkqqjCB

Cdlmnt
0
LeDebutantVBAFou
 
Et bingo!!! Ca fonctionne!!
Je vais check ton code pour le comprendre et l'adapter à mon projet dès que j'ai un moment!!
Un grand Merci!!
0