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 :

Dupliquer feuille + changement nom onglet [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Novembre 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2014
    Messages : 9
    Par défaut Dupliquer feuille + changement nom onglet
    Bonjour à tous,

    Je réalise des bons de commande "type" sur excel. Je souhaiterais dupliquer ces bons de commande en leur donnant un nom issu d'une cellule déterminée sur la feuille active (feuille 1 disons).
    J'ai trouvé le code suivant pour la duplication:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Sheets("Feuil1").Select 
    Sheets("Feuil1").Copy Before:=Sheets(2)
    Cependant, je n'arrive pas à trouver le code pour attribuer un nom à chaque onglet dupliqué à partir d'une cellule de la feuille active (disons B4 par exemple).

    Autre point gênant, le bouton de commande auquel j'ai attribué le code ci-dessus est également dupliqué, ce que je ne souhaite pas.

    Si l'un d'entre vous souhaite me donner un coup de mains, ça serait avec grand plaisir que je l'accepterai!

    Merci.

  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 Spanc, bonjour le forum,

    Le petit code ci-dessous pour le nom (avec des vérifications) :
    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
    Dim N As String 'déclare la variable N (Nom)
    Dim O As Object 'déclare la variable O (Onglet)
     
    N = Range("B4").Value 'définit la variable N
    If N = "" Then Exit Sub 'si N est vide, sort de la procédure
    On Error Resume Next 'gestion des erreur (en cas d'erreur passe à la ligne suivante)
    Set O = Sheets(N) 'définit l'onglet O (génère une erreur si cet onglet n'existe pas)
    If Err <> 0 Then 'condition : si une erreur a été générée
        MsgBox "Un onglet nommé " & Range("B4") & " existe déjà !" 'message
        Exit Sub 'sort de la procédure
    End If 'fin de la condition
    On Error GoTo 0 'annule la gestion des erreurs
    Sheets("Feuil1").Select
    Sheets("Feuil1").Copy Before:=Sheets(2)
    ActiveSheet.Name = N
    Pour le bouton, il faudrait que tu nous dises de quel type de bouton il s'agit...

  3. #3
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    Bonjour spanc27, Thautheme,

    Je suis parti sur ça de mon côté :
    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
    Option Explicit
     
    Sub dupl()
    Dim i As Integer
    Dim rng As Range
    Dim nom_feuil_src As String
    Dim nom_feuil_bc As String
    Dim count As Integer
     
    nom_feuil_src = "Feuille source"
    nom_feuil_bc = "BC"
     
    count = 1
     
    With Worksheets(nom_feuil_src)
        Set rng = .Range("B1")
        For i = 1 To .Columns(2).Find("*", , , , , xlPrevious).Row - 1
            Worksheets(nom_feuil_bc).Copy After:=Worksheets(Worksheets.count)
            If IsError(Evaluate("='" & rng.Offset(i, 0) & "'!A1")) Then
                Worksheets(nom_feuil_bc & " (2)").Name = rng.Offset(i, 0)
            Else
                Worksheets(nom_feuil_bc & " (2)").Name = "Feuille existante " & count
                count = count + 1
            End If
        Next i
    End With
    End Sub
    Les noms des BC sont sur les cellules B2 à BXX et la macro créée autant de BC correspondant.
    Si ça peut aider.

    Cordialement,
    Kimy

  4. #4
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    J'ai testé ce type de code. Il semble vouloir faire son office.
    Je "bute" néanmoins sur le nom du CommandButton à supprimer.

    Mais essaye tout de même ceci :

    Code à placer dans le module de la feuille concernée (clic droit sur l'onglet de la feuille / Visualiser le code)
    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
    Private Sub CommandButton1_Click()
    Dim NomFeuil As String, NexistePas As Boolean, Caractere As String
     
    'Le nom de ta future feuille est en Feuil1!B4
    NomFeuil = Sheets("Feuil1").Range("B4")
    'test les caractères spéciaux à éviter :
    If Test_Nom_Feuille(NomFeuil, Caractere) = False Then GoTo Faute
    'test si la feuille n'existe pas déjà :
    On Error Resume Next
    NexistePas = Sheets(NomFeuil).Name <> ""
    On Error GoTo 0
    If NexistePas = False Then
        'si tout ok : on copie
        Sheets("Feuil1").Copy Before:=Sheets(2)
        'on renomme
        ActiveSheet.Name = NomFeuil
        'on supprime le vilain méchant bouton pas beau
        ActiveSheet.Shapes.Range(Array("CommandButton1")).Delete
    Else
        'si pas ok
        MsgBox "Le nom en Feuil1!B4 n'est pas valide : Feuille déjà existante", vbCritical
    End If
    Exit Sub
    'traitement d'erreur caractère spécial :
    Faute:
    MsgBox "Le nom en Feuil1!B4 n'est pas valide." & vbCrLf & "Le caractère : " & Caractere & " est interdit.", vbCritical
    End Sub
     
    'test si la chaine contient un caractère à éviter
    Function Test_Nom_Feuille(Nom As String, Carac As String) As Boolean
    Dim i As Byte, Carac_Interdits
     
    Carac_Interdits = Split("/,\,:,*,?,"",<,>,|", ",")
    For i = LBound(Carac_Interdits) To UBound(Carac_Interdits)
        If InStr(Nom, Carac_Interdits(i)) > 0 Then
            Test_Nom_Feuille = False
            Carac = Carac_Interdits(i)
            Exit Function
        End If
    Next i
    Test_Nom_Feuille = True
    End Function
    EDIT : Bonjour à tous

  5. #5
    Membre averti
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Novembre 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2014
    Messages : 9
    Par défaut
    Un grand merci pour vos réponses (quelle efficacité!!). Merci Pijaku, ton intuition était la bonne. Ta macro fonctionne parfaitement.

    Encore une fois, un grand merci.

    Cordialement.

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

Discussions similaires

  1. [XL-2007] Afficher sur la feuille le nom de l'onglet.
    Par maxval18 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 29/08/2012, 14h45
  2. Nom Jframe en rapport avec nom Onglet
    Par mortalius dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 01/05/2006, 14h54
  3. [VBA-E] Changement couleur onglet
    Par Elstak dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 05/04/2006, 13h04
  4. [VB6] gestion des feuilles par des onglets
    Par kitsune dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 04/02/2006, 16h17
  5. [POO] changement nom objet
    Par melou dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 25/10/2005, 08h44

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