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 :

probleme actualisation d'une combobox générée par macro.


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 20
    Points : 8
    Points
    8
    Par défaut probleme actualisation d'une combobox générée par macro.
    bonjour j'ai créé une combobox sur une feuille excel et je souhaiterai que lorsque je choisi un élément de la liste et je voudrai que la cellule adjacente affiche une formule relative à l'élément séléctionné. (pour celà j'ai créer un tableau).
    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
    Sub userform_initialize()
        With feuil1
            Set S = .DropDowns.Add(.Cells(14, 2).Left, .Cells(14, 2).Top, .Range(Cells(14, 2), _
                                                                                 Cells(14, 3)).Width, .Cells(14, 2).Height)
        End With
     
        tl(0, 0) = "Générale SNCF"
        tl(0, 1) = "0.65*L+13*n+0.01*L*V+0.03*V^2"
        tl(1, 0) = "DB BR201"
        tl(1, 1) = "0,96+3.83*((V+20)/100)^2"
        tl(2, 0) = "DB BR211"
        tl(2, 1) = "1.37+4.95*(v/100)^2"
        tl(3, 0) = "DB BR212"
        tl(3, 1) = "1.39+4.95*(V/100)^2"
        tl(4, 0) = "DB BR215"
        tl(4, 1) = "2.80+3.48*(V/100)^2"
        S.Select
     
        S.Name = "CbLoco"
     
        S.List = Array(tl(0, 0), tl(1, 0), tl(2, 0), tl(3, 0), tl(4, 0))
    End Sub
    J'ai essayé de faire une commande actualize mais ça ne marche pas du tou, j'ai un message d'erreur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub S_actualize()
     
    feuil1.Cells(14, 4).Value = tl(cbloco.ListIndex - 1, 1)
    End Sub
    Est-ce que quelqu'un a une idée, je n'ai pas envie de faire une userform, j'en ai déjà plusieurs.

  2. #2
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2008
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2008
    Messages : 155
    Points : 178
    Points
    178
    Par défaut
    Bonjour!
    C'est quoi le message d'erreur?
    Pour savoir exactement où ça plante mets un peu de debug dans ta procédure; Je suis preque sûre que ça plante quand cbloco.ListIndex vaut 0, non?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub S_actualize()
       debug.print cbloco.ListIndex - 1 
       debug.print  tl(cbloco.ListIndex - 1, 1)
       feuil1.Cells(14, 4).Value = tl(cbloco.ListIndex - 1, 1)
    End Sub

  3. #3
    Futur Membre du Club
    Inscrit en
    Mai 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 20
    Points : 8
    Points
    8
    Par défaut le message d'erreur
    Alors il m'affiche ce message :
    erreur d'exécution '91':
    Variable d'objet ou de bloc With non définie
    en fait j'ai l'impression que dans la procédure S_change() il tient pas compte de la créatio du combobox créer dans l'initialisation.

    Je viens d'écrire le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub CbLoco_actualize()
     Debug.Print CbLoco.ListIndex - 1
       Debug.Print tl(CbLoco.ListIndex - 1, 1)
     
    feuil1.Cells(14, 4).Value = tl(CbLoco.ListIndex - 1, 1)
    End Sub
    Dans le module j'ai mis l'option explicit pour vérifier si les variables sont correctes et déclarer. En fait il a pas l'air de considérer S ou CbLoco comme un contrôle.

  4. #4
    Futur Membre du Club
    Inscrit en
    Mai 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 20
    Points : 8
    Points
    8
    Par défaut
    Par contre en remplaçant CbLoco par S dans le débug, j'ai le message
    erreur '9':
    L'indice n'appartient pas à la sélection
    !!!
    Donc c'est une piste, je vais regarder

  5. #5
    Futur Membre du Club
    Inscrit en
    Mai 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 20
    Points : 8
    Points
    8
    Par défaut Relance
    Alors ça ne marche toujours pas. En fait quand je lance le code manuellement, ça marche j'ai bien la formule correspondante qui s'affiche.
    Le problème c'est queje n'arrive pas à ce que la procédure se lance automatiquement quand on modifie la sélection de la combobox comme d'habitude dans un userform.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub CbLoco_actualize()
     Debug.Print S.ListIndex - 1
       Debug.Print tl(S.ListIndex - 1, 1)
     
    feuil1.Cells(14, 4).Value = tl(S.ListIndex - 1, 1)
    End Sub
    Pourtant j'ai bien le code qui stipule CbLoco_actualize.... Je suis perdu

  6. #6
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    bonjour,
    Place toi dans le code de ton userform au dessus du code il y a deux zone de liste met ton curseur tout a a la fin dans la liste de gauche choisi ta liste et dans celle de droite choisi l'évènement qui t'interesse, Actualise n'existe pas.
    A mon avis ComboBox1_Change devrais te convenir mais tu peux peut être lui en préférer un autre

    :ps cette méthode fonctionne pour tous les événement sur des objets, feuille de calcule, classeur, combobox, checkbox,.......
    « Il n'y a pas de recette miracle qui permet aux gens d’écrire des programmes corrects sans avoir à réfléchir. Il faut apprendre aux gens comment réfléchir »

  7. #7
    Futur Membre du Club
    Inscrit en
    Mai 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 20
    Points : 8
    Points
    8
    Par défaut
    En fait c'est pas un userform, j'ai généré mon contrôle combobox par le code,mais j'arrive pas à faire comme dans un userform, c.à.d associer une action de l'utilisateur (click, sélection,...) a ma procédure, mais ça ne marche pas et je ne comprend pas. Pourtant j'ai changé actualize en change, et ensuite en afterupdate...;

  8. #8
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    J'ai rien compris a ce que tu as dit. Tu le créé par macro si il est dans une feuille de calcul dans le module de la feuille tu met le code
    ComboBox1_Change

    Si qu'une macro que ta macro lance ton évènement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sub macro1()
    ComboBox1_Change 
    end sub
    edit :
    Après si tu veux associer un code a l'objet créé par macro tu doit pouvoir faire le code a lavance (mais dans ce cas autant se contenter de rendre le controle visible/invisible) sinon il faut générer du code par macro
    « Il n'y a pas de recette miracle qui permet aux gens d’écrire des programmes corrects sans avoir à réfléchir. Il faut apprendre aux gens comment réfléchir »

  9. #9
    Futur Membre du Club
    Inscrit en
    Mai 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 20
    Points : 8
    Points
    8
    Par défaut
    Bon je remet le code:
    Initialisation de la feuil1 (i.e. création de mon combobox par macro dans la feuil1)
    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
    Option Explicit
    Dim S As Object
    Dim tl(FORMULALOC, 1) As String
    Dim CbLoco As ComboBox
    Sub userform_initialize()
        With feuil1
            Set S = .DropDowns.Add(.Cells(14, 2).Left, .Cells(14, 2).Top, .Range(Cells(14, 2), _
                                                                                 Cells(14, 3)).Width, .Cells(14, 2).Height)
        End With
     
        tl(0, 0) = "Générale SNCF"
        tl(0, 1) = "0.65*L+13*n+0.01*L*V+0.03*V^2"
        tl(1, 0) = "DB BR201"
        tl(1, 1) = "0,96+3.83*((V+20)/100)^2"
        tl(2, 0) = "DB BR211"
        tl(2, 1) = "1.37+4.95*(V/100)^2"
        tl(3, 0) = "DB BR212"
        tl(3, 1) = "1.39+4.95*(V/100)^2"
        tl(4, 0) = "DB BR215"
        tl(4, 1) = "2.80+3.48*(V/100)^2"
        S.Select
     
        S.Name = "CbLoco"
     
        S.List = Array(tl(0, 0), tl(1, 0), tl(2, 0), tl(3, 0), tl(4, 0))
    End Sub
    Procédure pour afficher la formule dans la cellule "D14" en fonction de la selection dans la combobox:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub CbLoco_change() 'J'ai essayé en mettant S_change(), mais pas de résultat
     Debug.Print S.ListIndex - 1
       Debug.Print tl(S.ListIndex - 1, 1)
     
    feuil1.Cells(14, 4).Value = tl(S.ListIndex - 1, 1)
    End Sub
    Si j'execute CbLoco_change directemet depuis Visual Basic Editor, çia passe. Par contre, lorsque je change la sélection dans la combobox crée, il ne se passe rien.
    Je pense que c'est plus clair maintenant.

  10. #10
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Je ne vois pas vraiment comment faire j'ai tendance a préférer faire simple. Tu sais que ta liste sera toujours la meme et toujours au bon endroit, pourquoi ne pas la créer directement et la rendre invisible a l'ouverture et visible au lieu de la créer. Ca serait quand même bien plus simple non?
    « Il n'y a pas de recette miracle qui permet aux gens d’écrire des programmes corrects sans avoir à réfléchir. Il faut apprendre aux gens comment réfléchir »

  11. #11
    Futur Membre du Club
    Inscrit en
    Mai 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 20
    Points : 8
    Points
    8
    Par défaut
    Bon en fait j'ai décidé de plus générer le combobox par maccro, comme j'arrivais pas ensuite à attribuer une procédure en fonction du changement de la combobox. Je fait une méthode "normale" et ça roule (création du combobox à partir de la boite à outils contrôle et code).
    Par contre je suis intéressési quelqu'un trouve une solution à mon problème initial.

    Edit: exact c'est ce que je vais faire, par contre je vois plus trop l'intéret de générer un combobox par maccro, si on ne peut pas avoir un équivalent de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sub combobox1_change
    macro
    end sub

Discussions similaires

  1. Probleme d'actualisation d'une combobox
    Par PascalStl dans le forum Général Python
    Réponses: 8
    Dernier message: 30/01/2014, 05h35
  2. Réponses: 14
    Dernier message: 03/07/2006, 16h55
  3. [GD] Enregistrer une image générée par PHP sur disque dur
    Par Alex01 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 03/05/2006, 11h16
  4. [VBA-E]actualisation d'un tableau dynamique par macro
    Par illight dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 18/04/2006, 16h37
  5. [WORD] Inclusion d'une image (.tif) par macro
    Par guejo dans le forum VBA Word
    Réponses: 1
    Dernier message: 08/02/2006, 11h16

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