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 :

amélioration de combobox


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2011
    Messages : 63
    Par défaut amélioration de combobox
    Bonjour a vous,

    Voilà j'ai un problème avec des combobox qui ont pour but de trier des données. En fait j'ai deux combobox que je renseigne et qui en fonction de ce qui est entré à l'intérieur me trouve des données qui sont stockés dans un tableau. Ce que j'ai fais fonctionne mais j'aimerais bien améliorer mon programme car j'ai plusieurs commandes que j'ai un peu bidouillé. Tout d'abord pour renseigner mes combobox j'ai cliqué sur les propriétés et renseigner le rowsource mais j'aurais aimé pouvoir renseigné à partir des lignes du tableau. Mais je ne sais pas pourquoi ceci n'a pas fonctionné. Pourriez vous me donner le code a utilisé pour renseigner de cette manière?

    Ensuite je rencontre un autre problème au niveau de la correpondance des données. En effet dans mon tableau de donnée j'ai des valeurs numériques et j'ai vu que pour qu'une combobox puisse venir trouver des données celles ci devait être en string. Alors j'ai essayé de convertir avec cstring mais çà ne fonctionne pas. J'ai donc trouvé l'astuce suivante. J'ai mis des . à la place des , ce qui donne du texte au lieu de nombre mais c'est quand même pas top.

    Voilà si vous aviez des idées de comment faire pour réaliser mes améliorations. Je vous met le code pour que vous puissiez voir ce que çà donne aujourd'hui.

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    Private Sub CommandButton8_Click()
    Dim nomratio As String, nomhubratio As String
    Sheet3.Rows("2:70").Delete
     
    iL2 = Sheet1.Cells(100, 2).Value
     
    n = 2
    ratio = ComboBox3.Value
    hubratio = ComboBox4.Value
     
    If ratio <> "" And hubratio <> "" Then
     
        For i = n To 280
        celluleratio = ("o" & i)
        cellulehubratio = ("m" & i)
     
     
        nomratio = CStr(Sheet5.Range(celluleratio).Value)
        nomhubratio = CStr(Sheet5.Range(cellulehubratio).Value)
     
            If nomratio = ratio Then
            If nomhubratio = hubratio Then
                Sheet5.Cells(i, "m").Copy Sheet3.Cells(iL2, 3)
                Sheet5.Cells(i, "o").Copy Sheet3.Cells(iL2, 4)
                Sheet5.Cells(i, "a").Copy Sheet3.Cells(iL2, 1)
             iL2 = iL2 + 1
            End If
         End If
        Next
     
    ElseIf ratio <> "" And hubratio = "" Then
     
        For i = n To 280
            celluleratio = ("o" & i)
     
            nomratio = CStr(Sheet5.Range(celluleratio).Value)
     
             If nomratio = ratio Then
                Sheet5.Cells(i, "m").Copy Sheet3.Cells(iL2, 3)
                Sheet5.Cells(i, "o").Copy Sheet3.Cells(iL2, 4)
                Sheet5.Cells(i, "a").Copy Sheet3.Cells(iL2, 1)
                 iL2 = iL2 + 1
             End If
        Next
     
    ElseIf ratio = "" And hubratio <> "" Then
     
        For i = n To 280
               cellulehubratio = ("m" & i)
     
                 nomhubratio = CStr(Sheet5.Range(cellulehubratio).Value)
     
                If nomhubratio = hubratio Then
                Sheet5.Cells(i, "m").Copy Sheet3.Cells(iL2, 3)
                Sheet5.Cells(i, "o").Copy Sheet3.Cells(iL2, 4)
                Sheet5.Cells(i, "a").Copy Sheet3.Cells(iL2, 1)
                    iL2 = iL2 + 1
                End If
        Next
     
    End If
     
    ComboBox3.Value = Empty
    ComboBox4.Value = Empty
    Sheet3.Select
     
    End Sub

    Merci à vous!

  2. #2
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Bonjour,

    Tout d'abord pour renseigner mes combobox j'ai cliqué sur les propriétés et renseigner le rowsource mais j'aurais aimé pouvoir renseigné à partir des lignes du tableau. Mais je ne sais pas pourquoi ceci n'a pas fonctionné.
    Quel code? Qu'est ce qui n'a pas fonctionné?

    Ensuite je rencontre un autre problème au niveau de la correpondance des données. En effet dans mon tableau de donnée j'ai des valeurs numériques et j'ai vu que pour qu'une combobox puisse venir trouver des données celles ci devait être en string. Alors j'ai essayé de convertir avec cstring mais çà ne fonctionne pas
    Idem quel code? quelle anomalie?

    ce qui donne du texte au lieu de nombre mais c'est quand même pas top
    Comment fais tu cela? Manuellement?

    En regardant ton code on se demande ou sont déclarées les variables ratio et hubratio, et, quel est leur type.

    Peux tu nous éclairer

  3. #3
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2011
    Messages : 63
    Par défaut
    Pour renseigner j'avais utilisé un code du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim i
        For i = 1 To 4
            ComboBox1.AddItem Sheets("a").Cells(i, 1)
        Next
    End Sub
    Ce qui n'a pas fonctionné c'est qu'en faisant ainsi je n'avais rien dans ma combobox quand je cliquais. Aucune liste ne s'affichait.

    Au niveau de la conversion comme tu peux le voir dans le programme j'ai utilisé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    nomratio = CStr(Sheet5.Range(celluleratio).Value)
        nomhubratio = CStr(Sheet5.Range(cellulehubratio).Value)
    Mais là aussi çà ne fonctionne pas il ne parvient pas à me trouver de valeur quand celles ci sont des nombres alors que s'il y'a du texte çà fonctionne.

    Oui je remplace manuellement les , par des points donc c'est vraiment pas bon.

    Pour les variables ratio et hubratio je me rend compte quelles ne sont déclarées nul part. J'ai juste mis que ratio et hubratio sont égales à la valeur de la combobox. Ca ne suffit pas?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ratio = ComboBox3.Value
    hubratio = ComboBox4.Value

  4. #4
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    1 .Pour l'alimentation de la combobox, cette méthode fonctionne. J'ajouterais juste .Value pour éviter la confusion avec l'objet Range.
    A ajouter aussi le vidage de la combobox(si le chargement intervient plusieurs)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim i
        Combobox1.Clear
        For i = 1 To 4
            ComboBox1.AddItem Sheets("a").Cells(i, 1).Value
        Next
    End Sub
    2. je ne vois pas trop l'utilité de la conversion en string.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nomratio = Sheet5.Range(celluleratio).Value
    Pour remplacer les , par des .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nomratio = Replace(Sheet5.Range(celluleratio).Value,",",".")
    3. Si tu ne spécifie pas le type de tes variables, celles ci prennent seront Variant.
    Si ComboBox3.Value est numérique alors ratio sera de type numérique
    Ce qui te posera des problèmes dans tes comparaisons (Numerique = String )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If nomratio = ratio Then

  5. #5
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2011
    Messages : 63
    Par défaut
    Je viens de réessayer de remplir ma combobox avec ton instruction et çà ne fonctionne pas. Je ne comprend pas pourquoi. Ou dois je mettre la commande. En public?

    En fait çà fonctionne mais ceci fonctionne quand je lance à partir d'un bouton contenu dans mon userform si je veux lancer le remplissage à partir d'un bouton contenu dans une feuille il ne trouve pas de référence. Comment je peux faire?

  6. #6
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Ou se trouve la combobox? dans la feuille ou sur une form?

Discussions similaires

  1. Multi-selection dans une ComboBox ?
    Par Moloko dans le forum MFC
    Réponses: 5
    Dernier message: 07/07/2021, 17h26
  2. [VB6] [Interface] ComboBox à plusieurs colonnes
    Par mtl dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 30/03/2004, 17h35
  3. [VB6] [Interface] Grille avec combobox
    Par khany dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 15/01/2003, 09h55
  4. combobox et readonly
    Par Mac leod dans le forum C++Builder
    Réponses: 6
    Dernier message: 28/11/2002, 10h27
  5. combobox->text
    Par clovis dans le forum C++Builder
    Réponses: 18
    Dernier message: 21/06/2002, 15h43

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