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 :

Macro fonctionnant sur toutes mes feuilles


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 10
    Par défaut Macro fonctionnant sur toutes mes feuilles
    Bonjour,

    j'ai ecris cette macro toute simple :

    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
     
    Sub Roulement()
    '
    ' Roulement Macro
    '
     
    'Sub MacroavecfeuilleProtect()
     
    ActiveSheet.Unprotect "test"
     
        Sheets("Modele").Activate
        Range("B2:Q2").Select
        Selection.Copy
        Sheets("Janvier").Activate
        ActiveSheet.Paste
     
    ActiveSheet.Protect "test", True, True, True
     
    End Sub

    Mais quand je duplique ma feuille la macro ne fonctionne pas

    Je voudrais pouvoir copier ma feuille la renommer février et que ma macro fonctionne sur la nouvelle feuille et ainsi de suite

    comment faire

    Merci d'avance

    PS: si il y a une macro qui permet de copier automatiquement ma feuille et de la renommer février puis mars et ainsi de suite je suis preneur

  2. #2
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Bonjour,
    Ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Janvier").Activate
    Tu dis que tu veux travailler sur la feuille nommée Janvier, donc tu ne vas pas travailler sur la feuille nommée Février.
    Tu peux prendre une variable "mois" et avoir une cellule dans ta feuille Excel qui correspond au mois sur lequel tu veux travailler :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Roulement()
    ActiveSheet.Unprotect "test"
        Dim mois As String
        mois = Sheets("Acceuil").Range("A1").Value
        Sheets("Modele").Range("B2:Q2").Copy
        Sheets(mois).Activate          'sans geuillemets !! car c'est une variable
        ActiveSheet.Paste
     
    ActiveSheet.Protect "test", True, True, True
     
    End Sub
    Tu auras une feuille de calcul "Accueil" où tu indiqueras en cellule A1 le nom de la feuille où les données doivent être copiées.
    Tu remarqueras que j'ai un peu "nettoyé" ton code. Evite d'utiliser des Select et Activate autant que possible. Cela entraîne parfois des erreurs difficiles à gérer.

    En ce qui concerne la macro qui créé une feuille et la renomme : utilise l'enregistreur de macro pendant que tu fais cette opération "à la main". Tu auras un code A ADAPTER. De même, tu pourras utiliser cette cellule A1 dans la page Acceuil pour indiquer comment tu veux renommer tes feuilles.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 10
    Par défaut
    Merci beaucoup Rialloe pour ta réponse et ta rapidité

    j'essaie cela dans la journée et je reviens faire un retour

    bon am

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 10
    Par défaut
    re,

    alors j'ai testé et je comprends la logique du code mais c'est pas exactement se que je voulais j'ai du mal m'exprimer.

    En fait je commence en janvier et je veux pouvoir utiliser mes macros sur cette feuille puis je fais une copie de cette feuille que je nomme ensuite février, je l'efface et je veux que mon script puisse fonctionner sur cette nouvelle feuille hors quand je l'utilise il me renvoie sur la feuille de janvier normal puisque dans le code c'est janvier d'écrit.

    Comment dire a la macro, execute toi sur la feuille sur laquelle tu es actuellement

    voila pour le moment

    pour la copie auto j'ai trouver deux trois truc sur le web je testerais apres chaque chose a la fois

    merci encore

  5. #5
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Le code pour dire "fait les operations sur la feuille actuelle" est :
    Comme son nom l'indique, c'est la feuille active Par contre, si tu fais des aller-retour sur plusieurs feuilles pour les copier-coller, je te conseille de faire la chose suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub Roulement()
        Dim feuilCible As Worksheet
        Set feuilCible = ActiveSheet        'avant de faire toutes les opérations, tu dis que tu définis feuilCIble comme la feuille active en ce moment.
        'puis fin du code
    End Sub
    Tu utiliseras feuilCible de la manière suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    feuilCible.Range("A1").Value = "toto"
    Pour changer la valeur de la cellule A1 par exemple.

    Pour ton code, ça donnera :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub Roulement()
        Dim feuilCible As Worksheet
        Set feuilCible = ActiveSheet
        feuilCible.Unprotect "test"
        Sheets("Modele").Range("B2:Q2").Copy
        feuilCible.Paste
        feuilCible.Protect "test", True, True, True
     
    End Sub

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 10
    Par défaut
    Re,

    bon alors j'ai résolu mon problème d'activation de feuille en bidouillant mais ca marche

    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
     
    Sub Roulement()
    ActiveSheet.Unprotect "test"
        Dim mois As String
        mois = ActiveSheet.Name
        Sheets("Modele").Range("B2:Q2").Copy
        Sheets(mois).Activate          'sans geuillemets !! car c'est une variable
        ActiveSheet.Paste
     
    ActiveSheet.Protect "test", True, True, True
     
    End Sub
     
      Sub Efface()
    '
    ' Efface Macro
    '
     
    '
    ActiveSheet.Unprotect "test"
    If MsgBox("ATTENTION VALERIE TU VAS EFFACER TOUT TON TABLEAU !! TU ES SURE ?", vbOKCancel, _
        "Efface tout le Tableau") = vbCancel Then Exit Sub
        Range("B5:AF11").Select
        Selection.ClearContents
    ActiveSheet.Protect "test", True, True, True
     
    End Sub
    J'ai ensuite trouvé un code qui copie ma feuille et qui ouvre une boite pour que je renomme en vérifiant que le nom n'existe pas déja.
    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
     
    Sub Copie()
    Sheets("Janvier").Copy After:=Sheets(ThisWorkbook.Sheets.Count)
    10:
    nom = Application.InputBox(Prompt:="Écrire le nouveau nom", _
    Title:="Nommer une feuille", Type:=2)
    If nom = False Or nom = "" Then Exit Sub
    For Each F In ThisWorkbook.Worksheets
    If F.Name = nom Then
    rep = MsgBox("Le nom " & nom & " existe déjà. Voulez-vous entrer un autre nom ?", vbYesNo)
    If rep = vbYes Then
    GoTo 10
    Else
    Exit Sub
    End If
    End If
    Next F
    ActiveSheet.Name = nom
    End Sub
    Le problème est que si le nom n'existe pas ok ca marche
    si le nom existe et que je change sa marche

    si je me trompe et que le nom existe deja une deuxieme fois ca bug

    bon mon code doit pas etre tres propre ce sont des bout de code récupéré de ci de la sur divers forum

    Je vais essayé ta proposition riaolle pour voir ce que cela donne

    merci encore du coup de main

  7. #7
    Membre éclairé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    550
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 550
    Par défaut
    Bonjour Kermitdive,

    Je te donne un petit conseil , essaye d'écrire ton copy/paste sur une meme ligne au lieu d'activé, selectionné, copier, selectionner, coller

    Cela sauve du temps d'exécution

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sheets("Modele").Activate
        Range("B2:Q2").Select
        Selection.Copy
        Sheets("Janvier").Activate
        ActiveSheet.Paste
    Deviens

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Modele").Range("B2:Q2").copy Sheets("Janvier") ' là tu mets l'emplacement de la destination
    en espérant le tout pouvant t'aider dans future code

    amicalement

    jpvba

  8. #8
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Bonjour,
    Tu ne devrais pas laisser le choix à l'utilisateur s'il doit écrire un autre nom, car Excel n'acceptera jamais 2 x le même nom.
    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
     
    Sub Copie()
        Sheets("Janvier").Copy After:=Sheets(ThisWorkbook.Sheets.Count)
    10:
        nom = Application.InputBox(Prompt:="Écrire le nouveau nom", _
        Title:="Nommer une feuille", Type:=2)
        If nom = False Or nom = "" Then Exit Sub
        For Each F In ThisWorkbook.Worksheets
           If F.Name = nom Then
                rep = MsgBox("Le nom " & nom & " existe déjà. Voulez-vous entrer un autre nom ?", vbYesNo)
                If rep = vbYes Then
                    GoTo 10
               Else
                    Exit Sub
               End If
        Next F
        ActiveSheet.Name = nom
    End Sub
    Tu as un End If en trop :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If ma condition Then mon action
    'OU
    If ma condition Then
        mon action
    End If
    Au lieu de laisser le choix à l'utilisateur, impose un nouveau nom tant que le nom n'est pas valable. De plus, si le nom est vide, on ne peut pas créer de feuille non plus, donc tu devrais mettre la création de feuille à la fin du Sub, une fois que tu es sûr que le nom est OK. Au lieu d'utiliser GoTo, tu peux utiliser une bouclé While (tant que le nom n'est pas OK), mais ça c'est juste une idée
    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
     
    Sub Copie()
        Dim nomOK As Boolean
        nomOK = False
     
        While nomOK = False
            nom = Application.InputBox(Prompt:="Écrire le nouveau nom", _
            Title:="Nommer une feuille", Type:=2)
            If nom = False Or nom = "" Then Exit Sub
            nomOK = True
            For Each F In ThisWorkbook.Worksheets
               If F.Name = nom Then
                    nomOK = False
                    Exit For
               End If
            Next F
            If nomOK = False Then MsgBox "Le nom" & nom & "existe déjà. Veuillez entrer un autre nom."
        Wend
        Sheets("Janvier").Copy After:=Sheets(ThisWorkbook.Sheets.Count)
        ActiveSheet.Name = nom
    End Sub
    Essaie avec ça

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 10
    Par défaut
    Bonsoir riaolle,

    merci pour ta proposition pour le copie de la feuille ca marche impect et en effet je ne cree pas de feuille si je ne met rien

    donc c'est adopté ;-)

    JPVBA :

    j'ai essayé ton idée mais ca beug qq part la marco ne s'execute pas je continue a investiguer pour avoir un code plus propre

    merci des conseils

    bonne soirée

  10. #10
    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 115
    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 115
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Le problème est que si le nom n'existe pas ok ca marche
    si le nom existe et que je change sa marche
    si je me trompe et que le nom existe deja une deuxieme fois ca bug
    A voir Comment incrémenter le nom d’une feuille Excel, lorsqu’il existe déjà ?
    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. [XL-2010] La même macro sur toutes mes feuilles
    Par guimauviette dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 09/06/2015, 12h56
  2. macro rechercher/remplacer sur toutes les feuilles
    Par gti64 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 03/03/2015, 11h25
  3. [XL-2010] Erreur 1004 sur toutes mes macros
    Par sosoboss dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 23/02/2015, 16h32
  4. [XL-2003] macro impossible sur toutes les feuilles
    Par alucard_xs dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 04/06/2012, 22h23
  5. Macro ou VBA pour exporter toutes mes feuilles au format *txt
    Par jakadam dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 29/08/2011, 01h58

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