[EXCEL VBA] => Lister des combobox et écrire leur contenu
Répondre à la discussion
Affichage des résultats 1 à 4 sur 4

[EXCEL VBA] => Lister des combobox et écrire leur contenu



  1. #1
    invite1e5716ed

    [EXCEL VBA] => Lister des combobox et écrire leur contenu


    ------

    Bonjour,

    Je voudrais faire varier le numéro d'une combobox, le problème c'est que je n'arrive pas à mettre, je pense, une syntaxe correcte.

    Voici mon code :
    ______________________________ __
    dim num_combobox as variant

    num_combobox = 2


    'C'est ici que je n'arrive pas à faire varier ma combobox. La syntaxe est fausse, et là est mon problème

    cells (1,1) = ComboBox & num_combobox.Value

    ______________________________ __

    Je débute en VB au fait... J'ai cherché mais pas trouvé de réponse...

    Voilà.

    Je veux faire un tel code car j'ai 40 combobox à aller lire, et à chaque fois j'ai les mêmes opérations (longues!), donc je ne vais pas aller tout copier-coller et changer les variables 40 fois...

    Merci de votre aide!

    -----

  2. #2
    EspritTordu

    Re : [EXCEL VBA] => Lister des combobox et écrire leur contenu

    Vous avez beaucoup de combobox, et souhaitez les contrôler par un index numérique pour éviter de répéter le code une multitude de fois, n'est-ce pas?

    Quel Excel avez-vous? si ce n'est pas Excel d'Office de Vista alors Le VBA est une version dérivée de Visual Basic 6.0.
    Dans ce dernier les contrôles peuvent être regroupés en un "groupe de contrôle" permettant d'identifier alors ces derniers facilement par un index numérique: en clair, vous créez deux combos, avec le même nom, et VB vous demande si vous voulez créez avec ceux-ci un groupe, portant le nom commun du combo, mais où les combos sont identifiés séparement par le nom du groupe dont il font parti plus un nombre d'index. (dans la mesure qu'il est impossible d'avoir des contrôles, quels qui soient, ayant le même nom!)
    Après il ne vous reste alors plus qu'à faire varier l'index dans le code pour accéder en une boucle for simple aux contrôles groupés:
    Code:
    'J'ai créé deux combos, j'accède dans ce code à leur propriété text par exemple
    
    dim i as long
    
    for i=1 to 2 
    
    MonCombo(i).text="Combo " & i
    
    next i
    Le hic, c'est que dans VBA, cette fonction pratique n'a pas été transposée() : il n'est pas possible, à ma connaissance, de faire des groupes de contrôles dans Excel VBA 6.0 !!!


    Grouper les contrôles est une chose parfois qui devient brouillon : on ne sait plus à quel groupe le contrôle que l'on a dessiné appartient, surtout si on a plusieurs groupes.

    D'autres solutions existent. En voilà deux (qu'on peut d'ailleurs être combiner pour avoir un code plus confortable!).
    Vous pouvez créer une sub, ou une fonction, dans laquelle vous faîtes exécuter votre opération, en généralisant, le combo et les variables nécessaires. Alors, il ne vous reste plus qu'a appeler cette fonction/sub autant de fois qu'il y a de combo et en adaptant les variables à chaque fois.

    Code:
    Sub MonOperation (Variable1 as string, Variable2 as long)
    '.... lignes d'opérations
    end sub
    
    
    sub load () 'Par exemple
    
    Moncombo1.text=MonOperation ("Rouge", 10)
    Moncombo2.text=MonOperation ("Vert", 30)
    '... on continue
    end sub

    Une autre possibilité, c'est de demander de lister tous les contrôles dessinés sur la feuille UserForm et de distinguer ceux que vous avez astucieusement nommés (cela revient implicitement à créer un groupe de contrôle en fait):
    Code:
    'J'ai créé plusieurs combos sur une feuille type Windows nommée UserForm1, dont les noms sont composés ainsi Moncombo01, Moncombo02...
    Dim obj as object, i as long
    
    For each Obj in UserForm1.controls
     
    if Obj.name=lcase(left(obj.name, len(obj.name)-2))="moncombo"  then obj.text="MonCombo"
    
    next
    C'est une méthode parmi d'autres, plus ou moins discutable d'ailleurs, la propriété left permettant d'extraire de la chaîne de caractères du nom de contrôle, la chaîne "moncombo" qu'on utilise pour identifier les combos souhaités ; cela suppose qu'il n'y a pas de combos que l'on ne veut pas considérer ayant dans leur nom la chaîne "moncombo". La fonction lcase() est une précaution, pour que dans l'égalité on ne considère pas la casse(minuscules/majuscules) des chaînes de caractères mises en jeu ; cette dernière convertit effectivement toutes chaînes en minuscules (Ucase convertit tout en majuscules)

    J'espère vous faire avancer!

  3. #3
    invite1e5716ed

    Re : [EXCEL VBA] => Lister des combobox et écrire leur contenu

    Oui vous m'avez bien fait avancer, et vous m'avez même appris des choses dont je n'ai pas forcement besoin!

    Merci beaucoup pour votre réponse si complète (ce qui est rare!)

    Merci!

  4. #4
    EspritTordu

    Re : [EXCEL VBA] => Lister des combobox et écrire leur contenu

    J'aimerais revenir sur un point, une erreur : il ne s'agit pas d'une sub MonOperation, mais nécessairement d'une fonction (function); outre une différence de nomination pour une chose assez similaire, c'est qu'avec une sub vous ne pouvez pas extraire un résultat dans une égalité tel que MonCombo1.text=Monoperation ("Rouge", 10). Une sub vous permet seulement d'écrire Monoperation ("Rouge", 10) et d'éxécuter les opérations qu'elle contient en fonction des variables indiquées, rouge et 10 en l'occurence.
    Dernière modification par EspritTordu ; 20/05/2008 à 10h17.

  5. A voir en vidéo sur Futura

Discussions similaires

  1. Ecrire dans un table Access avec VBA
    Par Papy Octet dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 12/01/2010, 17h16
  2. problème utilisation VBA sur excel 2007
    Par invite7b559047 dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 16/02/2007, 01h00
  3. Contrôles et VBA en Excel
    Par invite6de5f0ac dans le forum Logiciel - Software - Open Source
    Réponses: 6
    Dernier message: 20/10/2006, 12h09
  4. Publipostage en vba de excel vers word
    Par invite588da7a7 dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 21/07/2004, 10h45
  5. Impression excel / vba
    Par invite83451e7e dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 05/03/2004, 10h10
Découvrez nos comparatifs produits sur l'informatique et les technologies.