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 :

Une macro sur tous les onglets


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Support qualité logistique
    Inscrit en
    Novembre 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Support qualité logistique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 13
    Par défaut Une macro sur tous les onglets
    Bonjour,

    Je ne sais pas coder, je me contente de faire des macro, puis de venir chercher sur votre fofo (merci ), les bouts de codes qui me manque à droite ou à gauche pour que ça tienne la route, mais là je ne trouve pas.

    Ma macro est en deux partie :
    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
    ' IPTT Macro
    ' Macro enregistrée le 23/11/2012 par i0155970
    '
     
    '
        Cells.Select
        Range("K6").Activate
        Application.CutCopyMode = False
        With Selection
            .Orientation = 0
            .AddIndent = False
            .ShrinkToFit = False
            .ReadingOrder = xlContext
            .MergeCells = False
        End With
        For Each ws In ActiveWorkbook.Worksheets
        With ws.Range("G13:G5312")
                .NumberFormat = "0"
                .Value = .Value
        End With
        Next
        Sheets("Feuil1").Select
        Sheets("Feuil1").Name = "CSMS"
    Jusque là tout va bien, mais la seconde, je souhaite qu'elle s'exécute sur tous les onglets présents (le nombre peut varié) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sheets("IP%1014").Select
        Range("M3").Select
        ActiveCell.FormulaR1C1 = "=VLOOKUP(RC4,CSMS!R13C7:R5312C31,4,0)"
        Range("M3").Select
        Selection.AutoFill Destination:=Range("M3:M662")
        Range("M3:M662").Select
    Au final je crée cette macro pour une vingtaine de personnes, qui s'en serviront avec des extractions différentes (onglet CSMS) et des onglets IPTT différents à remplir ; et je ne sais pas vraiment comment rendre cette macro disponible facilement.
    Je me fais bien comprendre ?

    *Merci*

  2. #2
    Membre actif
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 20
    Par défaut
    Bonjour Maksym,

    Pour faire simple, je pense qu'une boucle suffira, tu as juste besoin de rajouter "For Each worksheets in thisworkbook ... Next" ainsi qu'une condition pour ne pas passer dans ton onglet CSMS ce qui donnera pour toi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    For Each Worksheets In ThisWorkbook
    If Worksheets.Name <> "CSMS" Then
        Range("M3").Select
            ActiveCell.FormulaR1C1 = "=VLOOKUP(RC4,CSMS!R13C7:R5312C31,4,0)"
            Range("M3").Select
            Selection.AutoFill Destination:=Range("M3:M662")
            Range("M3:M662").Select
    End If
    Next
    Tu peux déjà essayer ca.

    Pour que les personnes relancent d'eux mêmes directement la macro, une chose simple que tu pourrais faire (selon moi) ce serait de créer un bouton dans ton/tes onglet(s), ils cliquent et la macro se lance.

    Je ne suis pas un pro non plus mais je te propose un autre code un peu plus épuré, a essayer on sait jamais que ca fonctionne du premier coup ^^

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    For Each Worksheets In ThisWorkbook
        If Worksheets.Name <> "CSMS" Then
            Cells(3, 13).Select
            With Selection
                .FormulaR1C1 = "=VLOOKUP(RC4,CSMS!R13C7:R5312C31,4,0)"
                .AutoFill Destination:=Range("M3:M662")
            End With
        End If
    Next
    Cordialement

  3. #3
    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 169
    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 169
    Billets dans le blog
    53
    Par défaut
    Bonjour,

    @ nonohzx
    Désolé mais ta proposition de parcourir l'ensemble des feuilles est sans doute une bonne piste mais la manière dont est codifiée cette boucle est totalement erronée.
    As-tu testé la solution que tu proposes ?
    Je te conseille la lecture de ce tuto sur la gestion des boucles dans excel et tout particulièrement ce chapitre

    Exemple pour parcourir la collection des feuilles d'un classeur, ici l'on parcourt les feuilles du classeur où se trouve le code VBA (ThisWorkbbok).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub ListFeuilles()
     Dim sht As Worksheet
     ' Parcourir les feuilles du classeur où se trouve le code VBa
     For Each sht In ThisWorkbook.Worksheets
      ' Le code
      MsgBox sht.Name
      ' Pour tester le nom d'une feuille
      ' If sht.Name = "maFeuille" Then ... La suite du code
     Next
    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

  4. #4
    Membre habitué
    Homme Profil pro
    Support qualité logistique
    Inscrit en
    Novembre 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Support qualité logistique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 13
    Par défaut
    Bonjour nonohzx et Philippe,

    Merci à vous deux de vous être penchés sur mon problème.

    Je dois dire que ça dépasse largement mon niveau de bidouillage là, et je ne parviens pas à intégrer votre solution Philippe.

    J'ajoute :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Sub IPTT
    Dim sht As Worksheet
     ' Parcourir les feuilles du classeur où se trouve le code VBa
     ' 1ere partie de mon code, sur Feuil1, et qui se termine par renommer Feuil1 en CSMS
     For Each sht In ThisWorkbook.Worksheets
      ' 2ème partie de mon code qui doit s'appliquer à toutes les autres feuilles  MsgBox sht.Name
      ' Pour tester le nom d'une feuille
      ' If sht.Name = "maFeuille" Then ... La suite du code
     Next
    End Sub
    Je ne comprends pas dans cette dernière partie où apparaît la condition : si ma feuille s'appelle CSMS arrêter la macro.

  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 169
    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 169
    Billets dans le blog
    53
    Par défaut
    La ligne sera (de mémoire, je n'ai pas accès au VBA pour l'instant)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If sht.Name = "CSMS" Then Exit Sub
    Bonjour,
    Une autre solution est l'utilisation du SELECT CASE
    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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Sub IPTT()
     Dim sht As Worksheet
     '
     ' Code
     '
     ' Parcourir les feuilles du classeur où se trouve le code VBA
     For Each sht In ThisWorkbook.Worksheets
      Select Case sht.Name
       Case "DashBoard"
         Exit Sub ' Quitte la procédure
       Case "Feuil1", "Feuil2"
        Exit For ' Quitte la boucle
       Case "Feuil3"
        ' Code
       Case Else ' Toutes les autres feuilles
        ' Code
      End Select
     Next
     '
     ' Autre code
     '
     MsgBox "Boucle terminée"
    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

  6. #6
    Membre habitué
    Homme Profil pro
    Support qualité logistique
    Inscrit en
    Novembre 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Support qualité logistique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 13
    Par défaut
    Je suis désolé mais j'ai vraiment du mal à l'appliquer.

    J'ai donc couper la macro en deux : la partie sur la Feuil1 (=> CSMS) marche bien.

    Ensuite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Sub IPTT2()
    Dim sht As Worksheet
    For Each sht In ThisWorkbook.Worksheets
    'code
    Ca fait tourner la macro en boucle sur la seconde feuille, mais pas sur les suivantes. (à la limite si ça doit faire la macro sur la feuille CSMS c'est pas grave, mais en dernier !)

Discussions similaires

  1. [XL-2007] Optimisation d'une macro + Application à tous les onglets
    Par Identifiant75 dans le forum Excel
    Réponses: 53
    Dernier message: 05/05/2015, 19h23
  2. [LibreOffice] Executer une macro sur TOUS les documents ouvert
    Par Gomoz dans le forum OpenOffice & LibreOffice
    Réponses: 4
    Dernier message: 23/01/2015, 21h00
  3. Exécuter une macro sur tous les onglets d'un fichier sauf un
    Par Marsama dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/04/2011, 17h38
  4. Macro sur tous les onglets
    Par yann3131 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 12/01/2010, 17h35
  5. [XL-2003] Exécuter une macro sur tous les fichiers d'un dossier.
    Par ahmet dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 16/10/2009, 09h49

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