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 :

[VBA Excel] macro création de feuille


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 84
    Points : 37
    Points
    37
    Par défaut [VBA Excel] macro création de feuille
    Bonjour,

    J'ai un userform, je souhaiterais, qu'en ayant rentré un numéro de référence dans une textbox,
    - il s'affiche le numéro de référence sur une page "données" (c'est fait),
    - il se créé une nouvelle Feuille avec pour nom le numéro de référence
    - il y ait un lien hypertext sur le numéro de référence de la page "données" qui nous amène à la nouvelle Feuille associée

    Voici ce que j'ai fait dans la partie module :
    Images attachées Images attachées  

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 84
    Points : 37
    Points
    37
    Par défaut
    Ok, voici le code mis à jour :

    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
     
    'mise à jour d'un ajout de données
    Sub miseajour()
        Sheets("Données").Activate
        ajouterligne
        Selection.Value = Numéro_de_référence
        ActiveCell.Offset(0, 1).Select
     
        NomFeuille = ActiveSheet.Name
        With Worksheets(NomFeuille)
        .Name = "Numéro_de_référence"
        End With
     
        Range("A1").Select
     
        Sheets("Données").Select
        Range("A2").Select
        ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:= _
                 "'2'!B7"
    End Sub

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 84
    Points : 37
    Points
    37
    Par défaut
    Ok je vais essayer d'etre plus précis,

    Pour 'Range("A1").Select c'était une erreur, je l'ai virée.

    J'ai un classeur avec une feuille appelée "Données" dans laquelle sont recensés des numéros de référence à l'aide d'un userform avec une textbox. Et d'autres feuilles correspondant à chaque numéro de référence (une feuille par numéro de référence).
    Je souhaite automatiser tout ca.
    J'ai donc un userform avec une textbox. je souhaiterais, qu'en ayant rentré un numéro de référence dans la textbox, qu'il se passe 3 choses :

    - qu'il s'affiche le numéro de référence sur une page "données" (c'est ok)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        Sheets("Données").Activate
        ajouterligne
        Selection.Value = Numéro_de_référence
        ActiveCell.Offset(0, 1).Select
    - qu'il se créé une nouvelle Feuille ayant pour nom le numéro de référence

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        NomFeuille = ActiveSheet.Name
        With Worksheets(NomFeuille)
        .Name = "Numéro_de_référence"
        End With
    - qu'il y ait un lien hypertext sur le numéro de référence de la page "données" , pointant vers sa nouvelle Feuille associée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        Sheets("Données").Select
        Range("A2").Select
        ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:= _
                 "'2'!B7"
    Tels quels , cela ne marche pas mais je ne comprend pas pourquoi
    Ai-je été plus clair ? C'est pas simple à expliquer !
    D'avance merci

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 84
    Points : 37
    Points
    37
    Par défaut
    En fait mon classeur aura :
    - une feuille principale avec une récapitulation des références et de certaines données associées (designation, prix, etc...)
    et
    - pour chaque référence il y aura une feuille associée (via l'hyperlink) où l'on entre plus dans les détails de la référence (il y aura une centaine de références).

    Donc la cellule A2 pointant vers la page 2 en B7 c'est un exemple, en fait je souhaite que la référence située en A2 ait un hyperlink vers la feuille du meme nom et cela de manière automatique

    Tu as vu, pu d'apostrophes !

    D'avance merci

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 84
    Points : 37
    Points
    37
    Par défaut
    En fait c'est pas moi qui ais mis les ' ' mais quand j'ai fait la macro automatiquement avec excel...

    Pour les hyperlinks c'est tres simple , imagine toi un tableau récapitulatif avec plus d'une centaine de références et a chaque référence une feuille associée. Tu veux en savoir plus sur une des références et consulter sa feuille, il te faudrait chercher manuellement dans toutes tes feuilles pour trouver la bonne... Perte de temps, vive les hyperlinks !

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 84
    Points : 37
    Points
    37
    Par défaut
    Oui j'ai testé ca bloque toujours, jte montre le dossier excel en pièce jointe.

    Sur un autre post on m'avait fait quelque chose de super mais je comprenait vraiment rien au truc pour le modifier !!!

  7. #7
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    Salut

    Moi aussi j'ai fait des tests. Je trouvais ton problèmes intéressant. Excuses moi d'interférer Ouskel,

    J'ai une feuille appeler Références qui contient un titre (Table des références) en A1 et un bouton de commande (Name : cmdAjouterRéférence, Caption : Ajouter une référence...).

    J'ai aussi un UserForm nommé frmAjoutReferences (voir l'image)
    Son 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
    Public valide As Boolean
     
    Private Sub cmdAnnuler_Click()
        valide = False
        Me.Hide
    End Sub
     
    Private Sub cmdValider_Click()
        If txbNomReference.Text <> "" Then
            valide = True
            Me.Hide
        Else
            'ajout d'un message dans la barre d'état de la bt de dialogue.
            stbMessages.SimpleText = "Inscrivez une référence ou Annulez"
            ' retour du focus dans le champ texte
            txbNomReference.SetFocus
        End If
    End Sub
     
    Private Sub UserForm_Activate()
        txbNomReference.Text = ""
        stbMessages.SimpleText = ""
    End Sub
    Le code du bouton cmdActiver de la feuille Références
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub cmdAjouterReference_Click()
        frmAjoutReference.Show
        If frmAjoutReference.valide Then
            AjouterReference frmAjoutReference.txbNomReference.Text
        End If
    End Sub
    Et la macro qui fait le travail
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Public Sub AjouterReference(NomReference As String)
        Dim DerniereLigne As Integer
        DerniereLigne = Sheets("Références").Cells.SpecialCells(xlCellTypeLastCell).Row
        Sheets.Add after:=Sheets(Worksheets.Count)
        Sheets(Worksheets.Count).Name = NomReference
        Sheets("Références").Activate
        ActiveSheet.Hyperlinks.Add Anchor:=Cells(DerniereLigne, 1), Address:="", SubAddress:= _
            NomReference & "!B7", TextToDisplay:=NomReference
    End Sub
    [Edition : ajout et correction du code]
    Cependant, les feuilles sont bein ajoutées mais la référnece avec l'hyperlien est toujours créée dans la même cellule...

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 84
    Points : 37
    Points
    37
    Par défaut
    MERCI !

    Je vais regarder ça au calme, en attendant je pars m'acheter "VBA pour les Nuls" à 11€ à la fnac, j'ai du travail, beaucoup de choses m'échapent !

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 84
    Points : 37
    Points
    37
    Par défaut
    Salut,

    J'ai fait exactement comme tu as mis (en nommant l'userform frmAjoutReference plutot que frmAjoutReferences) , mais j'ai une erreur, dans "Private Sub cmdAjouterReference_Click()", j'ai "frmAjoutReference.Show" de surligné en jaune, je ne comprends pas pourquoi ?

  10. #10
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Citation Envoyé par Viper7
    j'ai une erreur
    Laquelle?

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 84
    Points : 37
    Points
    37
    Par défaut
    J'ai un peu évolué dans mon apprentissage, je vais traiter problème par problème.

    J'ai un classeur de base de donnée de voitures, composé d'une feuille récapitulant toutes les voitures et d'une feuille par voiture avec les détails.
    Pour gérer les voitures, j'ai un userform qui a pour fonction d'ajouter, modifier et supprimer les voitures une a une. Ca fonctionne tres bien.

    Après avoir rempli le formulaire pour ajouter une voiture, on peut cliquer sur un bouton (ayant pour nom bnNouvelleFeuilleVoiture) qui ajoute une nouvelle feuille ayant pour nom celui de la voiture c'est à dire la valeur de ce qu'il y a dans une textbox du formulaire (ici la textbox s'appelle txNomVoiture)

    Voici le code du bouton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub bnNouvelleFeuilleVoiture_Click()
    Sheets.Add after:=Sheets(Worksheets.Count)
    Sheets(Worksheets.Count).Name = txNomVoiture.Value
    C'est génial ca fonctionne mais si l'utilisateur clique une seconde fois, il y aura un message d'erreur VBA car il est impossible de créér deux fois la meme feuille (logique)
    Je cherche donc à faire un message du style "la page existe déjà" mais je n'arrive pas à le faire. Quelqun pourrait-il m'aiguiller ?

  12. #12
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    pour tester si une feuille existe déjà, avec la gestion d'erreur par 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
     
    Function FeuilleExiste(W As Workbook, stNomFeuille As String) As Boolean
       On Error GoTo fin
       Debug.Print W.Sheets(stNomFeuille).Name
     
       FeuilleExiste = True
       Exit Function
    fin:
       FeuilleExiste = False
    End Function
     
     
    '
    ' Utilisation
    '
    Sub Test
      If FeuilleExiste(Thisworkbook,"feuil1") then msgbox "la feuille existe"
    end sub

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 84
    Points : 37
    Points
    37
    Par défaut
    ok merci, mais je l'incorpore dans quoi ? je le met dans la macro du bouton ?

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 84
    Points : 37
    Points
    37
    Par défaut
    Citation Envoyé par zazaraignée
    Salut

    Moi aussi j'ai fait des tests. Je trouvais ton problèmes intéressant. Excuses moi d'interférer Ouskel,

    J'ai une feuille appeler Références qui contient un titre (Table des références) en A1 et un bouton de commande (Name : cmdAjouterRéférence, Caption : Ajouter une référence...).

    J'ai aussi un UserForm nommé frmAjoutReferences (voir l'image)
    Son 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
    Public valide As Boolean
     
    Private Sub cmdAnnuler_Click()
        valide = False
        Me.Hide
    End Sub
     
    Private Sub cmdValider_Click()
        If txbNomReference.Text <> "" Then
            valide = True
            Me.Hide
        Else
            'ajout d'un message dans la barre d'état de la bt de dialogue.
            stbMessages.SimpleText = "Inscrivez une référence ou Annulez"
            ' retour du focus dans le champ texte
            txbNomReference.SetFocus
        End If
    End Sub
     
    Private Sub UserForm_Activate()
        txbNomReference.Text = ""
        stbMessages.SimpleText = ""
    End Sub
    Le code du bouton cmdActiver de la feuille Références
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub cmdAjouterReference_Click()
        frmAjoutReference.Show
        If frmAjoutReference.valide Then
            AjouterReference frmAjoutReference.txbNomReference.Text
        End If
    End Sub
    Et la macro qui fait le travail
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Public Sub AjouterReference(NomReference As String)
        Dim DerniereLigne As Integer
        DerniereLigne = Sheets("Références").Cells.SpecialCells(xlCellTypeLastCell).Row
        Sheets.Add after:=Sheets(Worksheets.Count)
        Sheets(Worksheets.Count).Name = NomReference
        Sheets("Références").Activate
        ActiveSheet.Hyperlinks.Add Anchor:=Cells(DerniereLigne, 1), Address:="", SubAddress:= _
            NomReference & "!B7", TextToDisplay:=NomReference
    End Sub
    [Edition : ajout et correction du code]
    Cependant, les feuilles sont bein ajoutées mais la référnece avec l'hyperlien est toujours créée dans la même cellule...
    J'ai trouvé une solution pour notre problème. les références sont stockées en colonne A, on va nommer la fin de la colonne, c'est a dire la premiere cellule vide de la colonne A
    Vas dans Insertion/Nom/Définir
    Dans "Nom dans le Classeur" tu mets "FinA" puis ajouter
    Voici la macro mise à jour :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Public Sub AjouterReference(NomReference As String)
     
        Sheets.Add after:=Sheets(Worksheets.Count)
        Sheets(Worksheets.Count).Name = NomReference
        Sheets("Références").Activate
        Range("FinA").Select
        ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:= _
            NomReference & "!B7", TextToDisplay:=NomReference
    End Sub

    Voilà ca marche mais peux tu m'expliquer dans :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SubAddress:= _
            NomReference & "!B7", TextToDisplay:=NomReference
    End Sub
    à quoi sert "!B7" ?

Discussions similaires

  1. VBA sous excel - Macro - Création de feuilles à partir d'une liste
    Par Sylione dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 14/05/2007, 09h42
  2. [VBA-Excel] Macro Création Case à cocher
    Par strifer dans le forum Macros et VBA Excel
    Réponses: 23
    Dernier message: 21/07/2006, 10h18
  3. [VBA] Excel + macro + aléatoire
    Par spopo dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 02/01/2006, 15h42
  4. [VBA Excel] Remettre toute une feuille par défaut
    Par loacast dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/12/2005, 16h56
  5. [VBA Excel] Effacer rapidement une feuille
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 24/10/2002, 13h12

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