Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/08/2011, 09h33   #1
Invité régulier
 
Femme
Étudiant
Inscription : 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
Points : 6
Points : 6
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 :
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!
JulienLeno est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2011, 10h45   #2
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 890
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 890
Points : 7 163
Points : 7 163
Bonjour,

Citation:
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é?

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

Citation:
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
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2011, 11h10   #3
Invité régulier
 
Femme
Étudiant
Inscription : 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
Points : 6
Points : 6
Pour renseigner j'avais utilisé un code du genre
Code :
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 :
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 :
1
2
ratio = ComboBox3.Value
hubratio = ComboBox4.Value
JulienLeno est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2011, 11h27   #4
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 890
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 890
Points : 7 163
Points : 7 163
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 :
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 :
nomratio = Sheet5.Range(celluleratio).Value
Pour remplacer les , par des .
Code :
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 :
If nomratio = ratio Then
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2011, 13h10   #5
Invité régulier
 
Femme
Étudiant
Inscription : 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
Points : 6
Points : 6
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?
JulienLeno est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2011, 14h07   #6
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 890
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 890
Points : 7 163
Points : 7 163
Ou se trouve la combobox? dans la feuille ou sur une form?
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 09h18   #7
Invité régulier
 
Femme
Étudiant
Inscription : 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
Points : 6
Points : 6
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 :
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?
JulienLeno est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 16h37   #8
Membre Expert
 
Homme
Retraité
Inscription : avril 2011
Messages : 692
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Retraité

Informations forums :
Inscription : avril 2011
Messages : 692
Points : 1 443
Points : 1 443
Bonjour,

As-tu essayé en pointant explicitement ton Userform ?

Code :
1
2
ratio = UserForm1.ComboBox1.Value
hubratio = UserForm1.ComboBox2.Value
Cordialement.
gFZT82 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 16h46   #9
Invité régulier
 
Femme
Étudiant
Inscription : 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
Points : 6
Points : 6
Oui et ceci ne fonctionne pas. J'ai vraiment du mal a comprendre..
JulienLeno est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 17h06   #10
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 890
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 890
Points : 7 163
Points : 7 163
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
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/09/2011, 13h43   #11
Invité régulier
 
Femme
Étudiant
Inscription : 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
Points : 6
Points : 6
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
JulienLeno est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h52.


 
 
 
 
Partenaires

Hébergement Web