combobox - VB/VBA/VBS - Programmation
Marsh Posté le 06-03-2006 à 17:37:09
Salut,
Je n'ai malheureusement pas eu de retour, est ce parceque la question est mal posée ou bien parcequ'il n'y a pas de possibilités ou bien tout simplement parceque personne n'a su pour le moment?
quand pensez vous?
enfin je pense bien qu'il doit y avoir une possibilité de dire, "je clic encore et passe sur la ligne suivante en inscrivant sur la useform un numéro de défilement à chaque clic de validation".
bonne journée et
a+
Marsh Posté le 06-03-2006 à 21:43:38
Personnellement, je ne vois pas bien ce qu'il faut faire, ni ne vois clairement l'endroit où se trouve l'obstacle.
Je comprends que c'est un traitement qui
- comporte une boucle. Le Do While est effectivement une bonne solution pour cela
- comporte une écriture dans un fichier, et bien que cette partie ne soit pas montrée, il semble d'après le commentaire que cela ne soit pas là où se situe le problème
- comporte une liste déroulante, que je ne vois et qui cause peut-être un soucis
- comporte des questions. Je pressens que c'est sans doute là le problème.
D'abord, de quel genre de questions s'agit-il ? des boites de messages du type ok/cancel oui/non, ce genre de choses, ou bien des questions plus compliquées comme des sous formulaires à remplir genre "taux de la TVA, age du capitaine, etc." ?
Ensuite où doivent intervenir les questions ? Il faut savoir que la programmation se base habituellement sur des formulaires. On appelle cela de l'interaction "transactionnelle" dans la litérature informatique. Autrement dit, contrairement à ce qui se passe dans les dialogues entre humains, le dialogue homme/machine est basé sur des questions longues (un formulaire contenant pleins de champs) et des réponses longues (plein de remplissages de champ), et non pas sur une multitudes de petites questions. Cette dernière méthode est plus naturelle pour un être humain, mais elle est plus difficile à automatiser, parce qu'il faut que le logiciel conserve des données en mémoire pendant tout le temps que dure la suite des échanges, alors qu'avec une transaction comprenant un seul échange, les données n'ont pas besoin d'être stockées dans une mémoire temporaire au niveau du serveur en attendant la validation.
Mais je m'égare (de TGV) peut-être un peu.
Marsh Posté le 08-03-2006 à 09:36:54
merci pour ta réponse,
au final j'ai trouvé, mon pb reste mon peu de connaissance vba, si bien que d'un rien cela devient incomprehensible.
j'ai bien fait une combobox dont la reponse est decalé d'une ligne a chaque clic et le clic m'ecrit dans un textbox "ligne suivante n° X"
mais merci de ton soutien, effectivement le plus dur est bien de passer de notre mode de pensée à celui de vba!
je continue sur mon programme...
a+
Marsh Posté le 04-03-2006 à 22:19:18
Bonjour a tous,
Me voila parti dans les userform, mais toujours en tant que débutant. J'arrive très vite à des limites!
voila mon problème je souhaiterais avoir une liste déroulante à choix simple, je souhaite pour un nombre de ligne inconnue (au départ mais dont on aura rentré les valeurs auparavant sur une feuille excel via un autre programme).
donc j'ai un nombre de ligne inconnue et pour chaque ligne je veux poser la même question et ecrire la réponse sur un fichier quelconque (le meme pour faciliter les choses)
alors j'ai ecris un user form de se type (evidemment ca ne marche pas, mais je debute) j'obtiens n fois la meme valeur et je ne clic qu'une fois!
en dessous donc le prog et ici quelques explications/
(le mon de fichier et dimension_tuyau_essai3, la feuille : data_tuyau
dans cette exemple, je voulais lire de B2 à B6 les données de la liste déroulante
et écrire à partir de b8 les résultats
en A8 je faisais afficher par ex jusqu'a A12 des valeurs non nul
merci pour tout soutien
a+
Option Explicit
Private Sub UserForm_Initialize()
usf1.Hide
Workbooks("dimension_tuyau_essai3.xls" ).Activate
Cbotuyau.RowSource = ("data_tuyau!b2:b6" )
Cbotuyau.ListIndex = -1
End Sub
Private Sub CmdValider_Click()
Dim i As Integer
Sheets("data_tuyau" ).Select
Range("A8" ).Activate
Do While Not (IsEmpty(ActiveCell))
Range("B8" ).Offset(i, 1) = Cbotuyau.Value
i = i + 1
ActiveCell.Offset(1, 0).Activate
Loop
ActiveWindow.WindowState = xlNormal
End Sub
Private Sub CmdAnnuler_Click()
ActiveWindow.WindowState = xlNormal
Unload usf1
End Sub