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 :

Boucle sur plusieurs onglets [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Chef de projet logistique
    Inscrit en
    Janvier 2019
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet logistique
    Secteur : Alimentation

    Informations forums :
    Inscription : Janvier 2019
    Messages : 22
    Par défaut Boucle sur plusieurs onglets
    Bonjour à tous,

    Je cherche à effectuer plusieurs contrôles sur plusieurs onglets sauf 3.

    J'ai commencé à écrire un bout de code en jaune mais je sèche pour la suite.

    Pouvez-vous m'aider svp. Je ne suis malheureusement pas une AS en VBA.

    Merci d'avance


    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
    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
     
     
    ThisWorkbook.Activate
     
    Dim fl As Worksheet
     
                   For Each fl In Worksheets
     
       ' If fl.Name <> "MENU" And fl.Name <> "infos" And fl.Name <> "Définition des frais" Then
     
    'Vérifier présence numéro préfac
     
        If ThisWorkbook.Sheets("Base").Range("G4") = "" Then
            Cancel = True
            MsgBox "G4Attention des données sont vides, veuillez remplir les cellules vides."
        End If
    'Next
     
    'Filtrer les cellules en mise en forme conditionnelle
     
    'Test 1
     
    Worksheets("base").Activate
    Range("$A$6:$P$800").AutoFilter Field:=1, Criteria1:=RGB(248, 203, 173), Operator:=xlFilterCellColor
     
        x = Range("$A$6:$A$800").SpecialCells(xlCellTypeVisible).Count
            If x > 1 Then
                msg = "A:" & x
            End If
     
        Worksheets("base").AutoFilterMode = False
     
    'Test 2
    Worksheets("base").Activate
    Range("$A$6:$P$800").AutoFilter Field:=2, Criteria1:=RGB(248, 203, 173), Operator:=xlFilterCellColor
     
        x = Range("$B$6:$B$800").SpecialCells(xlCellTypeVisible).Count
            If x > 1 Then
            If msg <> "" Then msg = msg & Chr(13)
                msg = "B:" & x
            End If
     
    Worksheets("base").AutoFilterMode = False

  2. #2
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonjour Caro, bonjour le forum,

    Il te suffit, pour spécifier l'onglet de la boucle d'utiliser la variable fl. par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If ThisWorkbook.Sheets("Base").Range("G4") = "" Then
    devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If fl.Range("G4") = "" Then

  3. #3
    Membre averti
    Femme Profil pro
    Chef de projet logistique
    Inscrit en
    Janvier 2019
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet logistique
    Secteur : Alimentation

    Informations forums :
    Inscription : Janvier 2019
    Messages : 22
    Par défaut
    Citation Envoyé par Thautheme Voir le message
    Bonjour Caro, bonjour le forum,

    Il te suffit, pour spécifier l'onglet de la boucle d'utiliser la variable fl. par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If ThisWorkbook.Sheets("Base").Range("G4") = "" Then
    devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If fl.Range("G4") = "" Then
    Bonjour Thautheme,

    Du coup si je mets fl comme variable j'ai juste à mettre pour déterminer ma variable

    fl <> "MENU" And fl <> "infos" And fl <> "Définition des frais"

    ou dois-je mettre quand même fl.n=Name ?

    et juste après je mets mes IF

    Peux-tu me confirmer stp

  4. #4
    Membre averti
    Femme Profil pro
    Chef de projet logistique
    Inscrit en
    Janvier 2019
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet logistique
    Secteur : Alimentation

    Informations forums :
    Inscription : Janvier 2019
    Messages : 22
    Par défaut
    J'ai trouvé ce code qui marche très bien mais ma formule s'applique sur les onglets MENU, infos et Définition des frais alors que je veux qu'elle s'applique sur tous les onglets sauf ces 3 là.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Dim Feuille As Worksheet
     
    For Each Feuille In ThisWorkbook.Worksheets
        If Not Feuille.Name = "MENU" Or Feuille.Name = "infos" Or Feuille.Name = "Définition des frais" Then
            With Feuille
                'ICI vous mettez le code que vous souhaitez voir exécurer sur les trois feuilles
                If Feuille.Range("F4") = "" Then
                Cancel = True
                MsgBox "G4 vide" & .Name
                End If
            End With
        End If
    'Ici le code du copié/collé
    Next Feuille

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    J'ai trouvé ce code qui marche très bien mais ma formule s'applique sur les onglets MENU, infos et Définition des frais alors que je veux qu'elle s'applique sur tous les onglets sauf ces 3 là.
    As-tu essayé le Select Case ?
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  6. #6
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonjour le fil, bonjour le forum,

    J'aurais plutôt écris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not Feuille.Name = "MENU" And Not Feuille.Name = "infos" And Not Feuille.Name = "Définition des frais" Then MsgBox Feuille.Name
    [Édition]
    Bonjour Philippe, nos posts se sont croisés. Oui le Select Case est beaucoup plus explicite...

  7. #7
    Membre averti
    Femme Profil pro
    Chef de projet logistique
    Inscrit en
    Janvier 2019
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet logistique
    Secteur : Alimentation

    Informations forums :
    Inscription : Janvier 2019
    Messages : 22
    Par défaut
    Citation Envoyé par Thautheme Voir le message
    Bonjour le fil, bonjour le forum,

    J'aurais plutôt écris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not Feuille.Name = "MENU" And Not Feuille.Name = "infos" And Not Feuille.Name = "Définition des frais" Then MsgBox Feuille.Name
    [Édition]
    Bonjour Philippe, nos posts se sont croisés. Oui le Select Case est beaucoup plus explicite...

    Mais oui bien sur j'avais rajouté les "Not" mais effectivement c'est bien "And" et non "Or"

    Merci à toi Thautheme ça marche niquel !

  8. #8
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour Caro,

    Ne t'inquiète pas. Nous passons tous par ce stade.

    Pourrais-tu baliser ton code avec #, s'il te plaît, il n'en sera que plus visible

    Tout d'abord:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
     
     
     ThisWorkbook.Activate
    L'activation est redondante.

    Un conseil, rémanent sur le Forum.
    Bien rattacher les objets entre eux, notamment les cellules à leur feuille parent.
    Pour ce faire, i est conseillé, pour une lisibilité améliorée du code, d'utiliser le bloc With.

    Maintenant, la question est
    - Que veux-tu faire exactement? Quel est ton besoin?
    Comme en mathématiques en général , et en probabilités en particulier, exposer clairement un besoin revient presque à résoudre pour moitié sa problématique.
    - Si tu as lancé l'exécution du code, y a-t-il une erreur survenue? Laquelle? Où?

    Dans l'attente de te lire.

  9. #9
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Si j'ai bien compris ta demande, tu cherches à modifier cette ligne de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If fl.Name <> "MENU" And fl.Name <> "infos" And fl.Name <> "Définition des frais" Then
    Je te suggère l'utilisation du Select Case bien plus simple dans ce cas précis

    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub t()
      Dim sht As Worksheet
      For Each sht In ThisWorkbook.Worksheets
        With sht
          Select Case .Name
            Case "Menu", "Info", "Serveur"
              MsgBox "Pas de traitement sur la feuille " & .Name
            Case Else
              MsgBox "Traitement sur la feuille " & .Name
          End Select
        End With
      Next
      Set sht = Nothing
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

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

Discussions similaires

  1. Boucle sur plusieurs classeurs avec plusieurs onglets
    Par Onizuka666 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 19/08/2018, 22h48
  2. [XL-2010] Macro copier-coller en boucle sur plusieurs onglets
    Par Pilaf182 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/07/2016, 09h33
  3. [XL-2007] Boucle Next sur plusieurs onglets
    Par ARTETA13 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 21/09/2012, 08h00
  4. Export requete sur excel sur plusieur onglets
    Par Renardo dans le forum Access
    Réponses: 10
    Dernier message: 26/01/2007, 17h13
  5. [VBA-E] Impression page paire sur plusieurs onglets
    Par liop49 dans le forum Macros et VBA Excel
    Réponses: 23
    Dernier message: 17/02/2005, 15h19

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