Find, sur toutes les feuilles du classeur

Résolu/Fermé
LeDebutantVBAFou - 4 mars 2019 à 14:53
 LeDebutantVBAFou - 5 mars 2019 à 11:55
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!!!!

4 réponses

ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
Modifié le 4 mars 2019 à 15:25
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
4 mars 2019 à 18:30
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
4 mars 2019 à 18:43
          • 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 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
4 mars 2019 à 20:23
Le principe fonctionne bien
https://www.cjoint.com/c/ICetwKGkKNB

Cdlmnt
0
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 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 211
4 mars 2019 à 23:27
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
5 mars 2019 à 08:32
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 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 211
Modifié le 5 mars 2019 à 10:15
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
5 mars 2019 à 10:33
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 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
5 mars 2019 à 11:26
Re,

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

Cdlmnt
0
LeDebutantVBAFou
5 mars 2019 à 11:55
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