cs_pierreroux
Messages postés12Date d'inscriptionmercredi 31 mai 2006StatutMembreDernière intervention12 juin 2006
-
1 juin 2006 à 10:38
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 2012
-
13 juin 2006 à 08:56
Bonjour,
Je suis quasiment débutant sur Visual Basic Application Excel . Je suis en train d'essayer de faire des interfaces conviviales et claires pour le futur utilisateur du programme et j'aimerais, dans la mesure du possible, avoir des précisions et des éclaircissements sur plusieurs points:
1) Pour rentrer les éléments dans une zone de liste déroulante placée sur l'interface Userform (bouton issu de la boîte à outil), que faut-il faire? J'essaie de remplir des mots à la ligne Value dans la colonne appellée Propriétés-UserForm 1 mais cela ne marche pas? Que dois je faire?
2) Quelle est la fonction à utiliser pour associer à un bouton sous excel une macro qui permette de faire apparaître une interface réalisée sous VBA au moment de la pression sur ce bouton?
3)Quelle est le langage utilisé pour faire apparaitre un curseur clignotant dans une case où l'on veut que l'utilisateur aille obligatoirement après avoir sélectionné un bouton précédent qui le lie obligatoirement avec cette case.
4) Enfin comment peut-on faire pour trouver des fonctions utiles sous VBA et comprendre à quoi elles servent?
En attendant vos réponses, je vous remercie pour l'attention portée à mes interrogations
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 1 juin 2006 à 10:55
Salut,
Ah ca fait plaisir de voir un problème clair et bien expliqué
Alors répondons par points:
attention je n'ai renommer aucun des controles
1) Pour rentrer des éléments dans une zone de liste déroulante, utilises la procédure AddItem
l'Exemple suivant ajoutera 5 Ligne lors de l'activation du UserForm
Private Sub UserForm_Activate()
Dim i As Integer
Call ComboBox1.Clear 'Efface toutes les eventuelles lignes déja présente
For i = 1 To 5
Call ComboBox1.AddItem("Ligne " & i) 'Ajoute la ligne dans la zone de liste
Next
End Sub
3) Pas trop compris ce que tu souhaitais donne un exemple STP.
4) Lorsque tu es dans l'interface de développement, appuie sur F2 pour faire apparaître l'explorateur d'objets, il te montre tout ce que tu peux faire. si tu ne trouve pas ton bonheur il faut demander ce que tu souhaites faire et tu truveras qq un qui te diras la fonction à utilise
J'espère que mes exemples sont clairs. SInon n'hésites pas.
@+, Julien Pensez: Moteur de Recherche, Réponse Acceptée
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 9 juin 2006 à 15:23
Salut,
Tu ne peux avoir Qu'un seul événement UserForm_Activate()
Si tu veux remplir deux comboBox lorsque ton Form s'active il suffit d'ajout dans le même événement les ajouts de ligne dans l'autre combo.
Soit dit en passant tes boucles For n'ont pas grand interêt (pour ne pas dire aucun)
Essaie la chose suivante.
Private Sub UserForm_Activate()
'Traitement de la premiere zone de liste
Call ComboBox1.Clear 'Efface toutes les eventuelles lignes déja présente
Call ComboBox1.AddItem("15%") 'Ajoute la ligne dans la zone de liste
Call ComboBox1.AddItem("20%") 'Ajoute la ligne dans la zone de liste
Call ComboBox1.AddItem("25%") 'Ajoute la ligne dans la zone de liste
Call ComboBox1.AddItem("30%") 'Ajoute la ligne dans la zone de liste
Call ComboBox1.AddItem("35%") 'Ajoute la ligne dans la zone de liste
Call ComboBox1.AddItem("40%") 'Ajoute la ligne dans la zone de liste
Call ComboBox1.AddItem("45%") 'Ajoute la ligne dans la zone de liste
Call ComboBox1.AddItem("50%") 'Ajoute la ligne dans la zone de liste
'Traitement de la Seconde zone de liste
Call ComboBox2.Clear 'Efface toutes les eventuelles lignes déja présente
Call ComboBox2.AddItem("55%") 'Ajoute la ligne dans la zone de liste
Call ComboBox2.AddItem("60%") 'Ajoute la ligne dans la zone de liste
Call ComboBox2.AddItem("65%") 'Ajoute la ligne dans la zone de liste
Call ComboBox2.AddItem("70%") 'Ajoute la ligne dans la zone de liste
Call ComboBox2.AddItem("75%") 'Ajoute la ligne dans la zone de liste
Si tu veux absolument utilser des boucle fait la chose suivante (exemple juste pour la combo1)
Private Sub UserForm_Activate()
Dim i As Integer
'Traitement de la premiere zone de liste
Call ComboBox1.Clear 'Efface toutes les eventuelles lignes déja présente
For i = 0 To 7
Call ComboBox1.AddItem(CStr(15 + (5 * i)) & "%") 'Ajoute la ligne dans la zone de liste
Next
'Traitement de la Seconde zone de liste
Call ComboBox2.Clear 'Efface toutes les eventuelles lignes déja présente
Call ComboBox2.AddItem("55%") 'Ajoute la ligne dans la zone de liste
Call ComboBox2.AddItem("60%") 'Ajoute la ligne dans la zone de liste
Call ComboBox2.AddItem("65%") 'Ajoute la ligne dans la zone de liste
Call ComboBox2.AddItem("70%") 'Ajoute la ligne dans la zone de liste
Call ComboBox2.AddItem("75%") 'Ajoute la ligne dans la zone de liste
cs_pierreroux
Messages postés12Date d'inscriptionmercredi 31 mai 2006StatutMembreDernière intervention12 juin 2006 1 juin 2006 à 14:05
Re-bonjour et merci à vous deux Julien et Alboure,
En fait pour le point 3) Alboure a répondu "textbox1.setfocus ", c'est ce que je voulais.
Maintenant, je voudrais mettre en relation une combobox avec une zone de texte, c'est à dire que la combobox soit directement reliée avec une zone de texte qui se met en surbrillance une fois que l'utilisateur a fait une sélection dans la combobox citée précédemment et qui est reliée à la zone de texte. tant que l'utilisateur n'a pas rempli la zone de texte, il ne peut pas passer à l'étape suivante du Userform. si possible, j'aimerais que cela fonctionne d'une combobox à une zone de texte,d'une combobox à une autre, d'une zone de texte à une autre, etc...
Merci d'avance et à très bientôt pour de nouvelles questions car je suis actuellement sur un projet assez long de programmation
cs_pierreroux
Messages postés12Date d'inscriptionmercredi 31 mai 2006StatutMembreDernière intervention12 juin 2006 1 juin 2006 à 15:55
Re-bonjour, j'ai une nouvelle question: quelle est le code à utiliser pour la logique suivante:
Si la valeur sélectionnée dans une zone de liste sous excel (feuille numéro x du classeur appelée toto) est < 200, alors afficher Userform1, ou bien si cette valeur est>200 afficher Userform2, sinon afficher Userform 3.
ATTENTION: il n'y a pas de test effectue sur la valeur de la cellule A1: A savoir qu il faut s'assurer que la valeur entrer est bien un chiffre sinon il y aura une erreur sur la ligne ou il y a le CINT
@+, Julien Pensez: Moteur de Recherche, Réponse Acceptée
cs_pierreroux
Messages postés12Date d'inscriptionmercredi 31 mai 2006StatutMembreDernière intervention12 juin 2006 1 juin 2006 à 18:28
Bonjour,
je ne comprends pas pourquoi la syntaxe suivante n'est pas bonne:
Private Sub ComboBox1_Change()
If ComboBox1.Value <= 200 Then
Call Load(UserForm2)
Call UserForm2.Show
ElseIf 200 < ComboBox1.Value < 800 Then
Call Load(UserForm3)
Call UserForm3.Show
Else
ComboBox1.Value => 800 Then
Call Load(UserForm4)
Call UserForm4.Sho
End If
End Sub
Pour des valeurs supérieures à 800, il continue à m'afficher Userform 3 alors que ca devrait être Userform 4
cs_pierreroux
Messages postés12Date d'inscriptionmercredi 31 mai 2006StatutMembreDernière intervention12 juin 2006 2 juin 2006 à 14:11
Bonjour, voilà mon programme:
If ComboBox1.Value <= 200 Then
Call Load(UserForm2)
Call UserForm2.Show
ElseIf 200 < ComboBox1.Value And ComboBox1.Value <= 800 Then
Call Load(UserForm3)
Call UserForm3.Show
Else
Call Load(UserForm4)
Call UserForm4.Show
End If
Il marche mais par exemple: je choisis 200, Userform 2 s'affiche. si je clic sur la croix en haut à droite du userform 2, il s'en va et je reviens à ma liste déroulante Combobox sur userform 1 mais si je re-sélectionne 200, je reste sur Userform 1, alors que je voudrais faire ré-apparaître le userform 2, que dois je donc faire?
cs_pierreroux
Messages postés12Date d'inscriptionmercredi 31 mai 2006StatutMembreDernière intervention12 juin 2006 2 juin 2006 à 16:46
Salut Julien, le code que j'ai donné est écrit dans mon userform 1. Dans ce userform, il y a une combobox1 qui permet selon la séléction d'afficher les userform 2, 3 ou 4.Voila.
A plus et merci pour ton aide et ton efficacité, pierreroux
cs_pierreroux
Messages postés12Date d'inscriptionmercredi 31 mai 2006StatutMembreDernière intervention12 juin 2006 6 juin 2006 à 18:20
Bonsoir, j'aimerais avoir deux syntaxes:
1) comment on fait pour incluer plusieurs conditions dans un si: exemple: si Toto=8 et si tutu=7 et si ...
2) comment on fait pour récupérer et réutiliser une valeur dans un textbox d'un userform qui n'est pas actif: exemple:
la valeur du textbox 1 du userform 3 est égale à celle du textbox 1 du userform 1.
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 7 juin 2006 à 08:54
Salut,
1) Utilise le Select case
Select Case i
Case 1: 'Place le code a effectuer lorsque i = 1
Case 2: 'Place le code a effectuer lorsque i = 2
Case 3, 4, 5: 'Place le code a effectuer lorsque i = 3 ou 4 ou 5
Case Is > 5: 'Place le code a effectuer lorsque i > 5
'...
End Select
'Dans les Forms ou il y a les textbox qui t'interesse
Private Sub TextBox1_Change()
TextUserForm1 = TextBox1.Text
End Sub
'Dans un Module
Public TextUserForm1 As String
Public TextUserForm2 As String
'La ou tu veux comparer les deux
If TextUserForm1 = TextUserForm2 Then
cs_pierreroux
Messages postés12Date d'inscriptionmercredi 31 mai 2006StatutMembreDernière intervention12 juin 2006 7 juin 2006 à 10:03
Salut,
j'ai écris cette équation:
TextBox5.Value = TextBox1.Value + TextBox2.Value + TextBox3.Value + TextBox4.Value et cela ne marche pas.Pourquoi?
De même, je veux faire une somme dans le textbox 5 du userform 6 de valeurs présentes dans des textbox du userform2, j'ai écris:
Userform6.TextBox5.Value. = Userform2.TextBox1.Value + Userform2.TextBox2.Value + Userform2.TextBox3.Value + Userform2.TextBox4.Value et cela ne marche pas.Pourquoi?
Cela concatènera le contenu des textbox 1 2 3 et 4 dans le 5 (n'oublie pas que le contenu d'un textbox n'est rien d'autre qu une chaine de caractères) meme si tu y rentre des chiffres,
ie:
TextBox5.Value = TextBox1.Value + TextBox2.Value
Si TextBox1.Value 2 et TextBox2.Value 3 et bien TextBox5.Value = 23 et non 5
Si tu veux faire une addition et avoir le résultat:
TextBox5.Value = Cstr (Cint(TextBox1.Value) + Cint(TextBox2.Value))
Peu être que cela fonctionne mais si les Userform ne sont pas chargés, la valeurs des champs sera "" donc la concaténation de "" avec "" ... donnera ""
Essaie réellement les variables par module pour voir si ceci contourne ton problème
@+, Julien Pensez: Moteur de Recherche, Réponse Acceptée
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 7 juin 2006 à 17:01
SAlut,
Depuis l'IDE VBA Excel
Click Droit sur le projet => Insertion => (jusqu'ici comme si c'était un UserForm)
Choisi Module.
Ensuite dans la fenêtre qui s'est ouverte
Public TextUserForm1 As String
Public TextUserForm2 As String
'Dans les Forms ou il y a les textbox qui t'interesse
Private Sub TextBox1_Change()
Module1.TextUserForm1 = TextBox1.Text
End Sub
'La ou tu veux comparer les deux
If Module1.TextUserForm1 = Module2.TextUserForm2 Then
End If
===
En fait le truc est de bien séparé l'interface utilisateur de ton code.
Si l'utilisateur doit rentrer qqch, il faut faire en sorte que le champs de saisie soit relier avec une Variable (possédant la portée souhaite public ou Private).
En utilisant les modules, tes variables deviendront accessibles depuis n'importe quel endroit du code: Userform1, UserForm2... Module1, ...
Voila j'espère avoir été un peu plus clair
@+, Julien Pensez: Moteur de Recherche, Réponse Acceptée