Utilisation de listindex

Résolu
Bonjour,

j'ai une combobox contenant une 10aine d'éléments
en fonction de chaque élément je complète une textbox différente
la valeur de cette textbox étant placée dans une cellule d'une colonne différente
je ne voudrais pas répéter une 10aine de fois if ... then ... ci-dessous
et je pense que la combobox.listindex serait toute indiquée
mais je ne sais pas comment procéder pour la metttre en place
Pourriez vous m'aider merci
exemple la valeur "dépenses fonctionnement" sera toujours dans la colonne D cellule d2 ou d3 etc....

If ComboBox3.Value = "Dépenses fonctionnement" Then
Sheets("Journal").Range("D" & DernLigne).Value = TextBox7.Value
End If

25 réponses

  • Votes
  • Date
  • Date décroissante
Résumé de la discussion

Problème posé : automatiser l’écriture dans les colonnes d’une feuille Excel à partir des saisies d’un formulaire via une combobox, sans multiplier les tests If…Then, et parvenir à une répartition sur la même ligne. Plusieurs éléments de solution existent, mais l’approche proposée est d’utiliser ListIndex et un tableau NumCol pour mapper chaque élément sélectionné à une colonne précise, évitant ainsi les longues chaînes conditionnelles. Par exemple, le bouton d’envoi écrit les valeurs des TextBox dans les colonnes A, B et C sur la même ligne, puis place TextBox7 dans la colonne selon ListIndex via NumCol. En pratique, NumCol est défini comme Array(4,5,7) ou extension équivalente pour couvrir davantage d’éléments, et la fonction recherche la dernière ligne pour écrire les valeurs.

Bobot (l’IA à votre service)
  1. Bonjour
    voila un nouveau un fichier
    http://www.cjoint.com/c/FAxnNzc6rWh
    A+
    Maurice
    1. Contributeur
      Bonjour,

      je pense que la combobox.listindex serait toute indiquée
      Cette propriété du combobox te donnes la position de l'élément sélectionné, le premier étant zéro.
      Tu peux aussi l'utiliser pour choisir ta textbox mais je n'ai pas nécessairement tout compris dans ton explication. Cela peut donner
      Sheets("Journal").Cells(DernLigne, ComboBox3.listindex + 1 ).Value = Me.Controls("TextBox" & ComboBox3.listindex + 1).Value
      1. Bonjour gbinforme
        en fait chaque élément de ma combobox correspond à une colonne de ma feuille excel et chaque fois que je compléte ma textbox après avoir sélectionnée mon élément la valeur de ma textbox s'inscrit dans la cellule
        correspondant à la colonne concernée.
        exemple l'élément "dépenses fonctionnement" correspond à la colonne D lorsque je sélectionne cet élément et complète ma textbox la valeur de cette textbox va s'inscrire dans la cellule D3 dernière cellule blanche
        l'élément "dépenses fourniture" correspond à la colonne B de ma feuille la valeur de ma textbox va s'inscrire dans B4
        est ce un peu plus clair ??

        merci
        1. Contributeur
          Bonjour max850,

          Pour la colonne D ton listindex sera donc égal à 3, ce qui donne :
          Sheets("Journal").Cells(Cells(Rows.Count, ComboBox3.listindex + 1 ).End(xlUp).Row + 1, ComboBox3.listindex + 1 ).Value = TextBox7.Value 

          avec "
          ComboBox3.listindex + 1 
          " = 4 donc colonne D
          et
          Cells(Rows.Count, ComboBox3.listindex + 1 ).End(xlUp).Row + 1
          dernière cellule blanche de la colonne D.
          Si tu es sur la première valeur de ton combo (listindex = zéro) tu vas en colonne A.
        2. @gbinformebonsoir gbinforme

          voici un exemple de ce que j'ai fait et qui fonctionne

          Private Sub CommandButton2_Click()

          With Sheets("Journal")

          DernLigne = Cells.Find("*", , , , , xlPrevious).Row + 1

          .Range("A" & DernLigne).Value = TextBox3.Value
          .Range("B" & DernLigne).Value = TextBox4.Value
          .Range("C" & DernLigne).Value = TextBox5.Value

          If ComboBox3.Value = "Dépenses fonctionnement" Then
          Sheets("Journal").Range("D" & DernLigne).Value = TextBox7.Value
          End If
          If ComboBox3.Value = "Autres dépenses" Then
          Sheets("Journal").Range("G" & DernLigne).Value = TextBox7.Value
          End If
          If ComboBox3.Value = "Dépenses pour manif" Then
          Sheets("Journal").Range("E" & DernLigne).Value = TextBox7.Value
          End If

          End With
          End Sub

          je n'ai utilisé que 3 élements de ma combobox
          mais j'en aurai au moins 6
          aussi il existe certainement une façon de procéder qui m'évite de mettre autant de if ... then que d'éléments de ma combobox dans ma procédure

          j' aurais du commencer par 'envoyer cet exemple au lieu de mes explications biscornues

          Désolé
        3. Contributeur
          Bonjour,
          Ma formule ne fonctionne pas ?
          Si tu veut la dernière cellule blanche de la colonne A, tu mets :
          Sheets("Journal").Cells(Cells(Rows.Count, "A" ).End(xlUp).Row + 1, ComboBox3.listindex + 1 ).Value = TextBox7.Value 
        4. @gbinformebonjour gbinforme
          ce que je voudrais c'est que toutes les infos entrées dans le userform se trouvent sur la même ligne
          sachant que les cellules des colonnes a b c seront toujours alimentées
          parexemple
          cellule
          A5 XXXXX B5YYYYYY C5DDDDD les cellules des colonnes D ou E ou F seront alimentées sur même ligne 5 même si les cellules de ces colonnes étaient vides auparavant

          merci
        5. @max850désolé gbinforme mais ça ne marche pas
          je voudrais que la valeur de l'élément sélectionné dans la combobox (textbox7.value) s'inscrive à droite des données des cellules A B C de ma dernière ligne dans la cellule correspondante qui pourra être la cellule D E F ... en fonction de l'index de la combobox
          ces cellules étant obligatoiremen vides

          merci pour ta patience
          il n'y a pas longtemps que je pratique VBA ceci explique cela
      2. Bonjour

        je pense a un truc comme ca
        Private Sub CommandButton2_Click()
        '4 = Index 0
        '5 = Index 1
        '7 = Index 2
        NumCol = Array(4, 5, 7)
        DernLigne = Cells.Find("*", , , , , xlPrevious).Row + 1
           With Sheets("Journal")
              .Range("A" & DernLigne).Value = TextBox3.Value
              .Range("B" & DernLigne).Value = TextBox4.Value
              .Range("C" & DernLigne).Value = TextBox5.Value
              .Cells(DernLigne, NumCol(ComboBox3.ListIndex)) = TextBox7.Value
           End With
        End Sub
        

        pour la suite sans ton fichier on ne peux rien faire
        A+
        Maurice
        1. Bonjour Maurice

          Voici le lien pour accéder à mon fichier
          qui n'est qu'une ébauche

          http://www.cjoint.com/c/FAwjYktVQ1b

          merci
          1. Bonjour
            ou se trouve l'onglet "Journal"
            dans onglet "var" mettre dans la colonne G les numéro de colonne

            A+
            Maurice
            1. Bonjour
              tes numéro sont pas bon tu a un problème de structure
              ou alors j'ais rien compris

              http://www.cjoint.com/c/FAwppNYBGRY

              A+
              Maurice
              1. Bonsoir Maurice
                Qu'entends tu par numéro de colonne ?
                est ce 1 pour la colonne A
                2 pour la colonne B
                etc .....
                1. Bon jour Maurice j'ai bien ta notification du 23 me
                  disant que j'avais un nouveau fichier

                  http://www.cjoint.com/c/FAxnNzc6rWh

                  mais je n'arrive pas à y accéder
                  1. ca y est maintenant
                    en t'envoyant l info et en y ajoutant le lien
                    celuici passe en bleu et je peux y accéder

                    je dois partir maintenant
                    je te tien informé de la suite ce soir

                    merci
                  2. @max850Maurice
                    j'ai maintenant un autre problème
                    lorsque j' ouvre ton fichier
                    et lance l'application j'ai le message d'erreur suivant

                    Impossible charger le objet car il n'est pas disponible sur cette machine

                    je peux visualiser le code
                    il y a une flêche bleue au niveau de tex=array(10, 9)
                    et elle ne va pas plus loin

                    j'utilise excel 2007 win8.1 64bits

                    quel objet serait manquant ?

                    je n'ai pas d'autre PC pour essayer

                    merci
                2. Bonsoir Maurice,

                  J'ai contourné le problème de "impossible de charger l'objet ...."
                  en décochant les lignes maquées "manquants" dans référence
                  et en rendant inactif DTPicker1
                  ce qui m'a permis d visualiser ton code

                  j'ai juste apporté un petit réajustement au niveau des numéros de colonnes
                  dans la feuille "var"

                  Tout est impec
                  je vais pouvoir poursuivre ..

                  Quand vous aurez le temps (toi, gbinform ou quelqu'un d'autre) pourrez vous m'indiquer comment résoudre ce problème d'objet manquant

                  merci beaucoup pour votre aide
                  1. Bonjour,
                    Juste au passage, sans savoir où et comment vous lancez l’application, il est impossible de vous aider concernant l’objet manquant...!
                    Vous dites :
                    "impossible de charger l'objet ...."
                    en décochant les lignes maquées "manquants" dans référence
                    et en rendant inactif DTPicker1

                    Eh bien il y a un texte qui précise ce qui manque…. !
                    Donc vous cherchez dans la suite de la liste la ligne qui correspond et vous la cochez.

                    Salutations.
                    Le Pingou
                    1. Bonjour lePingou

                      "impossible charger le objet car il n'est pas disponible sur cette machine"

                      manquant : Microsoft windows common controls 60 (sp6)

                      manquant : Microsoft wind0ws common controls 60 (sp6)
                      chemin d'accès c:\WINDOWS\systems32\MSCOMCTL.OCX

                      et coché également
                      manquant : Microsoft windows common controls-2 60 (sp6)

                      j'ai trouvé ces fichiers mscomctl.ocx dans systems32
                      dans le répertoire systems32 dossiers:\dossier.ocx

                      j'ai regardé dans sysWOW64 et n'ai rien trouvé

                      "Donc vous cherchez dans la suite de la liste la ligne qui correspond "
                      je n'ai pas trouvé de DTPicker dans la suite de la liste

                      c'est pour cela que j'avais rendu DTPicker inactif dans la procédure
                      supposant que c'était cet objet qui était manquant
                      1. Bonjour,
                        Je continue sur ce poste.
                        Avez-vous coché les 2 références Oui / Non. ?
                        Si Oui alors au lancement de votre application que recevez-vous comme erreur… ?

                        1. Bonjour,
                          Petit complément : vous ouvrez votre formulaire [Essai Compta] en mode création ensuite afficher la [Boite à outils] et clic droit et clic sur [Contrôles supplémentaires].
                          Dans la liste vous cherchez : Microsoft Date and Time Picker Control 6.0… le cocher et terminer par OK.

                          1. Bonsoir Le Pingou
                            j'avais déjà fait ce que vous préconisez dans le petit complément.
                            j'avais les deux lignes que vous avez entourées de rouge, cochées et débutant
                            par "manquant:"
                            me doutant que mon problème pouvait venir de l'objet dtpicker
                            j'ai regardé si microsoft Date et time picker control figurait dans les controls supplémentaires pour éventuellement l'activer. je n'ai rien trouvé.
                            j'ai décoché les deux lignes et désactivé ce qui se rapportait au dtpicker dans Essai Compta : je n'avais plus de message d'erreur

                            Ensuite j'ai cherché dans Windows les fichiers correspondant à mscomctl.ocx

                            j'ai trouvé ces fichiers mscomctl.ocx dans le répertoire systems32 dossiers:\dossier.ocx

                            j'ai regardé aussi dans sysWOW64 et n'ai rien trouvé

                            voila où j'en suis
                            1. bonjour

                              Pour le dtpicker if faut ocx (mscomct2.ocx)
                              et a mettre dans c:\windows\systems32
                              et mscomctl.ocx ses pour faire les Listview

                              A+
                              Maurice
                              1. me revoilà
                                j'ai cliqué sur votre lien
                                mais il est relatif à excel 2010
                                j'ai excel 2007 et apparemment pas les mêmes commandes
                                j'ai pu modifier le contrôle de compte utilisateur mais je n'ai pas pu allé plus
                                loin
                                je suis sous win 8.1 64 bits
                                1. le fichier MSCOMCT2.OCX se trouve dans le dossier Dossier.ocx

                                  C:\Windows\System32\Dossier .ocx
                              2. Bonjour,
                                Oui c’est 2010 mais la procédure est identique pour l’essentielle.
                                Cependant je vous précise que le fichier MSCOMCT2.OCX doit se trouver impérativement dans le répertoire c:\windows\systems32\ soit : c:\windows\systems32\mscomct2.ocx.

                                Je vous propose cette autre procédure :
                                Placer le fichier MSCOMCT2.OCX dans le répertoire C:\windows\System32
                                puis utilisez le menu Démarrer/Exécuter.
                                Saisissez ou collez: regsvr32 c:\windows\System32\MSCOMCT2.OCX
                                Cliquez sur le bouton Ok.

                                • 1
                                • 2