IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Recherche dans toutes les feuilles


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 116
    Points : 56
    Points
    56
    Par défaut Recherche dans toutes les feuilles
    Bonjour,

    Après une journée d'essais et de recherche je n'arrive pas à faire recherche ma macro dans tous les classeurs

    voici le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    Private Sub CommandButton5_Click()
    Selection.AutoFilter
     
              Dim plage As Range, Cell As Range
            Dim FL1 As Worksheet, critere As String
            Set FL1 = Worksheets("Feuil1","Feuil2")
     
            Set c = Cells.Find(What:=TextBox10.Value, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
            xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
     
     
          On Error GoTo Erreur
            If c = "" Then
            UserForm1.Hide
            End If
            c.Activate 'active la cellule trouvée
     
     
            Stock = ActiveCell.Offset(0, 2).Value 'décale pour trouver le stck
            TextBox3.Value = Stock
     
    Erreur:
     
    End Sub
    Merci pour vos aides

  2. #2
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    Bonjour,

    Pourquoi ne pas parcourir toutes test feuilles et appliquer ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim s As Worksheet
     
    For Each s In Sheets
        ' Ici le code sur chaque feuille
    Next

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 116
    Points : 56
    Points
    56
    Par défaut
    Marche pas il me fait une erreur sur la deuxieme feuil

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    Private Sub CommandButton1_Click()
    Dim s As Worksheet
     
    For Each s In Sheets
        ' Ici le code sur chaque feuille
             Dim FL1 As Worksheet, critere As String
            Set FL1 = Worksheets("Feuil1")
     
     
            Set c = Cells.Find(What:=TextBox1.Value, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
            xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
     
     
            On Error GoTo erreur
            If c = "" Then
            UserForm1.Hide
            End If
            c.Activate 'active la cellule trouvée
     
     
            Stock = ActiveCell.Offset(0, 0).Value 'décale pour trouver le stck
            TextBox2.Value = Stock
     
            Dim FL1 As Worksheet, critere As String
            Set FL1 = Worksheets("Feuil2")
     
     
            Set c = Cells.Find(What:=TextBox1.Value, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
            xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
     
     
     
            On Error GoTo erreur
            If c = "" Then
            UserForm1.Hide
            End If
            c.Activate 'active la cellule trouvée
     
     
            Stock = ActiveCell.Offset(0, 0).Value 'décale pour trouver le stck
            TextBox2.Value = Stock
    Next
     
    erreur:
     
    End Sub

  4. #4
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    Je ne suis pas sur que tu ai compris l'utilisation de la boucle, dans mon exemple on parcourt les feuilles avec s.name qui prend la valeur Feuil1 puis Feuil2...

    Concernant ton erreur, as-tu utilisé le deboguer et vu sur quelle ligne tu as le plantage, ça pourrai aider.

    Tu dis.

    Nb : offset(0,0) => pas de décalage ???

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 116
    Points : 56
    Points
    56
    Par défaut
    Il n'y a pas de décalage c'est pour simplifier la macro

    voila ma nouvelle macro

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    Private Sub CommandButton1_Click()
    Dim s As Worksheet
     
    For Each s In Sheets
        ' Ici le code sur chaque feuille
             Dim FL1 As Worksheet, critere As String
            Set FL1 = Worksheets("Feuil1")
     
     
            Set c = Cells.Find(What:=TextBox1.Value, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
            xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
     
     
            On Error GoTo erreur
            If c = "" Then
            UserForm1.Hide
            End If
            c.Activate 'active la cellule trouvée
     
     
            Stock = ActiveCell.Offset(0, 0).Value 'décale pour trouver le stck
            TextBox2.Value = Stock
     
     
            Set FL1 = Worksheets("Feuil2")
     
     
            Set c = Cells.Find(What:=TextBox1.Value, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
            xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
     
     
     
            On Error GoTo erreur
            If c = "" Then
            UserForm1.Hide
            End If
            c.Activate 'active la cellule trouvée
     
     
            Stock = ActiveCell.Offset(0, 0).Value 'décale pour trouver le stck
            TextBox2.Value = Stock
    Next
     
    erreur:
     
    End Sub
    Mais il ne cherche pas dans la feuil2

  6. #6
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    Ton code fonctionne-t-il pour une seule feuille ?

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 116
    Points : 56
    Points
    56
    Par défaut
    oui le code ci joint fonctionne sur la feuil1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    Private Sub CommandButton1_Click()
    Dim s As Worksheet
     
    For Each s In Sheets
        ' Ici le code sur chaque feuille
             Dim FL1 As Worksheet, critere As String
            Set FL1 = Worksheets("feuil1")
     
            Set c = Cells.Find(What:=TextBox1.Value, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
            xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
     
     
            On Error GoTo erreur
            If c = "" Then
            UserForm1.Hide
            End If
            c.Activate 'active la cellule trouvée
     
     
            Stock = ActiveCell.Offset(0, 0).Value 'décale pour trouver le stck
            TextBox2.Value = Stock
     
     
    Next
     
    erreur:
     
    End Sub

  8. #8
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Bien que j'ai compris le problème, tu auras la réponse quand tu auras précisé l'erreur et indiqué la ligne sur laquelle elle survient
    Zut, au 80ème message, tu devrais avoir appris ça, non ?
    Et ça aurait évité à aalex_38 de continuer à te poser des questions.
    Allez, dis-nous "tout ça" qu'on déplace cette ligne (Dim FL1 As Worksheet, critere As String) làouifo
    Une fois ça fait on regardera plus loin...

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 116
    Points : 56
    Points
    56
    Par défaut
    Voila ou ce trouve l'erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    Private Sub CommandButton1_Click()
    Dim s As Worksheet
     
    For Each s In Sheets
        ' Ici le code sur chaque feuille
             Dim FL1 As Worksheet, critere As String
            Set FL1 = Worksheets("Feuil1")
     
     
            Set c = Cells.Find(What:=TextBox1.Value, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
            xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
     
     
            On Error GoTo erreur
            If c = "" Then
            UserForm1.Hide
            End If
            c.Activate 'active la cellule trouvée
     
     
            Stock = ActiveCell.Offset(0, 0).Value 'décale pour trouver le stck
            TextBox2.Value = Stock
     
            Dim FL1 As Worksheet, critere As String ' ICI L ERREUR
            Set FL1 = Worksheets("Feuil2")
     
     
            Set c = Cells.Find(What:=TextBox1.Value, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
            xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
     
     
     
            On Error GoTo erreur
            If c = "" Then
            UserForm1.Hide
            End If
            c.Activate 'active la cellule trouvée
     
     
            Stock = ActiveCell.Offset(0, 0).Value 'décale pour trouver le stck
            TextBox2.Value = Stock
    Next
     
    erreur:
     
    End Sub
    ouskel'n'or tu pourrais être un peu plus sympa dans tes réponses, pas la peine d'envoyer des piques à chaque fois. Si quand on ne comprends pas queqlues choses on a pas le droit de poser de questions cela ne sert a rien de faire un forum.

    ouskel'n'or cordialement,

  10. #10
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Citation Envoyé par wabo67
    ouskel'n'or tu pourrais être un peu plus sympa dans tes réponses
    C'est bien la première fois qu'on me dit ça. Aujourd'hui est un jour nouveau
    Blague dans le coin, tu ne dis toujours pas sur quelle ligne tu as l'erreur - ligne sur laquelle ton code se plante - ni le message d'erreur que tu as.
    Désolé mais imagine que je me trompe dans ma réponse, c'est kiki aura l'air ridicule
    Bon, déclare FL1 et critère en dehors de la boucle. Et laisse Set FL1 = ... là où il est
    Je ne suis pas allé plus loin car déjà là tu as un problème
    Bon app'
    A+

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 116
    Points : 56
    Points
    56
    Par défaut
    Voila j'ai déclaré le FL1 en dehors de la boucle
    Plus d'erreur
    Par contre il me cherche plus dans la feuille 2

    Voici le nouveau code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    Private Sub CommandButton1_Click()
    Dim s As Worksheet
     Dim FL1 As Worksheet, critere As String
     
    For Each s In Sheets
        ' Ici le code sur chaque feuille
     
            Set FL1 = Worksheets("Feuil1")
     
     
            Set c = Cells.Find(What:=TextBox1.Value, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
            xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
     
     
            On Error GoTo erreur
            If c = "" Then
            UserForm1.Hide
            End If
            c.Activate 'active la cellule trouvée
     
     
            Stock = ActiveCell.Offset(0, 0).Value 'décale pour trouver le stck
            TextBox2.Value = Stock
     
            Set FL1 = Worksheets("Feuil2")
     
     
            Set c = Cells.Find(What:=TextBox1.Value, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
            xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
     
     
     
            On Error GoTo erreur
            If c = "" Then
            UserForm1.Hide
            End If
            c.Activate 'active la cellule trouvée
     
     
            Stock = ActiveCell.Offset(0, 0).Value 'décale pour trouver le stck
            TextBox2.Value = Stock
    Next
     
    erreur:
     
    End Sub
    Merci bon App' a toi aussi

  12. #12
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Effectivement, quand tu mets "Set FL1 = Worksheets("Feuil1")" tu crées une instance de la même feuille. Heureusement, ça risquerait de fonctionner si tu mettais
    Bref, tu n'as pas besoin de cette ligne...
    Heureusement tu peux la supprimer...
    Malheureusement ça ne fonctionnera toujours pas
    Si tu n'utilises pas FL1, FL1 ne te sert à rien
    Heureusement, si on met
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            Set c = s.Cells.Find(What:=TextBox1.Value, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
            xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
    Pour la suite, il me semble t'avoir déjà répondu "ailleurs". Remplace les sept lignes suivantes
    On Error GoTo erreur
    If c = "" Then
    UserForm1.Hide
    End If
    c.Activate 'active la cellule trouvée
    Stock = ActiveCell.Offset(0, 0).Value 'décale pour trouver le stck
    TextBox2.Value = Stock
    Par ces deux (Avec les deux lignes suivantes tu obtiens le même résultat)
    là je t'ai déjà demandé, veux-tu décharger l'userform (Unload Me) ou simplement le masquer (Me.hide) ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            If c Is Nothing Then UserForm1.Hide
            TextBox2.Value = c
    Et si ton stock est sur une autre colonne de la même ligne, tu mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            TextBox2.Value = c.Offset(0, décalage en nbre de colonnes)
    Et, si nous avons bien tous les éléments, ça devrait fonctionner
    Bon courage

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 116
    Points : 56
    Points
    56
    Par défaut
    Je suis désolé de vous dérange une nouvelle fois.
    Votre code fonctionne toujours pour la feuille1 mais pour pour les autres
    Voici mon code en entier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Private Sub CommandButton1_Click()
     
    Dim s As Worksheet
    For Each s In Sheets
     
            Set c = s.Cells.Find(What:=TextBox1.Value, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
            xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
     
            On Error GoTo erreur
            TextBox2.Value = c
     
    Next
    erreur:
     
    End Sub
    Merci pour vos aides

  14. #14
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Oui, tu utilises activecell qui s'applique à la feuille courante.
    Dans la mesure où tu cherches dans toute la feuille et pas seulement dans la colonne ou la ligne de la cellule active, tu peux limiter le code de recherche à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            Set c = s.Cells.Find(What:=TextBox1.Value, LookIn:=xlValues, LookAt:=xlWhole)
    xlwhole si tu veux que la donnée cherchée corresponde à la totalité de la cellule. Sinon c'est xlpart.
    Ensuite, remplace tes deux lignes
    On Error GoTo erreur
    TextBox2.Value = c
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
             If not c is nothing then Texbox2.value
    Tu n'as pas besoin de gestion d'erreur.
    Enfin, déclare c as range.
    Bonne journée

Discussions similaires

  1. Recherche dans toutes les feuilles et cellules d'un classeur
    Par declc dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 29/01/2015, 08h15
  2. [XL-2003] Recherche dans toutes les feuilles
    Par Vadorblanc dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/11/2010, 19h55
  3. Réponses: 4
    Dernier message: 08/04/2009, 20h44
  4. Rechercher dans toutes les colonnes d'un datatable
    Par timotep dans le forum Windows Forms
    Réponses: 3
    Dernier message: 15/11/2007, 17h21
  5. [VBA-E] Supprimer le cont de cellules dans toutes les feuill
    Par Tartenpion dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/03/2006, 10h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo