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 :

Liste de choix


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 22
    Par défaut Liste de choix
    Bonjour,

    J'ai une macro qui me permet de créer une feuille dans un classeur Excel et qui permet à l'utilisateur de nommer sa feuille via une boite de dialogue.

    Je souhaiterai faire évoluer ma macro pour faire en sorte que l'utilisateur ne saisisse pas lui même le nom de sa feuille mais choisisse le nom de sa feuille parmi une liste de choix. (Le contenu de cette liste est déja saisi dans une page de données)

    Voici la macro telle qu'elle est aujourd'hui.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    'Demander à l'utilisateur de choisir le nom de la nouvelle feuille à insérer'
        Dim Nom As String
        Nom = InputBox("Renommer la nouvelle feuille", "Nom nouvelle feuille")
        ' Si l'utilisateur n'a saisie aucune donnée et qu'il clique sur OK,
        ' ou si l'utlisateur clique sur Annuler, on quitte la procédure.
        If Nom = "" Then
            MsgBox "Aucune donnée n'a été saisie"
            Exit Sub
        ' Sinon la donnée saisie est affichée
        Else
            MsgBox Nom
        End If
    Merci par avance de votre aide.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    A priori je ne vois que la création d'un Userform avec un ComboBox et un bouton de commande.

    Dans votre procédure vous mettez (vous pouvez donner un autre nom à Userform1 dans la fenêtre Propriétés) :

    Sur le Userform vous insérez ce 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
    Sub UserForm_Initialize()
     
    For i = 1 To 10
        nom = sheets("Feuil1").Cells(i, 1)
        ComboBox1.AddItem nom
    Next i
     
    End Sub
     
    Sub CommandButton_Click()
     
    If ComboBox1.Value = ""
    MsgBox "Vous n'avez pas choisi de nom !"
    exit Sub
    End if
     
    nom = ComboBox.Value
    Unload Userform1
     
    ....votre code pour l'affectation de la variable "nom"
     
    End sub
    Adaptez les variables 1 to 10 à votre plage comprenant les noms ainsi que le nom de la feuille et le 1 dans "Cells(i, 1)" si la plage n'est pas en colonne "A"

    Regardez aussi ici l'utilisation des formulaires :
    http://silkyroad.developpez.com/VBA/ControlesUserForm/

  3. #3
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 22
    Par défaut
    bonjour jacques_jean,

    Merci beaucoup pour votre réponse. non suelement je suis toute jeune dans les macros mais en plus c'est la première fois que j'essaie d'approcher les UserForm et je crois n'avoir pas tout compris.

    J'ai crée le userform (zone de Liste + command bouton) et taper le code que vous m'avez dit dans le UserForm :

    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
    Sub UserForm_Initialize()
     
    For i = 19 To 24
        Nom = Sheets("Instructions").Cells(i, 2)
        ComboBox1.AddItem Nom
    Next i
     
    End Sub
     
    Sub CommandButton_Click()
     
    If ComboBox1.Value = ""
    MsgBox "Vous n'avez pas choisi de nom !"
    Exit Sub
    End If
     
    Nom = ComboBox.Value
    Unload UserForm1
     
    End Sub
    Mais je n'ai pas compris ce que vous voulez dire par :....votre code pour l'affectation de la variable "nom" juste avant end sub.

    En fait la macro qui me permettait de "créer ma nouvelle feuille" et générer d'autre actions liées est commandée par un bouton.

    donc dans ma macro initiale j'ai tapé le code suivant :

    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
    43
    44
    45
    Sub Macrocreernouvellefeuille()
    '
    ' Macrocreernouvellefeuille Macro
    ' Macro enregistrée le 31/10/2007 par rembliec
       UserForm1.Show  
    'Insérer une nouvelle feuille en dernière position - feuille identique à la dernière'
        
        Sheets(Sheets.Count).Copy After:=Sheets(Sheets.Count)
        Sheets(Sheets.Count).Name = Nom
        Range("B1").Formula = "BUDGET ETUDE ML 21430 ORVAL "
        
    
    ' Sélection de l'onglet budget Global
        Sheets("Budget Global au réel").Select
    ' Insertion d'une nouvelle ligne avant la dernière ligne
        Dim iR&, iL&, i&, k&
        iR = Cells(Rows.Count, "A").End(xlUp).Row
        Rows(iR).Insert
    'Copier la dernière ligne et coller le contenu dans la ligne insérée
        Rows(iR - 1).Select
        Application.CutCopyMode = False
        Selection.Copy
        Rows(iR).Select
        ActiveSheet.Paste
        
    'Insérer automatiquement le nom de la nouvelle feuille créee'
        For i = 1 To 1
        Cells(iR, i).Formula = Nom
        Next
     
     'Mettre à jour automatiquement les formules dans la ligne insérée'
        k = ActiveSheet.Range("A9").CurrentRegion.Columns.Count
        
        For i = 2 To k - 2
        Sheets(Sheets.Count).Activate
        iL = Cells(Rows.Count, "A").End(xlUp).Row
        Cells(iL, i).Copy
        Sheets("Budget Global au réel").Activate
        Cells(iR, i).Select
        ActiveSheet.Paste Link:=True
        Next
      
    
    End Sub
    Mais cela ne fonctionne pas! Pourriez-vous me dire ce que j'ai mal fait (ou pas fait)?

    Merci par avance.

  4. #4
    Membre Expert Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Par défaut
    tu devrais mettre cette partie de code à l'endroit indiqué par jacques_jean
    plutot que là ou tu l'as mises

    car sinon, la variable nom sera vide car en dehors de son champs d'action

    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
     
    'Insérer une nouvelle feuille en dernière position - feuille identique à la dernière'
     
        Sheets(Sheets.Count).Copy After:=Sheets(Sheets.Count)
        Sheets(Sheets.Count).Name = Nom
        Range("B1").Formula = "BUDGET ETUDE ML 21430 ORVAL "
     
     
    ' Sélection de l'onglet budget Global
        Sheets("Budget Global au réel").Select
    ' Insertion d'une nouvelle ligne avant la dernière ligne
        Dim iR&, iL&, i&, k&
        iR = Cells(Rows.Count, "A").End(xlUp).Row
        Rows(iR).Insert
    'Copier la dernière ligne et coller le contenu dans la ligne insérée
        Rows(iR - 1).Select
        Application.CutCopyMode = False
        Selection.Copy
        Rows(iR).Select
        ActiveSheet.Paste
     
    'Insérer automatiquement le nom de la nouvelle feuille créee'
        For i = 1 To 1
        Cells(iR, i).Formula = Nom
        Next
     
     'Mettre à jour automatiquement les formules dans la ligne insérée'
        k = ActiveSheet.Range("A9").CurrentRegion.Columns.Count
     
        For i = 2 To k - 2
        Sheets(Sheets.Count).Activate
        iL = Cells(Rows.Count, "A").End(xlUp).Row
        Cells(iL, i).Copy
        Sheets("Budget Global au réel").Activate
        Cells(iR, i).Select
        ActiveSheet.Paste Link:=True
        Next

  5. #5
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 22
    Par défaut
    Merci de votre réponse. J'ai fait ce que vous m'avez dit et dans ma procédure j'ai juste écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Sub Macrocreernouvellefeuille()
     
    UserForm1.Show
     
     
    End Sub
    J'ai une erreur 424 "objet requis"

    Savez-vous ce que cela signifie?

    Merci

  6. #6
    Membre Expert Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Par défaut
    cela veux dire qu'il ne trouve pas le formulaire se nommant UserForm1

    donc soit il n'existe pas, soit il n'est pas disponible dans la procédure.

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

Discussions similaires

  1. Vérifier une liste de choix
    Par nebule dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 01/12/2004, 20h06
  2. [HTML] Formulaire/menu et liste de choix
    Par TwoChipies dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 17/11/2004, 17h32
  3. Réponses: 8
    Dernier message: 05/05/2004, 17h28
  4. Réponses: 10
    Dernier message: 04/05/2004, 17h00
  5. liste de choix
    Par fredmessenger dans le forum ASP
    Réponses: 11
    Dernier message: 03/09/2003, 09h27

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