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 des valeurs d'une combobox avec plusieurs colonnes [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2021
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2021
    Messages : 28
    Par défaut Copier des valeurs d'une combobox avec plusieurs colonnes
    Bonjour à tous,
    Je reviens vers vous car je bloque depuis un moment sur une commande.
    Je possède plusieurs combobox ayant plusieurs colonnes et je cherche comment faire pour coller plusieurs valeurs de ma combobox (sur 6 colonnes)en même temps sur une plage de cellule que je définis comme la range (AH2:AS2) par exemple.
    J'avais trouvé cette solution mais je n'arrive pas à l'utiliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub ComboBox1_Change()
     
    With ComboBox1
      .Text = .Column(0, .ListIndex) & " " & .Column(1, .ListIndex)
    End With
    End Sub
    Merci d'avance !

  2. #2
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 371
    Par défaut
    Bonjour,

    Je n'ai pas vraiment saisi la question mais je remarque que AH2:AS2 prend 12 colonnes alors que la combobox n'en aurait que 6.

    Cordialement.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2021
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2021
    Messages : 28
    Par défaut
    Salut Eric,
    Déjà merci pour ta réponse.
    Alors je possède des combobox à plusieurs colonnes comme dit précédemment, et j'aimerai pouvoir choisir toute une ligne avec donc les 6 valeurs que je pourrai mettre sur une rangée, exemple première colonne il y "chaudiere", deuxième vide, troisième "1", ainsi de suite jusqu'à la sixième colonne...
    Oui c'est parce que les combobox seront à 12 colonnes plus tard mais il faudrait déjà que j'arrive ma manip avant cela
    J'essaye d'être claire n'hésite pas pour plus d'info.

  4. #4
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 371
    Par défaut
    Bonjour,

    Quelque chose de ce genre ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub ComboBox1_Change()
        Dim rC As Range
        ThisWorkbook.Worksheets("Test").Select
        Set rC = Range("B2")
        rC.Value = ComboBox1.Column(0)
        rC.Offset(0, 1) = ComboBox1.Column(1)
        rC.Offset(0, 2) = ComboBox1.Column(2)
        '--- etc.
        Set rC = Nothing
    End Sub
    Cordialement.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2021
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2021
    Messages : 28
    Par défaut
    C'est exactement ça je cherche depuis des jours j'étais au bout au grand MERCI à toi vraiment
    Bonne journée.

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2021
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2021
    Messages : 28
    Par défaut
    Alors je rencontre un autre problème, c'est que j'ai arrangé pour mon code mais j'ai une erreur.
    J'ai modifié la propriété de ma liste pour qu'elle puisse avoir 12 colonnes, j'ai donc fais ceci :

    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
    Dim rC As Range
        ThisWorkbook.Worksheets("LP").Select
        Set rC = Range("AH2")
        rC.Value = List_actionneur.Column(0)
        rC.Offset(0, 1) = List_actionneur.Column(1)
        rC.Offset(0, 2) = List_actionneur.Column(2)
        rC.Offset(0, 3) = List_actionneur.Column(3)
        rC.Offset(0, 4) = List_actionneur.Column(4)
        rC.Offset(0, 5) = List_actionneur.Column(5)
        rC.Offset(0, 6) = List_actionneur.Column(6)   ' erreur ici
        rC.Offset(0, 7) = List_actionneur.Column(7)
        rC.Offset(0, 8) = List_actionneur.Column(8)
        rC.Offset(0, 9) = List_actionneur.Column(9)
        rC.Offset(0, 10) = List_actionneur.Column(10)
        rC.Offset(0, 11) = List_actionneur.Column(11)
        rC.Offset(0, 12) = List_actionneur.Column(12)
        Set rC = Nothing
    Et j'ai une erreur qui me dit "Impossible de lire la propriete column. Argument non valide".
    Saurais-tu pour qu'elle raison ?

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

    il faut travailler avec un tableau structuré. Ce serait bien plus simple pour transférer les données, et pour gérer ton projet d'une manière générale.

    Un combobox numérote ses colonnes à partir de 0: 0 =>12 = 13 colonnes Si l'erreur survient lorsque tu essaies de manipuler List_actionneur.Column(6), c'est que ton combo contient 6 colonnes (de 0 à 5).


    Pourrais-tu expliquer un peu plus en détails ce que tu cherches à réaliser?
    "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...
    ---------------

  8. #8
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 371
    Par défaut
    C'est comme si List_actionneur ne contenait encore que 6 colonnes.
    Column(6) = 7e colonne ... qui n'existe pas.
    List_actionneur.ColumnCount indique ce nombre de colonnes.

    La numérotation de colonnes commence à 0
    => 6 colonnes: n° de 0 à 5
    => 12 colonnes: n° de 0 à 11.

    Cordialement.

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2021
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2021
    Messages : 28
    Par défaut
    Bonjour Pierre, merci de ta réponse !
    Alors je suis plutôt débutant sur excel donc je ne saurai pas utiliser un tableau structuré comme tu dis haha.
    J'ai compris ce que vous voulez me dire pour mes colonnes mais je ne vois pas pourquoi à partir de la 6eme ça ne marche plus

    Et pour mon projet je cherche à réaliser une liste de points à l'aide de liste déroulante qui utilisent des valeurs dans des tableaux qui sont dans d'autres feuilles.
    D'où le fait que j'ai besoin de plusieurs colonnes dans ma liste
    Lorsque je choisis un élément de ma liste, j'aimerai que toute la ligne se colle, donc le code d'Eric répondait bien à mon attente.

  10. #10
    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
    Quand on est débutant, c'est le bon moment pour apprendre les bonnes techniques plutôt que les mauvaises, non? Quand on est débutant, on manipule des combobox et on transfère des données dans Excel par VBA?

    Tu es bien conscient que le code que tu donnes va toujours placer tes données sur la ligne 2? Tu dis dans ton message initial "AH2:AS2 par exemple). Je suppose qu'après ce sera AH3:AS3, puis AH4:AS4, etc...

    Un tableau structuré est simple à prendre en main et clarifie très nettement ton code (voir mon tuto sur les tableaux structurés). Il découple ton code de positions rigides et hardcodées (références fixées une fois pour toutes dans ton code) qui font que la moindre modification structurelle de ta feuille Excel est potentiellement accidentogène.

    Si tu disais ce que tu cherches à réaliser/apprendre? On pourrait t'aiguiller vers les meilleurs techniques.
    "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...
    ---------------

  11. #11
    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 Tom_74 Voir le message
    [...]je ne vois pas pourquoi à partir de la 6eme ça ne marche plus[...]
    Eric et moi te l'avons pourtant expliqué. La numérotation des colonnes démarre à 0. La première colonne est donc la colonne 0. Si tu as 6 colonnes dans la combobox, leur numérotation va de 0 à 5. Si tu ne sais pas atteindre combobox(6), c'est parce que tu n'as que 6 colonnes dans la combo. Tu dois donc en modifier la propriété pour en avoir 12 (0 à 11).

    La question que je me pose est la suivante: Pourquoi as-tu besoin de renvoyer les données d'une combobox dans une feuille Excel? D'où viennent les données qui sont dans la combo? A nouveau, que cherches-tu à réaliser (en français, sans jargon Excel ou VBA, avec des copies d'écran significatives)? On peut t'aider sur chaque ligne qui va poser problème, mais tu auras quand même une usine à gaz qui fuit de partout.

    Apprendre, puisque tu es débutant, c'est accepter de se remettre en question et écouter ce que les experts ont à te dire
    "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...
    ---------------

  12. #12
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2021
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2021
    Messages : 28
    Par défaut
    Alors j'ai en tout 4 combobox :"List_install", "List_actionneur", "List_capteur" et "List_gene".
    Ce que je fais c'est que je choisis d'abord mon installation dans "List_install", puis je choisis soit un capteurs, soit un actionneurs soit une généralités, une fois choisit ça me colle mon installation dans mon tableau colonne installation et le reste dans les autres colonnes.
    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    i = 8
    While Cells(i, 4).Value <> ""
        i = i + 1
    Wend
     
    While Cells(i, 5).Value <> ""
        i = i + 1
    Wend
        Cells(i, 4).Value = Range("AH1").Value
        Range("AH2:AS2").Select
        Selection.Copy
        Cells(i, 5).Select
        Sheets("LP").Paste
    Et j'avais donc ajouté le code d'Eric au dessus, donc je ne sais pas si un tableau peut répondre à mes attentes ?

  13. #13
    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
    Un tableau structuré peut plus que probablement répondre à tes besoins.

    Pourrais-tu mettre une copie d'écran de la feuille Excel et du userform? A ce stade, le fichier en lien peut être une bonne idée.

    Dans le code que tu viens de donner, point de combobox => c'est pourtant la pierre d'achoppement, me semble-t-il. Il est donc raisonnable pour nous d'attendre que tu donnes le code qui utilise la (les) combobox qui posent problème...

    "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...
    ---------------

  14. #14
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2021
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2021
    Messages : 28
    Par défaut
    J'ai besoin de renvoyé les données dans mon tableau car on doit choisir un éléments des liste et ça doit être visible directement.
    Ensuite mes listes utilisent chacune une base de donnée différente, j'ai créer une feuille pour chaque donc une feuille installation, une autre actionneurs, etc..
    Le principe général c'est de pouvoir remplir ce tableau avec mon panneau de commande sur le côté
    Nom : Capture.PNG
Affichages : 121
Taille : 64,9 Ko

  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
    Je ne vois pas les colonnes du tableau qui correspondent à Actionneurs et autres combobox... mais on avance.

    Déjà, basiquement, je me passerais de VBA et je mettrais des listes de validation dans les colonnes du tableau structuré qui s'appuient sur les tables annexes. Éventuellement, un bouton permet d'arriver sur une nouvelle ligne du tableau.

    Si vraiment on veut passer par ton cadre de saisie, pourquoi pas. Perso, là encore, je privilégierais les listes de validation dans les cellules, et un simple transfert de données de ce "formulaire" dans le tableau structuré.


    Si vraiment tu veux passer par des contrôles, il faut préciser si ce sont des combobox de formulaire ou des activex
    "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
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2021
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2021
    Messages : 28
    Par défaut
    Je ne possède pas de userform, je n'arrive pas à joindre mon fichier car trop lourd.
    Puis-je vous l'envoyer par mail pour voir ?

  17. #17
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2021
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2021
    Messages : 28
    Par défaut
    Citation Envoyé par Pierre Fauconnier Voir le message
    Je ne vois pas les colonnes du tableau qui correspondent à Actionneurs et autres combobox... mais on avance.
    Si vraiment on veut passer par ton cadre de saisie, pourquoi pas. Perso, là encore, je privilégierais les listes de validation dans les cellules, et un simple transfert de données de ce "formulaire" dans le tableau structuré.
    Si vraiment tu veux passer par des contrôles, il faut préciser si ce sont des combobox de formulaire ou des activex

    Oui pardon je n'ai pas précisé que actionneurs, capteurs et généralités se trouvaient dans équipements.
    Oui c'est mon tuteur qui m'a demandé de faire comme ceci, structure était plus ou moin imposé.
    Ce sont des activex.

    Et dans ce tableau les intervenants pourront ajouter un équipements dans les bases de données quand ils le veulent et il s'ajoutera directement à la liste.
    Ensuite ils peuvent aussi insérer une ligne où ils le veulent dans le tableau et l'équipements s'ajoutera automatiquement sur la ligne vide, sinon à la suite.

  18. #18
    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
    Si on part sur un formulaire "cellules", voici un exemple avec quelques lignes de code

    Au départ, on crée les tableaux structurés (t_Données pour les données finales et les tableaux qui vont alimenter les listes de validation). Je les mets ici sur la même feuille, mais on veillera par la suite à les placer sur des feuilles séparées.

    On crée quelques cellules nommées (une par "case" du formulaire, et une pour toutes les cellules de saisie du formulaire).
    On crée les listes de validation sur base des tableaux.

    Nom : 2021-06-03_154536.png
Affichages : 133
Taille : 37,8 Ko

    Le code est ultra compact pour ajouter une ligne au tableau. Tu remarques que nulle part on ne parles de feuille ou de cellule Ah2 ou autre. Si on ajoute des colonnes, il suffit de compléter l'array. L'ordre des paires n'a pas d'importance...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub AddValues()
      Dim r As Long
      Dim Map
      Dim i As Long
     
      Map = VBA.Array("fService", "Service", "fType", "Type", "fMontant", "Valeur")
      r = Range("t_Données").ListObject.ListRows.Add.Index
      For i = 0 To UBound(Map) Step 2
        Range("t_données[" & Map(i + 1) & "]")(r).Value = Range(Map(i)).Value
      Next i
      Range("Formulaire").ClearContents
    End Sub
    FormulaireSaisie.xlsm
    "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...
    ---------------

  19. #19
    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
    Avec des activex, c'est le même principe...

    Nom : 2021-06-03_160823.png
Affichages : 125
Taille : 36,3 Ko


    On les initialise avec une procédure du module de la feuille qui les contient

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub btnInit_Click()
      cboService.List = Range("t_Services[Service]").Value
      cboType.List = Range("t_Types[Type]").Value
    End Sub
    Au clic sur le bouton de validation, on appelle la proc de transfert puis la proc de nettoyage qui permettent de transférer les données puis de nettoyer la plage de saisie.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub btnValidate_Click()
      AddValues
      ClearForm
    End Sub

    Les procédures de transfert et de nettoyage sont les suivantes:

    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
    Sub AddValues()
      Dim r As Long
      Dim Map
      Dim i As Long
     
      Map = VBA.Array("cboService", "Service", "cboType", "Type", "tboMontant", "Valeur")
      r = Range("t_Données").ListObject.ListRows.Add.Index
      For i = 0 To UBound(Map) Step 2
        Range("t_données[" & Map(i + 1) & "]")(r).Value = Me.Shapes(Map(i)).OLEFormat.Object.Object.Value
      Next i
    End Sub
     
    Sub ClearForm()
      Dim Ctrls
      Dim i As Long
     
      Ctrls = VBA.Array("cboService", "cboType", "tboMontant")
      For i = 0 To UBound(Ctrls)
        Me.Shapes(Ctrls(i)).OLEFormat.Object.Object.Value = ""
      Next
    End Sub
    FormulaireSaisieActiveX.xlsm
    "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...
    ---------------

  20. #20
    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
    Si on le souhaite, comme tu le mentionnes, on peut placer un bouton qui déterminera la ligne active comme ligne d'enregistrement. On pourrait aussi décider de la chose suivante: Un seul bouton => Si on est dans le tableau, on insère, si on est hors tableau, on ajoute (perso j'aime pas trop). C'est juste une question d'ergonomie.

    Dès lors, la procédure d'ajout reçoit l'index de la ligne, la procédure du bouton d'ajout est modifiée pour calculer l'index de la nouvelle ligne et le bouton d'insertion teste qu'on est dans le tableau et calcule l'index de la ligne à insérer

    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
    Private Sub btnInsert_Click()
      Dim r As Long
     
      If Not Intersect(ActiveCell, Range("t_Données")) Is Nothing Then
        r = ActiveCell.Row - Range("t_données").Row
        r = Range("t_Données").ListObject.ListRows.Add(r).Index
        AddValues ActiveCell.Row - Range("t_données").Row
      Else
        MsgBox "Vous devez sélectionner une cellule du tableau"
      End If
    End Sub
     
    Private Sub btnValidate_Click()
      AddValues Range("t_Données").ListObject.ListRows.Add.Index
      ClearForm
    End Sub
     
    Sub AddValues(r As Long)
      Dim Map
      Dim i As Long
     
      Map = VBA.Array("cboService", "Service", "cboType", "Type", "tboMontant", "Valeur")
      For i = 0 To UBound(Map) Step 2
        Range("t_données[" & Map(i + 1) & "]")(r).Value = Me.Shapes(Map(i)).OLEFormat.Object.Object.Value
      Next i
    End Sub

    Avec les tableaux structurés et selon mes critères de ce qu'est la simplicité, tu simplifies beaucoup ton code et tu peux le faire évoluer très facilement.
    "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...
    ---------------

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. copier des valeurs d'une table
    Par kensem dans le forum Développement
    Réponses: 11
    Dernier message: 08/02/2011, 15h28
  2. [XL-2003] copier des valeur d'une ligne selectionnées
    Par bosk1000 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 12/02/2010, 07h58
  3. [A-03] Comment alimenter une combobox avec plusieurs tables
    Par MichaSarah dans le forum VBA Access
    Réponses: 3
    Dernier message: 15/01/2009, 11h02
  4. ajouter des valeurs dans une ComboBox (zone de liste modifiable)
    Par ghosty04 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 01/12/2008, 18h11
  5. Réponses: 28
    Dernier message: 07/06/2006, 13h30

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