Initialisation d'un UserForm

Bonjour,

Je "m'amuse" actuellement à programmer des fonctions simples pour me simplifier la vie dans certains cours. Je cherche par l'intermédiaire d'un UserForm à entrer des coefficients pour ensuite tracer la fonction. Je pensais que tout allez bien se passer étant donné que j'ai déjà réaliser des projets Excel sans trop de soucis.

Mais voilà à peine mon UserForm crée, je n'arrive absolument pas à initialiser les différents boutons (TextBox ou ListBox). En réutilisant la structure de mes anciens fichiers ou bien en cherchant sur internet il n'y a rien à faire malheureusement. Le débogage se passe sans soucis mais les valeurs ou textes ne s'affichent pas..

Pourriez vous m'aider sans trop changer le code car selon moi celui-ci devrait fonctionner :

TextBox1.Value = 15 Par exemple..

Le plus frustrant est la List qui n'affiche rien. J'ai contourné le pb par des cases à cocher mais si vous avez des tuyaux je suis preneur. (peut-être un problème de version.. je ne sais plus trop..)

Je vous met en lien le fichier. Il n'y a vraiment pas grand chose, juste l'initialisation est à corriger (pour l'instant)

Merci d'avance et bonne journée à vous!

Ps : En fait en cliquant sur le bouton ok j'ai également une erreur que je ne comprends pas trop. Le code fonctionne tres bien sur d'autres fichiers comme mes anciens projet ou autre, d'où ma suspicion d'un pb de logiciel ou de PC

Bonjour

Déjà une première chose à modifier --> Private Sub UserForm_Initialize() et non Private Sub UserForm2_Initialize()

Je regarde le reste

Cordialement

Merci beaucoup d'être aussi réactif!

Il s'agit bien du 2. J'en avais crée un premier que j'ai effacé depuis je n'ai pas modifier leur nom

La textbox ListFonction, ne sert pas il me semble puisque vous avez les boutons option 1, 2 et 3. dites moi

Les boutons 1,2,3 servent à sélectionner la fonction 1,2 ou 3. Je l'ai ai crée pour remplacer la ListBox qui devait m'afficher les différents textes de la colonne A (donc Fonction1, Fonctions ..ect)

Le problème c'est qu'au bout d'un moment j'aurais besoin de bien plus de trois fonctions, les boutons de sélections vont vite devenir trop nombreux. Mais pour la liste j'ai tout essayé : Afficher les texte des cases A4 et A5 par exemple avec un code basique , A l'aide du

With ListBox

.Additem "....."

...

End With

Ainsi que le code affichant le texte de toutes les ligne de la colonne A tant que la ligne n'est pas vide

Mais rien n'y fait..

Enfin les Textox servent à entrer des valeurs des coefficient qui vont se ranger dans la ligne correspondant à la Fonctions choisie.

Re

Donc on peut supprimer les boutons d'option ?

Ce que vous voulez faire c'est compléter les texbox, et après avoir choisi la fonction dans la listbox, reportez les données dans la feuille en cliquant sur OK

Edit :

Au lancement de l'userform, mettez ce code

Private Sub UserForm_Initialize()

Me.ListFonction.List = Range("A3:A5").Value

End Sub

Merci beaucoup! De mémoire j'avais bien plus de ligne pour récuper les valeurs ^^. Ca va beaucoup m'aider!

Du coup pas besoin d'initialiser les TextBox elles se mettent à zéro par défaut ou n'interviennent pas dans le calculs je n'y avais pas penser plus tôt

Ah!! En effet tout fonctionne sans le 2 du UserFrom. J'étais persuadé l'avoir bien renommé mais je n'avais pas vu le UserForm dans sa définition..

Merci beaucoup. Vous avez fait bien plus que je m'imaginé!!

Ok. Il faudrait laisser la place en colonne A pour ajouter des fonctions car le code que je vous propose ne prend que les fonctions sur trois lignes

Voici le code pour votre bouton OK

Private Sub OK_Click()
Dim fct As Byte, i as byte
fct = Right(ListFonction.List(ListFonction.ListIndex), 1)
For i = 1 To 9
    With Sheets("Equation")
        .Cells(fct + 2, i + 1) = Controls("TextBox" & i).Value
    End With
    Controls("TextBox" & i).Value = ""
Next i
ListFonction.ListIndex = -1
End Sub

Une fois les données remises dans la feuille, les textbox sont vidées des infos

Dernière petite question ^^

Savez-vous ce qui peut poser problème dans ces quelques lignes? Pas d'erreur au débogage alors je dois être encore à côté de la plaque.

Private Sub UserForm_Initialize()

Dim ligne_fontion As Integer

ligne_fonction = 3
Do Until IsEmpty(Worksheets("Equation").Cells(1, ligne_fonction))
Call Me.ListFonction.AddItem(Worksheets("Equation").Cells(1,ligne_fonction).Value)
ligne_fonction = ligne_fonction + 1
Loop

End sub

L'autre solution est de créer une variable cherchant la dernière ligne non nulle pour ensuite afficher dans la liste de la cellule A4 à A&"L". Celle-ci fonctionne bien mais je me suis dit que j'allais essayer plusieurs possibilités. Niveau optimisation je n'y connais vraiment rien alors je ne sais pas quelles méthode privilégier.

Encore Merci pour votre aide!

En fait vous avez inversé le 1 et ligne_fonction --> CELLS (Ligne, Colonne) donc Cells(1, ligne_fonction)

Comme ceci mais je ne vois pas pourquoi utiliser le DO. Evitez les boucles quand cela est possible

Private Sub UserForm_Initialize()

ligne_fonction = 3
Do Until IsEmpty(Worksheets("Equation").Cells(ligne_fonction, 1))
    Me.ListFonction.AddItem Worksheets("Equation").Cells(ligne_fonction, 1)
    ligne_fonction = ligne_fonction + 1
Loop
End Sub

Attention vous aurez un bug à cause de votre formule en A7 qui renvoie une erreur "Nom".

Le plus simple à faire est de laisser la colonne A pour ajouter les fonctions. Donc déplacez d'une colonne toutes les valeurs entre les lignes 9 à 109 en colonne B. Ensuite vous mettez le code ci-dessous pour ouvrir l'USF

Private Sub UserForm_Initialize()
Me.ListFonction.List = Range("A3:A" & Range("A" & Rows.Count).End(xlUp).Row).Value
End sub

Bonjour,

Merci beaucoup, tout fonctionne à peu près bien. J'ai eu le temps de regarder la suite que vous m'avez envoyé. Le code pour le bonton "OK"m'affiche une erreur au niveau

fct = Right(ListFonction.List(ListFonction.ListIndex), 1) Mais là je ne comprends pas trop comment interpréter cette ligne..

Il y a également la fin que je ne saisie pas trop

Controls("TextBox" & i).Value = "" // Celle-ci sert-elle à réinitiliser les TextBox? Je ne connaissais pas du tout "Controls" auparavant

Merci :)

Bonjour,

fct = Right(ListFonction.List(ListFonction.ListIndex), 1) Mais là je ne comprends pas trop comment interpréter cette ligne..

Lorsque vous cliquez dans la listbox des fonction dans l'userform afin de choisir la fonction, fct vous renvoie le chiffre de la fonction choisie. Je réutilise ce chiffre dans la boucle en dessous pour savoir sur quelle ligne les données doivent être placées dans le tableau.

Controls("TextBox" & i).Value = "" // Celle-ci sert-elle à réinitiliser les TextBox? Je ne connaissais pas du tout "Controls" auparavant

Oui. Cela permet d'écrire le code dans un boucle sur 3 lignes plutôt que d'avoir 9 lignes en écrivant comme ceci --> Textbox1.value = "", Textbox2.value = ""
En fait tous les objets Textbox et combobox peuvent remplacé par des Controls("...."). Cela n'a d'intérêt que pour raccourcir les codes.

Cordialement

Merci beaucoup d'avoir pris le temps de m'aider

C'est parfaitement clair maintenant et le code ne fait pas 50 lignes pour pas grand chose.

Bonne journée à vous.

Cordialement

Rechercher des sujets similaires à "initialisation userform"