[Déplacé VB6 --> VBA] créer un programme sous VBA [étudiant]

Messages postés
7
Date d'inscription
mardi 29 décembre 2009
Statut
Membre
Dernière intervention
3 janvier 2010
- - Dernière réponse : ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
- 3 janv. 2010 à 22:18
Bonjour, voici mon problème, je dois créer un programme sous VBA Excel, j'ai créer ma base de données, ma userforme avec des combobox, mais je n'arrive pas à créer mon code source pour remplir mes combox en fonction de "l'optionbutton" sélectionné.


C'est pour configurer un ordinateur, j'ai donc créer 4 types de bases (personelle, bureautique, multimedia et game) en "optionbutton" (et une page excel pour les données de chaques types de config), et de là, j'aimerai pourvoir insérer mes données dans mes combobox.



Ensuite il faut que je créer un bouton "facturation/commande" qui lui éditera une facture au client et rangera dans une autre feuille excel les données de cette facture pour moi (le vendeur en somme)




j'ai msn si vous voulez je peux transmettre mon début de programme.




Merci d'avance.
Afficher la suite 

11 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
62
0
Merci
Salut
En sélectionnant la ComboBox sur ta Userform et en pressant F1, tu sauras comment remplir une ComboBox.
Pour lister le contenu d'un ensemble de cellules, c'est à dire un Range, il y a ce code que l'on répète au moins 3 fois par semaine :
    Dim maCell As Object
    For Each maCell In Range("A1:B12")
        Debug.Print maCell.Text
    Next

Pour tenir compte de tes option buttons, il te suffit de faire une série de If-Then-Else :
If monOption1.Value = Checked Then
  ' Ici, le coe pour remplir ta ComboBox à partir de la feuille 1
ElseIf monOption2.Value = Checked Then
  ' Ici, le coe pour remplir ta ComboBox à partir de la feuille 2
ElseIf monOption3.Value = Checked Then
  ' Ici, le coe pour remplir ta ComboBox à partir de la feuille 3
ElseIf monOption4.Value = Checked Then
  ' Ici, le coe pour remplir ta ComboBox à partir de la feuille 4
End If

Voilà, tu n'as plus qu'à mettre les pièces du puzzle en place.

Pour tes histoires de facture : question trop vaste.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Commenter la réponse de cs_Jack
Messages postés
7
Date d'inscription
mardi 29 décembre 2009
Statut
Membre
Dernière intervention
3 janvier 2010
0
Merci
Merci de ton aide Jack. Je me doute que ma question doit faire parties des questions réccurantes sur ce forum, mais j'ai encore 4 semaines pour créer ce programme et je n'y arrive pas.

Puis-je t'envoyer le fichier pour que tu vois comment j'aimerai obtenir mon programme?
Commenter la réponse de jcdaussy
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
62
0
Merci
Non.
Expliquer son problème et le résoudre est la seule finalité de ce forum. Le résultat n'est pas une fin en soi, surtout s'il s'agit d'un programme qui sera évalué pour juger de TES talents de programmeur.

Alors explique sur quoi tu bloques après avoir eu les infos ci-dessus.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Commenter la réponse de cs_Jack
Messages postés
7
Date d'inscription
mardi 29 décembre 2009
Statut
Membre
Dernière intervention
3 janvier 2010
0
Merci
Je comprend tout à fait le concept de faire soit même pour comprendre.

Donc je m'explique :

j'ai créer un bouton pour lancer ma userform à l'écran.

Ca, ça marche, un simple USERFORM1.SHOW et ça roule.

Là ça se complique.

Je ne sais par où commencer.

dans ma userform j'ai :
4 optionbutton (perso, bureau, multi, gamer)
et 5 champs "combox" pour modifier :
- processeur
- mémoire
- disque dur
- carte graphique
- moniteurs

A chaque optionbutton sa feuille excel avec la config modifiable.


Donc au départ à l'apparition de la userform, je voudrais que le "client" n'ai accès qu'à la parti 'type de configuration' (griser les combobox)
et une fois un combo sélectionné, il accède au combo.
à chaque sélection faite dans un combobox, je voudrais que la tarif se modifie en temps réelle.


une fois que j'aurais créé tout ça je reveindrai vous embéter un peu pour créer ma facture et un fichier client excel.
Commenter la réponse de jcdaussy
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
62
0
Merci
Ok, c'est plus clair.
Griser les Combo : Je pense (pas le temps d'essayer) que maCombo.Enabled = False devrait suffire.
Sinon, rend la invisible avec .Visible = False

Autre solution :
A chaque Combo, ajoute un item "<Faire un choix>" que tu places en index 0 afin qu'il soit en tête de liste.
Quand tu voudras vider un choix, il te suffira d'afficher cet item 0 (ListIndex) + vider tes TextBox ou Label qui te servent d'affichage de tarif, bien sûr.

Pour retrouver les données dans tes feuilles, deux solutions :
(Choix1)
Soit du VBA pour faire une recherche, comme si tu la faisais à la main
Tu peux y arriver en utilisant l'enregistreur de macro pendant que tu fais une recherche à la main, puis en relisant le code fourni et en remplaçant les valeurs par des variables

(Choix2)
Soit tu considères les zones de données comme une base de donnée, avec une connexion genre ADODB.
Exemples que tu trouveras sur le site en cherchant, par exemple "base de données excel" parmi les sources.
Rappel : Les codes (.frm, .mod, .cls)purement VB6 (et pas VBA) peuvent être lus par un éditeur de texte standard. Dans 80% des cas, les codes VB6 fonctionnent aussi en VBA.

Ensuite, une fois qu'un des Option Boutton a été sélectionné, il te suffit de calculer :
- Le nom de la feuille correspondant au choix de l'Option button actuellement sélectionné : Voir le code avec les If-Then-Else fournis dans ma 1ère réponse)
Tu ranges ce nom dans une variable texte
- La colonne (Choix1) ou le nom de la colonne (Choix2) dans laquelle tu vas pouvoir retrouver la liste des noms des processeurs, par exemple "C" (Choix1) ou "Processeurs" (Choix1), que tu ranges aussi dans une variable.
Ensuite, toujours en fonction de Choix1 ou Choix2, tu exploites ces variables pour élaborer ta recherche : Dans quelle feuille + dans quelle colonne

Tu n'as plus qu'à ranger ces résultats dans ta Combo "Processeur" et faire de même pour chacune des autres Combo "Mémoire", "...

Avant de te lancer dans l'écriture du programme, comprends ce qu'il y a à faire en analysant comment c'est fait dans les sources exemples disponibles sur le site, en faisant des essais simples dans d'autres classeurs, rien que pour essayer.
Aller, tu as du boulot !

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Commenter la réponse de cs_Jack
Messages postés
7
Date d'inscription
mardi 29 décembre 2009
Statut
Membre
Dernière intervention
3 janvier 2010
0
Merci
OK OK, merci bien Jack pour ces infos, je me lance cette après midi dedans.

Car au vu de tes réponses, j'ai du boulo devant moi.

Je crie au secours si ça marche pas.

Bonne journée.
Commenter la réponse de jcdaussy
Messages postés
7
Date d'inscription
mardi 29 décembre 2009
Statut
Membre
Dernière intervention
3 janvier 2010
0
Merci
'initialiser la userform
Private Sub UserForm_Initialize()

'si l'optionbutton "PC Personnelle" est selectionné
If Personnelle.Value = Checked Then

'code pour récupérer les données de la feuille "Personnelle"
ComboBox1.RowSource = Sheets("Personnelle").Range("A5:A12").Address
ComboBox2.RowSource = Sheets("Personnelle").Range("A16:A23").Address
ComboBox3.RowSource = Sheets("Personnelle").Range("A27:A30").Address
ComboBox4.RowSource = Sheets("Personnelle").Range("A38:A45").Address
ComboBox5.RowSource = Sheets("Personnelle").Range("A49:A52").Address

ElseIf Bureautique.Value = Checked Then

'code pour récupérer les données de la feuille "Bureautique"
ComboBox1.RowSource = Sheets("Bureautique").Range("A5:A12").Address
ComboBox2.RowSource = Sheets("Bureautique").Range("A16:A23").Address
ComboBox3.RowSource = Sheets("Bureautique").Range("A27:A30").Address
ComboBox4.RowSource = Sheets("Bureautique").Range("A38:A45").Address
ComboBox5.RowSource = Sheets("Bureautique").Range("A49:A52").Address

ElseIf Multimedia.Value = Checked Then

'code pour récupérer les données de la feuille "Multimedia"
ComboBox1.RowSource = Sheets("Multimedia").Range("A5:A12").Address
ComboBox2.RowSource = Sheets("Multimedia").Range("A16:A23").Address
ComboBox3.RowSource = Sheets("Multimedia").Range("A27:A30").Address
ComboBox4.RowSource = Sheets("Multimedia").Range("A38:A45").Address
ComboBox5.RowSource = Sheets("Multimedia").Range("A49:A52").Address

ElseIf Gamer.Value = Checked Then

'code pour récupérer les données de la feuille "Gamer"
ComboBox1.RowSource = Sheets("Gamer").Range("A5:A12").Address
ComboBox2.RowSource = Sheets("Gamer").Range("A16:A23").Address
ComboBox3.RowSource = Sheets("Gamer").Range("A27:A30").Address
ComboBox4.RowSource = Sheets("Gamer").Range("A38:A45").Address
ComboBox5.RowSource = Sheets("Gamer").Range("A49:A52").Address


End If



End Sub




Voici mon Code pour "remplir" mes combobox quand on sélectionne l'option button correspondant.
Mais rien ne se passe, mes combo restent blanche lorsque j'ouvre la userforme et que je selectionne un option button, je pense qu'il doit y avoir un problème d'initialisation, mais je cherche depuis 2 jours et je ne trouve pas, ne voulant pas encore embéter jack là mon cerveau explose et je demande ton aide.

Car mes combo se remplisse bien si je n'utilise pas les "If - Then - ElseIf - EndIf"

Une idée de mon problème?
Commenter la réponse de jcdaussy
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
215
0
Merci
Bonjour,

Il y aurait tant à dire sur ton "approche" que nous préférerons nous en tenir au plus évident et au pluys élémpentaire pour l'instant .
Tu n'écris tout de même pas du code "au feeling" , non ?
Bon ! alors : où as-tu trouvé une valeur ou une constante pour "checked" ?
Nulle part ? Juste au hasard ? ==>> ouvre donc simplement la fenêtre des propriétés d'un optionbuttion ===>> lis-voir les valeurs acceptables pour sa propriété Value ==>> écrit ton code en conséquence (au moins pour celà avantr d'aller au delà ...)
UIlo n'est pas pensable de développer valablement en s'inspirant simplement de ses "élans". Ubn minimum d'attention et de compréhension des choses les plus élémentaires s'impose.

____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
Commenter la réponse de ucfoutu
Messages postés
7
Date d'inscription
mardi 29 décembre 2009
Statut
Membre
Dernière intervention
3 janvier 2010
0
Merci
Merci de me rappeler mon bien triste niveau. Et excuse moi de ne pas avoir la logique de programmation. Je ne prétend pas savoir programmer, et c'est bien pour cela que je me permet de poster sur ce forum. Je n'ai effectivement pas le réflexe de l'aide (F1) pour m'aider à résoudre et combler mes lacunes.


Je n'ai que quelques heures de programmation VBA derrière moi, dont la majoritées était de faire pareil que le prof et voir si ça marche.


Je me lance peut étre dans un projet trop complexe mais c'est les attentes de notre professeur. Créer un petit programme permettant de créer un ordinateur ou autre chose, éditer une facture, de la ranger dans un tableau excel par ordre alphabétique et de date,


Je cherche seulement a m'améliorer, comprendre mes erreurs et assimiler la logique de programmation que je n'ai pas.


Pour information, je suis en 1ère année dans une école d'ingénieur matériaux et gestion de production. Je ne suis pas en école d'informatique (et je sais pourquoi maintenant)


Merci de bien vouloir m'aider à progresser, en me conseillant certaine manipulation.


Car même en utilisant l'aide d'Excel, je ne comprend pas toujours ce que je doit faire.


Merci.
Commenter la réponse de jcdaussy
Messages postés
7
Date d'inscription
mardi 29 décembre 2009
Statut
Membre
Dernière intervention
3 janvier 2010
0
Merci
Pour Jack

""Ensuite, une fois qu'un des Option Boutton a été sélectionné, il te suffit de calculer :
- Le nom de la feuille correspondant au choix de l'Option button actuellement sélectionné : Voir le code avec les If-Then-Else fournis dans ma 1ère réponse)
Tu ranges ce nom dans une variable texte
- La colonne (Choix1) ou le nom de la colonne (Choix2) dans laquelle tu vas pouvoir retrouver la liste des noms des processeurs, par exemple "C" (Choix1) ou "Processeurs" (Choix1), que tu ranges aussi dans une variable.
Ensuite, toujours en fonction de Choix1 ou Choix2, tu exploites ces variables pour élaborer ta recherche : Dans quelle feuille + dans quelle colonne

Tu n'as plus qu'à ranger ces résultats dans ta Combo "Processeur" et faire de même pour chacune des autres Combo "Mémoire", "...
""


je n'ai pas compris cette partie
Commenter la réponse de jcdaussy
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
215
0
Merci
Excuse-moi, ami, mais as-tu au moins fait ceci ?
ouvre donc simplement la fenêtre des propriétés d'un optionbuttion ===>> lis-voir les valeurs acceptables pour sa propriété Value

qui ne demande aucune connaissance autre que celle de ton IDE (pas de code), ni même l'utilisation bde ton aide en ligne (dont je déplore malgré tout que tu dises que tu n'as pas le réflexe de l'utiliser. Même les plus avancés d'entre nous l'utilisent constamment !)
____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
Commenter la réponse de ucfoutu