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 :

Combobox et cellulle


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 21
    Par défaut Combobox et cellulle
    Bonjour a tous , (re)

    J'ia un tableau excel de cette forme
    A B C D E

    1 string heure minute entier combobox

    2 string heure minute entier combobox

    3 string heure minute entier combobox

    4 string heure minute entier combobox
    ... ... ... ... ... ...

    Mon tableau est parcouru tant que A est différent de " " (donc en gros tant que ya une chaine de caractere dans la colonne A (donc une variable i initialiser et qui s'incrémente).

    Mes combobox située dans la colonne E contiennent la mm chose et c'est a partir de la valeur choisis dans la combobox que je peux effectué mes calculs.

    Ma question est donc , comment puis je faire pour dire a mon programme a quel combobox il a affaire?(Etant donné que cela peut s'etendre a plus d'une cinquantaine de ligne, je ne peux pas le faire en fonction du nom de ma combobox.

    Merci de m'avoir lu merci d'avance a ceux qui repondront aussi ^^
    bonne journée

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 453
    Par défaut
    Tu peux essayer une fonction comme celle-ci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Function DropDownDeLaLigne(ByRef rng As Range) As Excel.DropDown
        Dim dd As Excel.DropDown
     
        For Each dd In rng.Worksheet.DropDowns
            If rng.Worksheet.Range(dd.TopLeftCell.Address).Row = rng.Row Then
               Set DropDownDeLaLigne = dd
               Exit Function
            End If
        Next dd
    End Function
    Cette fonction renvoit un objet DropDown (objet secret dans Excel qui représente les ComboBox de type Formulaire et non celui associé au UserForms). Elle prend en paramètre l'objet Range qui représente la cellule que tu calcules.

    Pour qu'elle fonctionne correctement, il faut s'assurer que les ComboBox sont bien positionnés dans les cellules appropriées (en mettant le coin haut-gauche à l'intérieur de la cellule).

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 21
    Par défaut
    Oki j'ai pas encore utilisé de fonction en VBA dc je sais pas trop comment l'appeler toussa 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
    14
    15
    16
    17
    18
    Private Sub commande1.click()
    
    i=21
    Do while cells(i,1)<>" "
     if blabla then   (je t'epargne une quinzaine de ligne de code ininterressante)
     end if 
    ICI j'appel la fonction
    youpla je recupere mon index
    if index=0 then
    blabla 
    else 
    if index=1 then
    blabla
    end if 
    end if
    i=i+1
    loop
    end sub
    Donc la fonction est censé me renvoyé le listindex.
    Mais je t'avoue mm avec tes explications ne rien comprendre a la fonction -_-'

    "Elle prend en paramètre l'objet Range qui représente la cellule que tu calcules."
    jveux juste recuperer l'index...

  4. #4
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    SAlut
    Je ne sais pas comment sont créés tes combobox mais ils ont une propriete Cellule lié, il te suffit de lier par exemple la cellule de la colonne E qui se trouve sous le combobox, ainsi quand la valeur de ton combobox change, celle de la cellule aussi

    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  5. #5
    Membre chevronné

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 453
    Par défaut
    Pour insérer la fonction dans ton projet, suis les instructions données ici.

    Pour te servir de cette fonction dans le pseudo-code que tu m'as fourni, voici un exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    Private Sub CommandButton1_Click()
        Dim i As Long
        Dim Index As Long
     
        i = 21
        Do While Cells(i, 1) <> " "
            If blabla Then
                ' (je t'epargne une quinzaine de ligne de code ininterressante)
            End If
     
            ' ICI j 'appel la fonction
            Index = DropDownDeLaLigne(Cells(i, 1)).ListIndex    ' youpla je recupere mon index
     
            ' Remplace la structure de code en If ... Then ... ElseIf ... Endif
            '   par code plus approprié au traitement de valeur de ComboBox
            Select Case Index
                Case 0
                    ' blabla
                Case 1
                    ' blabla
                Case 2
                    ' blabla
                Case 3
                    ' blabla
                Case Else
                    ' Ne fait rien si pas dans les valeurs possibles!!!
            End Select
            i = i + 1
        Loop
    End Sub
    Comme tu peux le constater, j'ai apporté quelques modifications à ton code pour te montrer comment écrire du code plus sur et plus facilement débogable.

    Je déclare les variables en début de procédure en indiquant leur type, pour être plus clair avec moi-même et les autres programmeurs ainsi que pour le compilateur.

    J'ai remplacé la structure If ... Then ... Else par une structure Select Case car celle-ci est plus claire et mieux adaptée au traitement de valeurs numériques.

    Tu peux aussi voir comment j'utilise la fonction et récupère le numéro d'Index dans le ComboBox. Cells(i,1) est un objet Range...

  6. #6
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Bonjour,
    Les objet cachés ne sont plus d'application depuis Excel 2000 bien que certaine fonctions 'fonctionnent' encore.
    Je crois que le mieux serrai de te servir d'une collection.
    Dans le fichier joint ce n'est pas des combo, mais à toi d'adapter,( je n'ai pas le temps maintenand).
    Pour la ligne suffit de nommer tes combo ComboBox* ou * représente la ligne.
    le * devrai être genre 07, 17 etc.. (pour récupérer les 2 derniers caractères du nom.
    Et quand tu à récupérer le combo tu peu connaître le ListIndex .
    Il y a aussi plusieurs exemples de collections dans la FAQ.
    A+
    Fichiers attachés Fichiers attachés

  7. #7
    Membre chevronné

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 453
    Par défaut
    Citation Envoyé par LeForestier Voir le message
    ... Les objet cachés ne sont plus d'application depuis Excel 2000 bien que certaine fonctions 'fonctionnent' encore.
    C'est vrai qu'ils ne sont plus documentés mais ils sont là pour rester; c'est une question de compatibilité avec les versions plus anciennes d'Excel.

    J'utilise personnellement ces contrôles pour leur simplicité de code (pas d'initialisations élaborées et d'emploi d'objets utilitaires tels que les Collections) car les collections sont déjà en place dans l'architecture de l'application. Il ne suffit que de connaitre leur existence pour les utiliser.

    Mais, bien sur, on devrait toujours suivre les nouveaux usages dans les versions plus récentes... Naaaan!!!

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 21
    Par défaut
    Je vous remercie , oui j'aurais du penser au select case... jpense j'aurais fini par le modifier mais merci de m'y avoir fait penser plus tot ^^.
    Je vais regarder tout cela un peu plus en détail. Et me renseigner un peu plus sur ce qui concerne les collections (que j'ai vachement de mal a intégrer).
    Merci pour ttes ces pistes je pense reposter dans la matiner pour des questions ou juste dire que c'est résolu ^^.
    Bonne journée a tout a l'heure et encore merci a vous.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 21
    Par défaut
    Pourquoi mettre les fonctions dans un module?
    Pourquoi passer par une macro?
    Si a chaque fois mon utilisateur doit aller dans outils/macro/macro mon chef va me tuer >_<

    Je vois pas l'utilité de faire ça en fait je pensais placer la fonction avant mon commande1_click(). Et dc l'appeler dans le commande1_click(). En gros un peu comme du C, tu ecris ta fonction avant et tu l'appels apres.
    Ce que j'ai fait , cependant il me renvoie l'erreur d'execution 91 (variable objet ou variable de bloc with non défini). J'ai pas de bloc wtih dc le pb vient d'une variable objet non défini. Donc certainement de ma fonction.
    J'ai mis la fonction dans le module. J'ai mis la fonction sur ma feuille de code mais avant commandbuttton1_click() , apres commandbutton1_click() mais rien y fait toujours la mm erreur. D'apres l'aide VB et en procédent par élimination , soit je dois rajouter un set ketchose , soit un truc avec des références apparement. (qui a dit que le vb etait simple que je l'etripe?)
    Jsuis vraiment dsl -_-'

    Bon je go regarder les collections now (en espérant que j'y comprenne quelque chose...)

  10. #10
    Membre chevronné

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 453
    Par défaut
    Citation Envoyé par Selune6666 Voir le message
    Pourquoi mettre les fonctions dans un module?
    Parce que c'est comme ça en VBA.

    Citation Envoyé par Selune6666 Voir le message
    Pourquoi passer par une macro?
    Parce que c'est comme ça en VBA.

    Si a chaque fois mon utilisateur doit aller dans outils/macro/macro mon chef va me tuer Si a chaque fois mon utilisateur doit aller dans outils/macro/macro mon chef va me tuer >_<[/quote]

    Il ne faut pas aller dans le menu...

    Citation Envoyé par Selune6666 Voir le message
    Je vois pas l'utilité de faire ça en fait je pensais placer la fonction avant mon commande1_click(). Et dc l'appeler dans le commande1_click(). En gros un peu comme du C, tu ecris ta fonction avant et tu l'appels apres.
    C'est comme en C; tu appelles la fonction à partir de ton code.

    Si ça ne fonctionne pas, c'est mon erreur. La ligne qui contient 'dd.TopLeftCell' dans la fonction DropDownDeLaLigne() devrait se lire 'dd.TopLeftCell.Address'. J'ai déjà édité le code dans mon message précédant.

    Aussi, pour que ta macro CommnadButton1_Click() fonctionne bien, il faudrait changer le:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Cells(i, 1) <> " " Then
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Cells(i, 1).Value <> "" Then
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Cells(i, 1).Value <> vbNullString Then
    N'oublies pas qu'il faut t'assurer de bien positionner les ComboBox DANS LA CELLULE.

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 21
    Par défaut
    If Cells(i, 1).Value <> "" Then

    C'est moi qui ai fait une faute de frappe quand j'ai renoté le code sur le forum (je travail pas sur le mm pc) mais c'etait noté correctement dans mon code ^^.

    Le programme veut rien savoir toujours la mm erreur...
    J'ai modifié la ligne , et j'ai redimmentionné la combo pour qu'elle soit bien ds la cellule.
    Veux tu que j'affiche l'integralité de mon code? Si ça peut t'aider car je t'avoue que cette histoire de fonction jsuis larguée

    Leforestier dans le document excel que tu as link a l'ouverture du classeur on a erreur d'excution 459 l'objet ou la classse ne gere pas le jeux d'evement
    bug sur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     If TypeOf Obj.Object Is MSForms.CheckBox Then
            
            Set CO = New Classe1
            Set CO.CheckBoxGroup = Obj.Object
            CollectC.Add CO
        End If

  12. #12
    Membre chevronné

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 453
    Par défaut
    Je crois comprendre le problème et, franchement, j'aurais du y penser avant!

    Tu dois utiliser les contrôles ActiveX pour les UserForms sur ta feuille.

    Mon code est fait pour les contrôles qui sont sur la barre d'outils "Formulaire" et non ceux de la "Boîte à outils Contrôles".

    Désolé.

    Mais tu pourrais quand même essayer avec ceux de "Formulaire"; ils sont plus faciles à utiliser que les autres car ils ne demandent pas de code particulier. La différence, c'est qu'ils ne gèrent pas les évenements (comme CommandButton_Click, par exemple) autres que OnAction.

    Pour utiliser le code de LeForestier, il faut que tu insère une référence à "Microsoft Forms" dans ton projet. L'objet MSForms.CheckBox fait partie d'une référence qui n'est pas incluse par défaut dans les projets.

    Pour insérer cette référence, tu dois insérer un UserForm dans ton projet; tu peux le supprimer par la suite et la référence à Microsoft Forms devrait rester en place.

Discussions similaires

  1. [XL-2007] Problème création de combobox dans cellule de listView
    Par fyejumpy dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 18/06/2015, 12h28
  2. Copier valeur choisie dans ComboBox dans cellule a chaque fois differente
    Par juliematlab dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 16/01/2013, 09h04
  3. [XL-2010] Transfert données Textbox et Combobox vers cellules
    Par justin74 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 07/05/2011, 21h30
  4. DataGrid et Combobox dans cellules
    Par sandav dans le forum Windows Presentation Foundation
    Réponses: 11
    Dernier message: 14/12/2010, 21h31
  5. Combobox dans cellule de MSFlexgrid
    Par red210 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 13/02/2008, 16h56

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