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 sur différents onglets en fonction d'une valeur de cellule


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingé matériaux
    Inscrit en
    Mai 2019
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingé matériaux

    Informations forums :
    Inscription : Mai 2019
    Messages : 47
    Par défaut Recherche sur différents onglets en fonction d'une valeur de cellule
    Bonjour à tous,

    je viens encore vous embêter avec mes histoires de recherches...

    J'ai tenter d'adapter comme je peux une maccro que l'on m'a aider à construire ici et de corriger au fur et à mesure des erreurs mais la je sèche...

    J'ai une erreur "Bloc If sans end If"

    Je pense que je vais en faire pleurer plus d'un avec mon code et j'en suis sincèrement désolé , l'idée de ce code est aussi qu'il soit très facilement adaptable pour queulqu'un qui passerait derrière moi (c'est pas gagné...):

    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
    47
    Sub Tri()
    ' Ici on supprime les lignes où il y a des résultats de recherche
      Dim derlig As Long
      derlig = Sheets("Recherche auto").Range("A" & Rows.Count).End(xlUp).Row
      Sheets("Recherche auto").Range("A15:AZ" & derlig).ClearContents
      Dim w As Worksheet
    ' Ici on définit la valeur L qui permet de dire où les résultats de recherche vont être écrit ( pour L=10 on écrit à partir de la ligne 10 par exemple)
      Dim derlig2 As Long
      Dim L As Long
      Dim flag As Boolean
      L = 15
    ' On définit les onglets dans lesquelles la maccro doit chercher. ATTENTION A LA FORME D'ECRITURE
     
    If Worksheets("Recherche auto").Range("AG4") = "Non Soudée" Then
      For Each w In ThisWorkbook.Worksheets
        Select Case w.Name
          Case "Tôles planes": flag = True
          Case Else: flag = False
        End Select
     
    Next
     
    If Worksheets("Recherche auto").Range("AG4") = "Soudée" Then
      For Each w In ThisWorkbook.Worksheets
        Select Case w.Name
          Case "Tôles soudées": flag = True
          Case Else: flag = False
        End Select
     
    Next
     
    If Range("AG4") = "" Then
      For Each w In ThisWorkbook.Worksheets
        Select Case w.Name
          Case "Tôles soudées": flag = True
          Case "Tôles planes": flag = True
          Case Else: flag = False
        End Select
     
    ' Là c'est pour le tri, on théorie il n'y aura que le critère w.range qui devra être changé, si quelqu'un écrit plus de 2000 lignes par exemple et que l'on souhaite chercher sur 2200 lignes: w.Range("A2:Q2200")
        If flag Then
           w.Range("A2:AE1200").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Sheets("Recherche auto").Range("A2:AE4"), CopyToRange:=Sheets("Recherche auto").Range("A" & L), Unique:=False
        L = Sheets("Recherche auto").Range("A" & Rows.Count).End(xlUp).Row + 1
        End If
      Next w
      Sheets("Recherche auto").Select
    End Sub
    SI vous savez m'aider je vous en serez très reconnaissant.

    Encore une fois désolé si c'est vraiment pas beau comme code.

    Bonne journée,
    Bastien

  2. #2
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Bonjour,

    Essayez ceci
    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
    47
    48
    49
    Sub Tri()
        Dim derlig As Long
        Dim w As Worksheet
        Dim derlig2 As Long
        Dim L As Long
        Dim flag As Boolean
        ' Ici on définit la valeur L qui permet de dire où les résultats de recherche vont être écrit ( pour L=10 on écrit à partir de la ligne 10 par exemple)
        L = 15
     
        ' Ici on supprime les lignes où il y a des résultats de recherche
        Application.ScreenUpdating = False
        derlig = Sheets("Recherche auto").Range("A" & Rows.Count).End(xlUp).Row
        Sheets("Recherche auto").Range("A15:AZ" & derlig).ClearContents
     
        ' On définit les onglets dans lesquelles la maccro doit chercher. ATTENTION A LA FORME D'ECRITURE
        If Worksheets("Recherche auto").Range("AG4") = "Non Soudée" Then
            For Each w In ThisWorkbook.Worksheets
                Select Case w.Name
                    Case "Tôles planes": flag = True
                    Case Else: flag = False
                End Select
            Next
     
        ElseIf Worksheets("Recherche auto").Range("AG4") = "Soudée" Then
            For Each w In ThisWorkbook.Worksheets
                Select Case w.Name
                    Case "Tôles soudées": flag = True
                    Case Else: flag = False
                End Select
            Next
     
        ElseIf Range("AG4") = "" Then
            For Each w In ThisWorkbook.Worksheets
                Select Case w.Name
                    Case "Tôles soudées": flag = True
                    Case "Tôles planes": flag = True
                    Case Else: flag = False
                End Select
           Next w
        End If
     
     
                ' Là c'est pour le tri, on théorie il n'y aura que le critère w.range qui devra être changé, si quelqu'un écrit plus de 2000 lignes par exemple et que l'on souhaite chercher sur 2200 lignes: w.Range("A2:Q2200")
                If flag Then
                    w.Range("A2:AE1200").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Sheets("Recherche auto").Range("A2:AE4"), CopyToRange:=Sheets("Recherche auto").Range("A" & L), Unique:=False
                    L = Sheets("Recherche auto").Range("A" & Rows.Count).End(xlUp).Row + 1
                End If
         Sheets("Recherche auto").Select
    End Sub

    Cdlt

  3. #3
    Membre averti
    Homme Profil pro
    Ingé matériaux
    Inscrit en
    Mai 2019
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingé matériaux

    Informations forums :
    Inscription : Mai 2019
    Messages : 47
    Par défaut
    Ok bon...

    Ca fonctionne

    J'ai un peu l'impression que j'avais capté comment faire mais qu'il me manquait juste un détail ...

    Bref merci beaucoup !

    Autre question pendant que j'y suis:

    Quand la recherche se fait sur un autre onglet j'ai tous les critères qui se réaffichent au milieu des résultats. Est-ce qu'il y a un moyen de supprimer ça ?


    Encore merci,
    Bastien

  4. #4
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Quand la recherche se fait sur un autre onglet j'ai tous les critères qui se réaffichent au milieu des résultats. Est-ce qu'il y a un moyen de supprimer ça ?

    Dans votre macro, vous ne faites allusion qu'à la feuille "Recherche auto", Quelles sont les autres feuilles?

  5. #5
    Membre averti
    Homme Profil pro
    Ingé matériaux
    Inscrit en
    Mai 2019
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingé matériaux

    Informations forums :
    Inscription : Mai 2019
    Messages : 47
    Par défaut
    Citation Envoyé par ARTURO83 Voir le message
    Quand la recherche se fait sur un autre onglet j'ai tous les critères qui se réaffichent au milieu des résultats. Est-ce qu'il y a un moyen de supprimer ça ?

    Dans votre macro, vous ne faites allusion qu'à la feuille "Recherche auto", Quelles sont les autres feuilles?
    "Tôles planes" et "Tôles soudées"

    Je ne sais pas si j'ai été clair cela dit ^^'

    Edit: J'ai parlé trop vite... Quand j'écris "Soudée" ou "Non soudée" dans la case AG4, ca ne fonctionne pas, je n'ai pas de message d'erreur mais ca ne fonctionne pas ... Désolé.

    Bonne journée,
    bastien

  6. #6
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Je vois bien qu'il y a quelque chose de pas clair
    D'après ce que je crois comprendre, il y a 3 feuilles (3 onglets)
    "Recherche auto", "Tôles planes", "Tôles soudées"
    vous testez les cellules AG4 de chaque feuille pour voir le contenu, et suivant le cas (flag=true), vous faites un filtre avancé.

    Tout ça, c'est bien flou, il faudrait la description précise de ce que doit faire la macro.

  7. #7
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    si tu es sur d'avoir ces deux sheets pourquoi faire une boucle sur w

    ton principe c'est :
    si la valeur est "soudé" ou "non soudé" ou vide les deux sheets(.Range("A2:AE1200")) avancedfilter sont copié

    donc si j'ai bien compris ta demande, c'est tellement plus simple dans un select case
    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
    Sub Tri()
    ' Ici on supprime les lignes où il y a des résultats de recherche
        Dim derlig As Long, w As Worksheet, derlig2 As Long, L As Long, flag As Boolean, valeur
         derlig = Sheets("Recherche auto").Range("A" & Rows.Count).End(xlUp).Row
        Sheets("Recherche auto").Range("A15:AZ" & derlig).ClearContents
        L = 15 ' Ici on définit la valeur L qui permet de dire où les résultats de recherche vont être écrit ( pour L=10 on écrit à partir de la ligne 10 par exemple)
     
        ' On définit les onglets dans lesquelles la maccro doit chercher. ATTENTION A LA FORME D'ECRITURE
        valeur = Worksheets("Recherche auto").Range("AG4").Value
        Select Case valeur
        Case "Non Soudée", "Soudée", vbnullstring
            For Each w In ThisWorkbook.Worksheets
                Select Case w.Name
                Case "Tôles planes", "Tôles soudées": flag = True
                Case Else: flag = False
                End Select
                ' Là c'est pour le tri, on théorie il n'y aura que le critère w.range qui devra être changé, si quelqu'un écrit plus de 2000 lignes par exemple et que l'on souhaite chercher sur 2200 lignes: w.Range("A2:Q2200")
                If flag Then
                    w.Range("A2:AE1200").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Sheets("Recherche auto").Range("A2:AE4"), CopyToRange:=Sheets("Recherche auto").Range("A" & L), Unique:=False
                    L = Sheets("Recherche auto").Range("A" & Rows.Count).End(xlUp).Row + 1
                End If
            Next w
        End Select
        Sheets("Recherche auto").Select
    End Sub

    et en variabilisant le sheets ("auto") ou même les range ca simplifierait la lecture du code
    mais déjà ca doit être plus clair la non ?
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  8. #8
    Membre expérimenté
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 254
    Par défaut
    Bonjour,

    Je vais prendre l'exemple suivant : Tes deux premières boucles for each

    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
    If Worksheets("Recherche auto").Range("AG4") = "Non Soudée" Then
      For Each w In ThisWorkbook.Worksheets
        Select Case w.Name
          Case "Tôles planes": flag = True
          Case Else: flag = False
        End Select
     
    Next
     
    If Worksheets("Recherche auto").Range("AG4") = "Soudée" Then
      For Each w In ThisWorkbook.Worksheets
        Select Case w.Name
          Case "Tôles soudées": flag = True
          Case Else: flag = False
        End Select
     
    Next
    Quand tu crées un IF, il te faut forcément un END IF avant d'en démarrer un nouveau. Ici en l’occurrence, tu as un IF, puis ta boucle et tu réenchaînes sur un IF.

    Sauf que si tu veux tester plusieurs conditions, il faut que tu respectes la syntaxe suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    IF 'ta première condition
    elseif 'Ta seconde condition
    elseif 'Ta nième condition
    else: 'Ta porte de sortie en cas de non respect des conditions que tu souhaites
     
    END IF
    Donc pour que ce soit correct :
    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
    47
    48
    Sub Tri()
    ' Ici on supprime les lignes où il y a des résultats de recherche
      Dim derlig As Long
      derlig = Sheets("Recherche auto").Range("A" & Rows.Count).End(xlUp).Row
      Sheets("Recherche auto").Range("A15:AZ" & derlig).ClearContents
      Dim w As Worksheet
    ' Ici on définit la valeur L qui permet de dire où les résultats de recherche vont être écrit ( pour L=10 on écrit à partir de la ligne 10 par exemple)
      Dim derlig2 As Long
      Dim L As Long
      Dim flag As Boolean
      L = 15
    ' On définit les onglets dans lesquelles la maccro doit chercher. ATTENTION A LA FORME D'ECRITURE
     
    If Worksheets("Recherche auto").Range("AG4") = "Non Soudée" Then
      For Each w In ThisWorkbook.Worksheets
        Select Case w.Name
          Case "Tôles planes": flag = True
          Case Else: flag = False
        End Select
     
    Next
     
    ElseIf Worksheets("Recherche auto").Range("AG4") = "Soudée" Then
      For Each w In ThisWorkbook.Worksheets
        Select Case w.Name
          Case "Tôles soudées": flag = True
          Case Else: flag = False
        End Select
     
    Next
     
    ElseIf Range("AG4") = "" Then
      For Each w In ThisWorkbook.Worksheets
        Select Case w.Name
          Case "Tôles soudées": flag = True
          Case "Tôles planes": flag = True
          Case Else: flag = False
        End Select
     
    END IF
    ' Là c'est pour le tri, on théorie il n'y aura que le critère w.range qui devra être changé, si quelqu'un écrit plus de 2000 lignes par exemple et que l'on souhaite chercher sur 2200 lignes: w.Range("A2:Q2200")
        If flag Then
           w.Range("A2:AE1200").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Sheets("Recherche auto").Range("A2:AE4"), CopyToRange:=Sheets("Recherche auto").Range("A" & L), Unique:=False
        L = Sheets("Recherche auto").Range("A" & Rows.Count).End(xlUp).Row + 1
        End If
      Next w
      Sheets("Recherche auto").Select
    End Sub

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 07/08/2017, 21h46
  2. [XL-2010] Récupérer des données d'un autre onglet en fonction d'une valeur X
    Par julieC dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/02/2017, 10h48
  3. Réponses: 5
    Dernier message: 18/12/2014, 15h22
  4. Réponses: 2
    Dernier message: 14/09/2011, 16h17
  5. Placer une image sur la page en fonction d'une valeur
    Par D4rkArthemis dans le forum BIRT
    Réponses: 3
    Dernier message: 19/04/2011, 16h03

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