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 :

Exécuter une macro sur plusieurs feuilles [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Femme Profil pro
    Formatrice bureautique
    Inscrit en
    Septembre 2007
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Formatrice bureautique

    Informations forums :
    Inscription : Septembre 2007
    Messages : 202
    Points : 79
    Points
    79
    Par défaut Exécuter une macro sur plusieurs feuilles
    Hello l'équipe,

    Après avoir résolu un problème... En voici un autre... Je souhaiterais exécuter ma macros sur les 12 feuilles de l'année alors que mon classeur contient une feuille Récap et une feuille Paramètres.

    Je pense utiliser la fonction For mais j'avoue que je ne sais pas trop comment m'y prendre... Je ne suis pas une pro du code et le for est toujours ma bête noire

    Pour pour l'aide

  2. #2
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Re,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim fl As Worksheet
    For Each fl In Worksheets
      If fl.Name <> "Récap" And fl.Name <> "Paramètres" Then'attention aux noms de feuilles avec accent
      'ton code
      End If
    Next fl

  3. #3
    Membre régulier
    Femme Profil pro
    Formatrice bureautique
    Inscrit en
    Septembre 2007
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Formatrice bureautique

    Informations forums :
    Inscription : Septembre 2007
    Messages : 202
    Points : 79
    Points
    79
    Par défaut Passer à la feuille suivante
    Hello et merci pour le bout de code... Par contre, je lance ma macro depuis la première feuille Paramètre et vu que le IF ne correspond pas, il va directement au Endif et relance la boucle sans passer à la feuille suivante...

    Est-ce que entre le end if et le next fl, je dois lui donner une action pour lui dire de tester la feuille suivante ? Car sinon, il reste toujours sur la 1ère... Alors qu'il doit faire des actions dans chaque feuilles mensuelles...

    Je ne sais pas si je me suis bien fait comprendre

  4. #4
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Fais un essai tel quel sur un classeur vierge (4 feuilles au hasard) et tu verras, avec ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim fl As Worksheet
    For Each fl In Worksheets
      If fl.Name <> "Feuil1" And fl.Name <> "Feuil2" Then
         fl.range("A1") = "toto"
      End If
    Next fl
    dans la feuille 3 ou 4 tu auras "toto" en A1

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut heu.....
    bonjour

    le code que l'on t'a donné est parfaitement fonctionnel

    si la boucle sur les sheets ne fonctionne pas c'est que dans le code que tu dois metre dans cette boucle te sort de celle ci

    je ne vois que ca

    au plaisir

  6. #6
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    patricktoulon a raison et si tu n'as pas l'habitude, sur l'exemple que je t'ai donné, inseres un bouton de commande sur n'importe quelle feuille, donnes lui ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub CommandButton1_Click()
    Dim fl As Worksheet
    For Each fl In Worksheets
      If fl.Name <> "Feuil1" And fl.Name <> "Feuil2" Then
         fl.Range("A1") = "toto"
      End If
    Next fl
    End Sub

  7. #7
    Membre régulier
    Femme Profil pro
    Formatrice bureautique
    Inscrit en
    Septembre 2007
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Formatrice bureautique

    Informations forums :
    Inscription : Septembre 2007
    Messages : 202
    Points : 79
    Points
    79
    Par défaut Erreur
    Je deviens folle, si je test sur un classeur vierge, ca fonctionne très bien ce que vous m'avez transmis comme code...

    Par contre, dans mon classeur, voici le code que j'ai et Excel bug sur la ligne fl.range ("A4").activate... :

    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
    For Each fl In Worksheets
     
      If fl.Name <> "Récap" And fl.Name <> "Feuil1" Then
     
                fl.Range("A4").Activate
                Cells.Find(What:=service, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
                :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
                False, SearchFormat:=False).Activate
     
                While ActiveCell = service
     
                ActiveCell.Offset(1, 0).Select
     
                Wend
     
                Selection.EntireRow.Insert
                ActiveCell.Value = service
                ActiveCell.Offset(0, 1).Select
                ActiveCell.Value = personne
     
     
      End If
     
    Le but de mon code est de prendre le contenu de deux variables stockées dans la premières feuilles et d'aller rechercher dans les feuilles suivantes, le service correspondant (comme plusieurs personnes (lignes) font partir du même service, je fais une recherche du service puis une boucle pour aller sur la dernière ligne, insérer une ligne pour ajouter le contenu de ma variable...
    Next fl

  8. #8
    Membre régulier
    Femme Profil pro
    Formatrice bureautique
    Inscrit en
    Septembre 2007
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Formatrice bureautique

    Informations forums :
    Inscription : Septembre 2007
    Messages : 202
    Points : 79
    Points
    79
    Par défaut Merci !!!
    Youhouhou

    J'ai trouvé mon erreur...

    J'ai remplacé ma ligne fl.Range("A4").Activate par

    fl.Select
    Merci et belle fin de journée,

  9. #9
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    essayes comme ça si j'ai compris...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim cellule As Range
    For Each fl In Worksheets
      If fl.Name <> "Récap" And fl.Name <> "Feuil1" Then 'vérifies "Feuil1"
        Set cellule = fl.Cells.Find(What:=service, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
          :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
          False, SearchFormat:=False)
        If Not cellule Is Nothing Then
          Rows(cellule.Row).EntireRow.Insert
          cellule.Value = service 'vérifies la destination
          cellule.Offset(0, 1).Value = personne 'vérifies la destination
        End If
      End If
    Next fl

  10. #10
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    essaie deja ca


    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sheets(fl.name).Activate
    a plus

  11. #11
    Membre régulier
    Femme Profil pro
    Formatrice bureautique
    Inscrit en
    Septembre 2007
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Formatrice bureautique

    Informations forums :
    Inscription : Septembre 2007
    Messages : 202
    Points : 79
    Points
    79
    Par défaut Et ca continue...
    Attendez c'est pas tout

    Car ca c'était juste pour comprendre le fonctionnement de la boucle sur les feuilles...

    Mon idéal serait d'avoir deux inputbox au lancement de la macro qui demande :

    1. Depuis quel mois vous souhaitez inscrire les données ? Répons Mars ou 3
    2. Jusqu'à quel mois vous souhaitez inscrire les données ? Réponse Décembre ou 12

    Et... que ma boucle For s'exécute uniquement à partir de la feuille mars jusqu'à la feuille décembre, par exemple...

  12. #12
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re

    bon pour l'exemple du imputbox casefayere t'a répondu je crois ,tu n'a qu'a doubler la commande avec deux variable correspondantes

    ensuite tu boucle sur les nom contenu dans l'ensemble (mois inputbox1,mois inputbox2)

    regarde du coté des variables tableau qui pourrais te servir a mémoriser les noms des feuilles concernées

    a plus

  13. #13
    Membre régulier
    Femme Profil pro
    Formatrice bureautique
    Inscrit en
    Septembre 2007
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Formatrice bureautique

    Informations forums :
    Inscription : Septembre 2007
    Messages : 202
    Points : 79
    Points
    79
    Par défaut
    J'ai donc déclarer les 2 variables

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dim fl1 as worksheet
    dim fl2 as worksheet
    Dans mon code, j'ai remplacé la boucle For fl each worksheets par

    For compteur = fl1 to fl2

    et j'ai ajouté le remplissage des variables par le contenu d'un inputbox :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    fl1 = inputbox("Mois début")
    fl2 = inputbox("Mois fin")
    Le problème est que la variable est déclarée en tant que workseet et que je saisi du texte dans mon inputbox... si je déclare la variable en string, je pense pas que ma macro tournera car il ne fera pas référence aux feuilles...

    Allez j'essaie avec beaucoup de doutes...

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

Discussions similaires

  1. [XL-2007] Application d'une macro sur plusieurs feuilles
    Par cattivo dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/01/2015, 10h24
  2. [XL-2007] utiliser une macro sur plusieurs feuilles
    Par revans dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 23/06/2012, 14h20
  3. [MySQL] Exécuter une requête sur plusieurs serveurs MySQL
    Par sirbaldur dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 19/11/2007, 18h02
  4. [VBA-E] Comment appliquer une macro sur plusieurs cellules
    Par jeanpierreco dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 25/01/2007, 10h54
  5. macro sur plusieurs feuilles
    Par lolo_bob2 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 19/06/2006, 16h51

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