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

4 réponses

  1. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
    1. 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
    2. 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
  2. ccm81 Messages postés 11033 Statut Membre 2 434
     
    Le principe fonctionne bien
    https://www.cjoint.com/c/ICetwKGkKNB

    Cdlmnt
    0
    1. 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
  3. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
    1. 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
    2. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      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
    3. 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
  4. ccm81 Messages postés 11033 Statut Membre 2 434
     
    Re,

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

    Cdlmnt
    0
    1. 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