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 :

Sélection d'un item dans une liste déroulante, afficher sa valeur dans une "étiquette" dans un Userform [XL-MAC 2011]


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
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2017
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 58
    Par défaut Sélection d'un item dans une liste déroulante, afficher sa valeur dans une "étiquette" dans un Userform
    Bonjour,

    Je suis un très grand débutant et ai choisi VBA pour m'initier à la programmation. J'ai parcouru le forum et ai pu voir qu'y cohabitent de fortes personnalités. Au risque de prendre un vent, après n'avoir pas trouvé solution à l'intitulé ci-dessus, je me lance :

    J'ai un Userform qui me sert à enregistrer des informations 'nom' 'prénom' 'fonction' et 'email' dans une feuille 'Intervenants'.
    Sur le même Userform j'ai ajouté une 'liste déroulante' qui me permet de sélectionner par le 'nom' dans la feuille 'Intervenants'.
    J'y ai placé également 4 étiquettes sensées renvoyer le nom sélectionné dans la première puis les valeurs contiguës dans les 3 autres...

    Je suis bloqué à 2 niveaux :
    a) je n'arrive pas à afficher le nom dans la première étiquette ; voici mon pauvre Vba qui ne plante pas mais n'affiche rien :

    #
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Liste_Intervenants_Change()
     
    If (Liste_Intervenants.SelText <> "") Then
    Dim curItem As String
    curItem = Liste_Intervenants.Text
    Nom_Intervenant.Caption = curItem
    End If
     
    End Sub
    #

    b) j'ai compris que je devrai utiliser Offset pour afficher les autres valeurs dans mes autres étiquettes mais je ne vois pas comment écrire le code qui indique que dans la feuille 'Intervenants' que la cellule (X, n) correspondant à la valeur sélectionnée dans 'Liste_Intervenants' est la cellule active.

    Je serai ravi de recevoir vos précieux concours, même si pour beaucoup ceci doit sembler le b a-ba.

    Par avance, Merci

  2. #2
    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
    le soucis c'est de bien démarrer avec le bon principe pour se simplifier la vie

    remplir la liste deroulante (combobox) intelligemment

    j'entend par la que
    soit on ajoute une colonne dans la combobox quitte a la cacher en lui mettant les numéros de ligne
    soit en mémorisant dans une variable ou meme dans le tag de la combobox

    de façon a que a la sélection d'un item on puisse déterminer facilement et sans peine la ligne correspondante dans le sheet

    ensuite oui c'est simple
    en mode B A BA on utilise offset0,y) sur la cellule 1 de la ligne correspondant a l'intervenant


    commence déjà par concevoir ca apres on pourra avancer

    comment remplie tu ta liste déroulante?
    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

  3. #3
    Membre averti
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2017
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 58
    Par défaut Merci Patrick mais ça ne répond pas à mon petit a)
    Citation Envoyé par patricktoulon Voir le message
    le soucis c'est de bien démarrer avec le bon principe pour se simplifier la vie

    remplir la liste deroulante (combobox) intelligemment

    j'entend par la que
    soit on ajoute une colonne dans la combobox quitte a la cacher en lui mettant les numéros de ligne
    soit en mémorisant dans une variable ou meme dans le tag de la combobox

    de façon a que a la sélection d'un item on puisse déterminer facilement et sans peine la ligne correspondante dans le sheet

    ensuite oui c'est simple
    en mode B A BA on utilise offset0,y) sur la cellule 1 de la ligne correspondant a l'intervenant


    commence déjà par concevoir ca apres on pourra avancer

    comment remplie tu ta liste déroulante?
    Je pense la remplir correctement et ce n'est pas l'objet de ma demande mais pour répondre à ta question, Patrick :

    #
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub UserForm_Activate()
     
    Dim Ligne As Integer: Ligne = 1
     
    While (ThisWorkbook.Worksheets(3).Cells(Ligne, 1).Value <> "")
        Liste_Intervenants.AddItem (ThisWorkbook.Worksheets(3).Cells(Ligne, 1).Value)
        Ligne = Ligne + 1
    Wend
     
    End Sub
    #

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour

    Tu as plutôt intérêt à lier ta listbox à la plage contenant les intervenants.
    Tu ne nous dis pas ce que contient la feuille des intervenants déjà connus.
    Peux-tu nous en montrer ici une image ? Car cela nous permettra de te guider en meilleure connaissance de cause vers la solution la mieux adaptée.

  5. #5
    Membre averti
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2017
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 58
    Par défaut
    Citation Envoyé par unparia Voir le message
    Bonjour

    Tu as plutôt intérêt à lier ta listbox à la plage contenant les intervenants.
    Tu ne nous dis pas ce que contient la feuille des intervenants déjà connus.
    Peux-tu nous en montrer ici une image ? Car cela nous permettra de te guider en meilleure connaissance de cause vers la solution la mieux adaptée.
    Bonjour et merci pour la suggestion de la plage, mais j'imagine qu'il faut la déclarer et faire en sorte qu'elle soit dynamique en cas d'incrément comme de décrément. Ça dépasse ma maîtrise du sujet pour l'instant me semble-t-il mais je vais m'y pencher pour le coup d'après...

    Bien cordialement

    Voici quelques captures d'écran du Userform et des données saisies dans ma Feuille3 'Intervenants' :

    Nom : intervenant.PNG
Affichages : 4927
Taille : 22,3 KoNom : intervenant_select.PNG
Affichages : 4734
Taille : 14,3 KoNom : Feuille Intervenants.PNG
Affichages : 4753
Taille : 33,9 Ko

    Pour la beauté de l'exercice, j'ai (à tort ou à raison) voulu éviter de rajouter une colonne de N° parce que à l'usage lorsque l'on supprime une ligne on se retrouve avec une discontinuité de numérotation que pour ma part je trouve hideuse d'une part et que numéroter une personne ne me parait pas bien élevé. J'ai donc ajouté un "doublon" patronymique 'BERLIOZ" pour voir comment contourner l'absence de numérotation automatique en colonne A par exemple. Merci 'Unparia' de me corriger si je fais fausse route.

    ps: on est tous le paria de quelqu'un mais j'ai connu un O.Paria par le passé...

  6. #6
    Membre averti
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2017
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 58
    Par défaut
    Citation Envoyé par unparia Voir le message
    Bonjour
    Peux-tu nous en montrer ici une image ? Car cela nous permettra de te guider en meilleure connaissance de cause vers la solution la mieux adaptée.
    Je suis perplexe !

    Alors qu'il ne se passe rien lorsque je sélectionne les 3 premiers intervenants de la liste, lorsque que je sélectionne 'BERLIOZ' (le compositeur), le label retourne bien la valeur BERLIOZ

    Nom : INTERVENANTS.jpg
Affichages : 4695
Taille : 16,2 KoNom : INTERVENANTS 2.jpg
Affichages : 4637
Taille : 17,7 Ko

  7. #7
    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
    re
    je n'est pas dis de numeroter un nom mais de repérer les lignes

    exemple démo visuelle
    Nom : demo12.gif
Affichages : 5571
Taille : 371,5 Ko


    tu constatera que dans la demo visuelle je ne confond pas Berlioz 1 et 2
    j'ai pris parti de nommer les étiquette(textbox) (TXT1,TXT2,TXT3,ETC.....)
    je prends la plage concernée + une colonne dans une variable tableau
    cette colonne en plus j'y met les numero de ligne de la plage (l'avantage c'est que la plage n'est pas obligé de commencer a la ligne 1)
    je te joins ce petit classeur démo il n'y a rien a repérer c'est tout fait d'avance
    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

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    le soucis c'est de bien démarrer avec le bon principe pour se simplifier la vie

    remplir la liste deroulante (combobox) intelligemment

    j'entend par la que
    soit on ajoute une colonne dans la combobox quitte a la cacher en lui mettant les numéros de ligne
    soit en mémorisant dans une variable ou meme dans le tag de la combobox[...]
    Hum... Dois-je rire ou pleurer?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    Je suppose que tu travailles avec une version >= 2007. Dès lors, tu as intérêt à travailler avec des tables de données. Tu pourras ainsi créer une plage dynamique simplement en créant une plage nommée sur base de ton tableau. En utilisant cette technique, tu peux ajouter les données que tu veux, la liste est actualisée à l'initialisation du userform.

    Il suffira alors, à l'initialisation du userform, d'actualiser la rowsource du combobox, comme illustré dans le code ci-dessous. Lors du changement de sélection sur le combobox, il faut alors renvoyer la valeur de la colonne souhaitée du combobox.

    Nom : 2017-08-28_142833.png
Affichages : 7669
Taille : 40,8 Ko

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub cboFirstName_Change()
      With cboFirstName
        labLastName.Caption = .Column(1, .ListIndex)
      End With
    End Sub
     
    Private Sub UserForm_Initialize()
      cboFirstName.RowSource = "=plage"
    End Sub

    Cela étant, tu parles d'étiquettes (label) et Patrick illustre cela avec des zones de text (TextBox). A toi d'adapter mon code en fonction de ton besoin. Le principe est de déléguer au maximum le travail à Excel et de s'appuyer dessus pour du VBA. C'est pourquoi je préconise l'utilisation de la table de données liée à une plage dynamique. Cela réduit ton code au minimum vital et donc limite les risques d'erreurs.

    Remarque: Sur ma version 2016, si on ne redéfinis pas le rowsource lors de l'initialisation du userform, Excel plante... mais avec cette ligne de code en plus, ça fonctionne
    Fichiers attachés Fichiers attachés
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  10. #10
    Membre averti
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2017
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 58
    Par défaut 1000 MERCIS
    Citation Envoyé par Pierre Fauconnier Voir le message
    Salut.

    Je suppose que tu travailles avec une version >= 2007. Dès lors, tu as intérêt à travailler avec des tables de données. Tu pourras ainsi créer une plage dynamique simplement en créant une plage nommé sur base de ton tableau. En utilisant cette technique, tu peux ajouter les données que tu veux, la liste est actualisée à l'initialisation du userform.

    Il suffira alors, à l'initialisation du userform, d'actualiser la rowsource du combobox, comme illustré dans le code ci-dessous. Lors du changement de sélection sur le combobox, il faut alors renvoyer la valeur de la colonne souhaitée du combobox.

    Nom : 2017-08-28_142833.png
Affichages : 7669
Taille : 40,8 Ko

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub cboFirstName_Change()
      With cboFirstName
        labLastName.Caption = .Column(1, .ListIndex)
      End With
    End Sub
     
    Private Sub UserForm_Initialize()
      cboFirstName.RowSource = "=plage"
    End Sub

    Cela étant, tu parles d'étiquettes (label) et Patrick illustre cela avec des zones de text (TextBox). A toi d'adapter mon code en fonction de ton besoin. Le principe est de déléguer au maximum le travail à Excel et de s'appuyer dessus pour du VBA. C'est pourquoi je préconise l'utilisation de la table de données liée à une plage dynamique. Cela réduit ton code au minimum vital et donc limite les risques d'erreurs.
    MERCI!!! C'est exactement le possible que j'imaginais mais je n'avais pas compris comment ne pas tout faire en VBA.

    En fait j'ai un MacBook avec Office 2011 pour Mac (donc pas d'ActiveX possible) et un Bootcamp avec Seven et Office 2013 ; ce qui est intéressant c'est de tester le code du Mac sous PC et l'inverse. C'est parfois très surprenant...

    Je vais essayer d'agréger ton code à celui de Patrick que je remercie au passage également à nouveau.

    Bonne journée
    Eric

  11. #11
    Membre averti
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2017
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 58
    Par défaut Pour être plus libres certains hommes ont besoin d'être davantage éclairés...
    Citation Envoyé par Pierre Fauconnier Voir le message
    Salut.

    Je suppose que tu travailles avec une version >= 2007. Dès lors, tu as intérêt à travailler avec des tables de données. Tu pourras ainsi créer une plage dynamique simplement en créant une plage nommée sur base de ton tableau. En utilisant cette technique, tu peux ajouter les données que tu veux, la liste est actualisée à l'initialisation du userform.

    Il suffira alors, à l'initialisation du userform, d'actualiser la rowsource du combobox, comme illustré dans le code ci-dessous. Lors du changement de sélection sur le combobox, il faut alors renvoyer la valeur de la colonne souhaitée du combobox.

    Nom : 2017-08-28_142833.png
Affichages : 7669
Taille : 40,8 Ko

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub cboFirstName_Change()
      With cboFirstName
        labLastName.Caption = .Column(1, .ListIndex)
      End With
    End Sub
     
    Private Sub UserForm_Initialize()
      cboFirstName.RowSource = "=plage"
    End Sub

    Cela étant, tu parles d'étiquettes (label) et Patrick illustre cela avec des zones de text (TextBox). A toi d'adapter mon code en fonction de ton besoin. Le principe est de déléguer au maximum le travail à Excel et de s'appuyer dessus pour du VBA. C'est pourquoi je préconise l'utilisation de la table de données liée à une plage dynamique. Cela réduit ton code au minimum vital et donc limite les risques d'erreurs.

    Remarque: Sur ma version 2016, si on ne redéfinis pas le rowsource lors de l'initialisation du userform, Excel plante... mais avec cette ligne de code en plus, ça fonctionne
    Re-bonjour Pierre

    Fait chaud aujourd'hui...

    J'ai essayé de faire comme tu m'as dit :
    - créé un tableau (TableauIntervenants)
    - nommé une plage (Plage) à l'intérieur du tableau sur deux colonnes Nom et Prénom
    - essayé de faire tourner ton code

    et rien ne se passe.

    Nom : Capture Userform.PNG
Affichages : 4820
Taille : 32,5 Ko

    Je n'ai sûrement pas tout capté ; pourrais-tu m'éclairer davantage voire m'aveugler cette fois-ci

    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
     
    Private Sub Liste_Intervenants_Change()
      With Liste_Intervenants
        Label_Nom_Intervenant.Caption = .Column(1, .ListIndex)
      End With
    End Sub
     
     
    Private Sub UserForm_Activate()
     
    'mon code initial
    'Dim Ligne As Integer: Ligne = 1
    'While (ThisWorkbook.Worksheets(3).Cells(Ligne, 1).Value <> "")
        'Liste_Intervenants.AddItem (ThisWorkbook.Worksheets(3).Cells(Ligne, 1).Value)
        'Ligne = Ligne + 1
    'Wend
     
    End Sub
    Private Sub UserForm_Initialize()
      Liste_Intervenants.RowSource = Plage
    End Sub

  12. #12
    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
    voila un exemple 2
    le tout dans un multipage

    autant pour moi
    modifie la ligne qui resemble a celle ci dans la fonction générale par celle ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    firstFREEligne = Cells(Rows.Count, 1).End(xlUp).Row + 1
    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

  13. #13
    Membre averti
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2017
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 58
    Par défaut merci à nouveau Patrick
    Je ne vais pas me coucher tôt ce soir...
    Je te fais un retour asap
    Eric

  14. #14
    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
    je n'ai pas detaillé mais:
    tu a donc 3 page dans le multipage + acceuil

    menu 1 afficher ou modifier
    dans celui la tu a ta combo
    1. tu choisi
    2. tu modifie
    3. tu valide


    menu 2 ajouter
    dans celui ci tu n'a pas la combo mais juste les 5 textbox
    1. remplir les textboxs
    2. clique sur ajouter


    menu 3 supprimer
    dans celui ci tu a juste une listbox et un bouton
    1. selectionne
    2. clique sur bouton supprimer



    a chaque fois quoi que tu facdce avec n'importe quel menu la combo et la listbox et le sheet se mettra a jour

    voila
    démo
    Nom : demo12.gif
Affichages : 4839
Taille : 419,2 Ko
    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

  15. #15
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par 1357VBA Voir le message
    Re-bonjour Pierre

    Fait chaud aujourd'hui...

    J'ai essayé de faire comme tu m'as dit :
    - créé un tableau (TableauIntervenants)
    - nommé une plage (Plage) à l'intérieur du tableau sur deux colonnes Nom et Prénom
    - essayé de faire tourner ton code

    et rien ne se passe.[...]
    Soit tu suis mon exemple et mon code et je peux alors t'aider, soit tu suis celui de Patrick et c'est lui qui peut alors t'aider. Perso, je ne ferais pas du tout comme lui et je ne vais donc pas essayer de suivre sa "logique"... , ni d'intégrer mon code au sien

    Je ne saurais trop te mettre en garde par rapport à du "tout vba". Si tu n'utilises pas les tables de données comme je le propose, tu vas devoir "pondre" du code inutilement lourd.

    A toi de faire ton choix pour une technique...

    Déjà, comme je l'ai fait remarquer, il faudrait savoir si tu veux afficher les infos dans un label comme dans ma solution et ta demande initiale (non modifiable, donc) ou dans un textbox modifiable, et donc adapter ta demande en conséquence.

    Ce que te propose Patrick, c'est de faire de l'Access dans Excel. Excel n'est pas du tout prévu pour ce genre de traitement, et vouloir "reproduire" Access en Excel ne t'amènera que des déboires, les codes proposés étant bien trop légers pour pouvoir tenir la route. Les propositions ne correspondent pas à ta demande initiale, en ce qu'elles les dépassent de loin, ne testent pas la validité des saisies, ne gèrent pas les erreurs. Bref, ça tire encore dans tous les sens sans aucune réflexion sur la finalité de ta demande. Du grand n'importe quoi, donc.

    Après, c'est toi qui choisis, et donc, c'est toi qui, éventuellement en fonction de tes choix, pleureras... ou pas. bon courage pour la suite
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  16. #16
    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
    re
    bonsoir ca tire dans rien du tout
    au cas ou je cite
    J'ai un Userform qui me sert à enregistrer des informations 'nom' 'prénom' 'fonction' et 'email' dans une feuille 'Intervenants'.
    Sur le même Userform j'ai ajouté une 'liste déroulante' qui me permet de sélectionner par le 'nom' dans la feuille 'Intervenants'.
    J'y ai placé également 4 étiquettes sensées renvoyer le nom sélectionné dans la première puis les valeurs contiguës dans les 3 autres...
    et je le re cite un peu plus bas dans le post
    C'est super élégant certes mais tu as défini une plage figée A1:G4
    Demain j'ajoute 7 intervenants et une semaine après j'en retire 3
    Je dois redéfinir ma plage à la mano ou bien existe-t-il un moyen de définir une plage "dynamique" ?

    c'est exactement ce mon userform fait et oui all VBA

    quand au éventuelles erreurs ne peuvent être produises que par la personne devant le clavier car en ce qui concerne ces données Excel ou même Acces n'a le pouvoir de deviner les intentions et tu peux faire ca dans n'importe quelle langage et même fonction Excel ca restera une inconnu que l'application Excel par définition ne pourra pas gérer

    il n'y a rien de plus simple qu'une combobox ou même une listbox contenant une colonne en plus dans la quelle se trouvent les index de lignes du sheets correspondant au même ligne dans la liste impossible de se tromper

    et surtout ,je voudrais bien voir ca dans un userform sans VBA
    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

  17. #17
    Membre averti
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2017
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 58
    Par défaut Et bien oui je n'ai pas varié
    Citation Envoyé par Pierre Fauconnier Voir le message
    Soit tu suis mon exemple et mon code et je peux alors t'aider, soit tu suis celui de Patrick et c'est lui qui peut alors t'aider. Perso, je ne ferais pas du tout comme lui et je ne vais donc pas essayer de suivre sa "logique"... , ni d'intégrer mon code au sien

    Je ne saurais trop te mettre en garde par rapport à du "tout vba". Si tu n'utilises pas les tables de données comme je le propose, tu vas devoir "pondre" du code inutilement lourd.

    A toi de faire ton choix pour une technique...

    Déjà, comme je l'ai fait remarquer, il faudrait savoir si tu veux afficher les infos dans un label comme dans ma solution et ta demande initiale (non modifiable, donc) ou dans un textbox modifiable, et donc adapter ta demande en conséquence.

    Ce que te propose Patrick, c'est de faire de l'Access dans Excel. Excel n'est pas du tout prévu pour ce genre de traitement, et vouloir "reproduire" Access en Excel ne t'amènera que des déboires, les codes proposés étant bien trop légers pour pouvoir tenir la route. Les propositions ne correspondent pas à ta demande initiale, en ce qu'elles les dépassent de loin, ne testent pas la validité des saisies, ne gèrent pas les erreurs. Bref, ça tire encore dans tous les sens sans aucune réflexion sur la finalité de ta demande. Du grand n'importe quoi, donc.

    Après, c'est toi qui choisis, et donc, c'est toi qui, éventuellement en fonction de tes choix, pleureras... ou pas. bon courage pour la suite
    Cher Pierre,

    Oui je souhaite bien afficher les données dans un label
    -> Je n'ai pas réussi à afficher de valeur dans ma liste bien que j'ai tenté de déclarer ma plage nommée
    Je préfère Excel à Access (et excel tourne aussi bien sur mac que sur pc ce qui n'est pas le cas d'Access)
    Je compte titer parti des fonctions de contrôle de validation des saisies fournies par Excel (date, monétaire, etc.)

    Ce que tu proposes s'énonce clairement et c'est bien cette voie-là que je compte emprunter.

    Si tu peux continuer à m'aider j'en serai enchanté
    Eric

  18. #18
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour, bonjour !

    Citation Envoyé par 1357VBA Voir le message
    excel tourne aussi bien sur mac que sur pc ce qui n'est pas le cas d'Access
    Et non, comme tu viens de le constater !     La version 2011 ayant un peu moins de problèmes que la 2016 …

    Voilà, voilà !

    ___________________________________________________________________________________________________________
    Je suis Paris, Barcelone, London, Manchester, Egypte, Stockholm, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

  19. #19
    Membre averti
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2017
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 58
    Par défaut Plage nommée : ok ; mais...
    Citation Envoyé par Pierre Fauconnier Voir le message
    Soit tu suis mon exemple et mon code et je peux alors t'aider, .../...

    Je ne saurais trop te mettre en garde par rapport à du "tout vba". Si tu n'utilises pas les tables de données comme je le propose, tu vas devoir "pondre" du code inutilement lourd.
    .../...
    A toi de faire ton choix pour une technique...
    .../...
    Déjà, comme je l'ai fait remarquer, il faudrait savoir si tu veux afficher les infos dans un label comme dans ma solution et ta demande initiale (non modifiable, donc) ou dans un textbox modifiable, et donc adapter ta demande en conséquence.
    .../...
    Après, c'est toi qui choisis, et donc, c'est toi qui, éventuellement en fonction de tes choix, pleureras... ou pas. bon courage pour la suite
    Bon grâce à tes recommandations et à celle de unparia que je n'oublie pas j'ai enfin réussi à comprendre ce qu'est une plage nommée et à la relier à un tableau (et je n'en suis pas peu fier ), la preuve en image (sous Windows) :

    Nom : Capture1.PNG
Affichages : 269
Taille : 34,6 KoNom : Capture2.PNG
Affichages : 305
Taille : 30,4 Ko

    Cependant j'ai re testé sous Mac et là vlan! car RowSource n'est pas pris en compte par ComboBox pour Office2011

    Nom : Menubar_et_Microsoft_Visual_Basic.jpg
Affichages : 248
Taille : 95,2 KoNom : Propriétés.jpg
Affichages : 257
Taille : 288,3 Ko

    Y-a-t-il une façon de contourner RowSource ?

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 12/12/2016, 08h41
  2. Réponses: 5
    Dernier message: 04/06/2016, 21h38
  3. Réponses: 6
    Dernier message: 28/05/2014, 14h16
  4. [MySQL] Ajout d'options dans une liste déroulante à partir du résultat d'une requête
    Par minogttao dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 11/12/2006, 18h18
  5. [MySQL] Une liste déroulante affichant les données d'une requête SHOW par ordre alphabétique
    Par jack_1981 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 22/12/2005, 15h53

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