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

  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 : 52
    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 : 52
    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 : 52
    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?

  7. #7
    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
    Bonjour,

    Bon le VBA commence a vraiment avoir raison de moi... Hier je suis parvenu à faire ce que je voulais j'ai réussi a mettre en place mes combobox correctement. Elle faisaient tout ce que je voulais. Seulement voilà aujourd'hui je rencontre le même problème que précédemment. Quand je lance une recherche je ne parviens pas a retrouver des données numériques alors qu'il n'y a rien de changé par rapport à hier. Je ne vois pas pourquoi çà beug. Il doit bien y'avoir un problème quelque part mais lequel?

    Je remet le code final que j'avais hier si vous y voyez une erreur.

    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
    68
    69
    70
    71
    Private Sub CommandButton8_Click()
    Dim nomratio As String, nomhubratio As String
    Dim ratio As String
    Dim hubratio 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
    Aucune idée d'ou peut provenir le problème?

  8. #8
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    Bonjour,

    As-tu essayé en pointant explicitement ton Userform ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ratio = UserForm1.ComboBox1.Value
    hubratio = UserForm1.ComboBox2.Value
    Cordialement.

  9. #9
    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
    Oui et ceci ne fonctionne pas. J'ai vraiment du mal a comprendre..

  10. #10
    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 : 52
    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
    Tes variables ne sont toujours pas déclarées donc en type variant (voir post d'hier à 11h27)

    Fais un essai en les déclarant.

    Si toujours le problème, sur quelle ligne se fait le test qui pose problème et quelles sont les valeurs des variables ou combobox a ce moment

  11. #11
    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 moi les variables sont déclarées. Si tu regardes sur mon post nomratio hubratio, etc sont toutes déclarées en string. Ensuite il n'y a pas d'endroit où çà plante quand je lance le programme fonctionne c'est juste que lorsque j'appuie sur mon bouton de recherche il ne m'affiche rien si les cases de mon tableau sont des nombres. En revanche si dans les cases je met du texte il parvient à me donner le résultat attendu.

    Merci

    Julien

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