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 :

Copier et incrémenter le nom d'une feuille [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 186
    Par défaut Copier et incrémenter le nom d'une feuille
    Bonjour à tous et à toutes

    Je cherche à affecter à un bouton une macro permettant
    - la copie de la feuille actuelle juste après la feuille actuelle
    - incrémenter le nom de la feuille copiée. par exemple passer de LOCAL01 à LOCAL02

    La macro que j'ai trouvée sur le net copie bien la feuille en cours, mais en dernière position et sans changer le nom comme souhaité

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub Bouton20_Clic()
     
        ' Désactive la mise à jour de l'écran
       Application.ScreenUpdating = False
     
        Cells.Copy
        Sheets.Add after:=Sheets(Worksheets.Count)
        ActiveSheet.Paste
        ActiveSheet.Range("a1").Select
        Application.CutCopyMode = False
     
    End Sub
    Merci pour votre aide

    Daniel S

  2. #2
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Bonjour,

    Pour la copie de la feuille active, essaie comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Sub Bouton20_Clic()
    Dim Ws As Worksheet
     
    Set Ws = ActiveSheet
    Ws.Copy After:=Ws
     
    End Sub
    Pour l'incrémentation du nom c'est plus délicat, supposons que tu veux copier 2x la feuille LOCAL01, si on incrémente en fonction du nom de la feuille on va se retrouver avec 2x LOCAL02 et ça va couiner. Si on incrémente en fonction du nombre de feuilles et que tu supprimes une des feuilles, on va se retrouver avec un 2 noms identiques et ça va couiner aussi...

  3. #3
    Membre très actif
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 186
    Par défaut
    Bonjour Fring et merci pour cette macro qui fonctionne parfaitement

    Pour ce qui est de l'incrémentation, ce que je souhaite, c'est partant d'une feuille nommée LOCAL01 par exemple (mais ca peut être uniquement numérique comme 01) la feuille copiée soit renommée LOCAL02 ou 02.

    Merci pour ton aide

    Daniel S

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2008
    Messages : 764
    Par défaut incrémenter une feuille
    Bonjour,

    Pour incrémenter une feuille, le nom de cette feuille doit se composer en deux parties :
    1-la partie qui ne change jamais en texte
    2-La partie qui change sera une variable (integer, byte, long ... si tu ne dépasses pas 256 prend la variable en byte)

    ca donne un truc dans le genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim btVar as byte
    Worksheet("maFeuille" & btVar)
    btVar = btVar + 1

  5. #5
    Membre très actif
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 186
    Par défaut
    bonjour Francky et merci pour ces lignes de code

    Comment puis je les intégrer dans la macro précédente ?

    Merci d'avance

    Daniel

  6. #6
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Ce que francky propose ne fonctionnera pas tel quel vu que la variable btVar reprend la valeur 0 à chaque fois que tu exécutes la macro.

    Pour faciliter la chose, sépare le nom de la feuille et le numéro par un tiret par exemple (LOCAL-1), de cette manière il ne faudra pas se soucier du nombre de caractères.
    Ce qui donnerait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Sub Bouton20_Clic()
    Dim Ws As Worksheet, Nom As String, Num As Integer
     
    Set Ws = ActiveSheet
    Nom = Split(Ws, "-")(0)
    Num = Split(Ws, "-")(1)
    Ws.Copy After:=Ws
    ActiveSheet.Name = Nom & "-" & Num + 1
     
    End Sub

  7. #7
    Membre très actif
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 186
    Par défaut
    Bonjour Fring

    Merci pour ces éléments

    J'ai une erreur 438 lors de l'exécution de cette macro, sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Nom = Split(Ws, "-")(0)
    Est ce parce que ma feuille est nommée LOCAL-1 et non LOCAL-0 ?
    Est ce parce que j'ai d'autres feuilles dans ce fichier (page de garde, données générales .....)

    Merci de ton aide

    Daniel S

  8. #8
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    Bonjour familledacp,

    Le premier argument de la fonction Split est une expression de chaîne.
    Essaie avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Nom = Split(Ws.name, "-")(0)
    Num = Split(Ws.name, "-")(1)
    Cordialement.

  9. #9
    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 heu!!..
    bonjour

    sinon tu a ca :
    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_sheet()
    'total_sheet = ActiveWorkbook.Sheets.Count
    Dim num As Long
    Dim ws As Worksheet
     num = 1
     
    'on va boucler sur tout les sheets pour controler si num ne corespond pas au dernier chiffre dans le nom des sheets
    ' pour eviter une erreur
    For Each ws In Application.Worksheets
    If Right(ws.Name, 1) = num Then
     num = num + 1 'on ajoute 1 a num
    Else
    'on quitte la boucle si le numero est atteint
    Exit For
    End If
    Next
    Sheets("local01").Copy After:=Sheets(Sheets.Count)
    ActiveSheet.Name = "local" & "0" & num
    End Sub
    voila
    au plaisir
    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

  10. #10
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Citation Envoyé par gFZT82 Voir le message
    Bonjour familledacp,

    Le premier argument de la fonction Split est une expression de chaîne.
    Essaie avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Nom = Split(Ws.name, "-")(0)
    Num = Split(Ws.name, "-")(1)
    Cordialement.
    Exact , petite erreur de ma part, j'ai oublié de préciser ".name"

  11. #11
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Bonjour.
    Voici une autre suggestion.

    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 copie_sheet2()
     
    FeuilleOrigine = "Local1"
    FeuilleDestination = "Local"
     
    PremierNumero = 10
    formats = "00"
    NumeroSuivant = Format(PremierNumero, formats)
    copierApres = Sheets.Count - 1
     
    For Each ws In Application.Worksheets
     nbr = nbr + 1
    If UCase(Left(ws.Name, Len(FeuilleDestination))) = UCase(FeuilleDestination) Then
     If Len(Mid(ws.Name, Len(FeuilleDestination) + 1)) = Len(NumeroSuivant) Then
      num = Val(Mid(ws.Name, Len(FeuilleDestination) + 1))
      If num >= Val(NumeroSuivant) Then
       NumeroSuivant = Format(Val(num) + 1, formats)
       copierApres = nbr
      End If
     End If
     End If
     Next
     
    Sheets(FeuilleOrigine).Copy After:=Sheets(copierApres)
    ActiveSheet.Name = FeuilleDestination & NumeroSuivant
     
    End Sub

  12. #12
    Membre très actif
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 186
    Par défaut
    Bonjour

    MErci à tous pour votre aide, ca fonctionne parfaitement

    Daniel S

  13. #13
    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
    bonjour

    oui daccors ca fonctionne mais quelle option a tu choisi et pourquoi?


    au plaisir
    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

  14. #14
    Membre très actif
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 186
    Par défaut
    bonjour

    J'utilise la solution de Fring .... parceque c'est la première a avoir été proposée ...

    Je n'ai pas cherché plus loin

    Encore merci pour votre aide

    Daniel

  15. #15
    Membre régulier
    Femme Profil pro
    Apprentie
    Inscrit en
    Avril 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Apprentie

    Informations forums :
    Inscription : Avril 2017
    Messages : 8
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    bonjour

    sinon tu a ca :
    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_sheet()
    'total_sheet = ActiveWorkbook.Sheets.Count
    Dim num As Long
    Dim ws As Worksheet
     num = 1
     
    'on va boucler sur tout les sheets pour controler si num ne corespond pas au dernier chiffre dans le nom des sheets
    ' pour eviter une erreur
    For Each ws In Application.Worksheets
    If Right(ws.Name, 1) = num Then
     num = num + 1 'on ajoute 1 a num
    Else
    'on quitte la boucle si le numero est atteint
    Exit For
    End If
    Next
    Sheets("local01").Copy After:=Sheets(Sheets.Count)
    ActiveSheet.Name = "local" & "0" & num
    End Sub
    voila
    au plaisir
    Ta solution fonctionne très bien aussi je l'ai testé pour autre chose et c'est génial Merci beaucoup

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

Discussions similaires

  1. Copier et incrémenter le nom d'une feuille
    Par remondii dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 31/12/2014, 00h05
  2. [XL-2007] Incrémenter le nom d'un feuille dans une formule
    Par Buzzz2727 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 11/08/2012, 00h26
  3. Copier colonnes suivant leur nom dans une autre feuille
    Par paflolo dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 18/10/2006, 15h49
  4. Réponses: 37
    Dernier message: 02/03/2006, 02h58
  5. Réponses: 4
    Dernier message: 09/11/2005, 18h11

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