Aide pour amélioration userform

Vincenzozo

XLDnaute Nouveau
[Résolu] Aide pour amélioration userform

Bonjour à tous et à toutes,

Voilà, je suis en train de créer un fichier qui servira de base de données production, et donc pour faciliter la vie des gens qui vont devoir l'utiliser (mes collègues quoi... :D) je tente de mettre en place une userform pratique et fonctionnelle...

Je me base sur un fichier créer par Thierry sur ce forum...
(https://www.excel-downloads.com/threads/formulaire-de-saisie-genere-a-partir-dune-macro-excell.6154/ pour les nostalgiques... merci à lui pour son aide induite! :p)

Donc voilà, si on lance la userform, les chefs d'équipes doivent remplir les formulaires (ils ne sont pas encore tous présents, je dois encore en rajouter...)
-> Date
-> Machine
-> Pause (ou poste en français!! :D)
-> 9 Textbox

Je n'arrive pas à faire qques petits trucs lors de la validation du formulaire :
- Rendre obligatoire le remplissage de tous les champs...
- Vide automatiquement les Textbox lorsque l'on clique dedans...
- Mettre dans une variable la donnée du poste de façon à pouvoir la mettre dans le tableau...
- Faire en sorte que lorsqu'on appuie sur tab on passe de la date à la machine, puis au poste, puis à textbox1, textbox2, etc. Je sais que c'est du pinaillage, mais je pense que ça peut être utile de l'avoir dans l'ordre...

Voilà, c'est tout pour le moment, si vous pouvez m'aider la dessus, ce serait super!

Je complète ma userform et je reviendrai pour mes nouveaux problèmes... :) Mais cela est une autre histoire... :D

Vincenzozo
 

Pièces jointes

  • Test.zip
    19.8 KB · Affichages: 68
  • Test.zip
    19.8 KB · Affichages: 72
  • Test.zip
    19.8 KB · Affichages: 66
Dernière édition:
G

Guest

Guest
Re : Aide pour amélioration userform

Bonjour vicenzozo,

Pour le poste:

Code:
Dim poste
    Poste = Abs((OptionButton1 * 1) + (OptionButton2 * 2) + (OptionButton3 * 3) + (OptionButton4 * 4) + (OptionButton5 * 5))

Pour le contrôle des textBox

Code:
Dim i as interger
 
Dim TextBoxOk As Boolean
TextBoxOk=True
 For i = 1 To 9
        If Me.Controls("TextBox" & i) = "" Then TextBoxOk = False: Exit For
 next
 If Not TextBoxOk Then
      MsgBox "Vous devez remplir tous les textBox", vbExclamation, "Validation"
    Me.Controls("TextBox" & i).SetFocus
    Exit Sub
 End If

Pour vider un textbox lorsque l'utilisateur rentre dedans:
Code:
Private Sub TextBox1_Enter()
 TextBox1 = ""
End Sub

Pour l'ordre de saisie, le userform affiché: Menu Affichage/ordre de tabulation.

A bientôt
 

Vincenzozo

XLDnaute Nouveau
Re : Aide pour amélioration userform

Bonjour vicenzozo,

Pour le poste:

Code:
Dim poste
    Poste = Abs((OptionButton1 * 1) + (OptionButton2 * 2) + (OptionButton3 * 3) + (OptionButton4 * 4) + (OptionButton5 * 5))

Merci pour ton aide, mais j'avoue ne pas comprendre le passage ci dessus ...
J'attribue une valeur à la variable poste, c'est bien ça?
Mais le calcul... :confused::confused:

Encore merci.
Vincenzozo
 
Dernière édition:
G

Guest

Guest
Re : Aide pour amélioration userform

Bonjour Vicenzo,

Poste=Abs((OptionButton1 * 1) + (OptionButton2 * 2) + (OptionButton3 * 3) + (OptionButton4 * 4) + (OptionButton5 * 5))

La valeur de chaque bouton d'option est soit True soit false.
Pour VBA: Ture= -1 et False=0

Optionbutton1*1 = -1 si True 0 si False
OptionButton2*2 = -2 si True 0 si False
OptionButton3*3 = -3 si True 0 si False

Comme 1 seul des 3 boutons peut être coché le resulat de la somme des trois valeurs ne peut être que -1 ou -2 ou -3

Abs(...) retourne l'absolu de ce résultat (1 ou 2 ou 3)

C'est une façon d'opérer qui permet d'éviter les tests successifs des boutons d'option.

A bientôt
 

Vincenzozo

XLDnaute Nouveau
Re : Aide pour amélioration userform

Bonjour,

J'ai maintenant un autre soucis,

J'ai dans ma userform, des tableaux de textbox, que je souhaite récupérer en gardant la mise en forme tableau....
J'ai des colonnes textbox..a et des colonnes textbox..b (ou .. sont des chiffres qui diffèrent d'un tableau à l'autre)
J'ai prévu dans ces tableaux 10 lignes, mais il se peut que toutes ne soient pas remplies...

De ce fait, je ne peux pas utiliser une méthode de base (à l'image de mon niveau en vba...) qui consiterai à dire
textbox01a => cellule colonne A ligne 1
textbox01b => cellule colonne B ligne 1
... etc. etc. ...
textbox10a => cellule colonne A ligne 10
textbox10b => cellule colonne B ligne 10

Je n'ai pas besoin de copier des box vides, qui vont me générer des lignes vides et donc des trous dans ma BDD...

Voilà, please help! :rolleyes:Merci d'avance.
Vincenzozo

PS : Pour le moment, j'ai ce code qui va bien pour un tableau à une seule colonne, si jamais ç peut vous aider, mais pour ce tableau là, toutes les lignes doivent être remplies...
Code:
'Pour voir se qui se passe je bascule sur la feuille "Datas"
Sheets("Datas").Activate

'Ici c'est le report de la saisie dans la feuille
With Sheets("Datas")
.Range("A" & L).Value = Calendar1.Value
.Range("B" & L).Value = pause
.Range("C" & L).Value = ListBox1.Value
.Range("D" & L).Value = TextBox1.Value
.Range("E" & L).Value = TextBox2.Value
.Range("F" & L).Value = TextBox3.Value
.Range("G" & L).Value = TextBox4.Value
.Range("H" & L).Value = TextBox5.Value
.Range("I" & L).Value = TextBox6.Value
.Range("J" & L).Value = TextBox7.Value
.Range("K" & L).Value = TextBox8.Value
.Range("L" & L).Value = TextBox9.Value
End With
 
Dernière édition:
G

Guest

Guest
Re : Aide pour amélioration userform

Bonsoir Vicenzo,



IF len(Trim(TextBox01 & TextBox02 & TextBox03)) =0 Then Lignevide

(Si la longueur de la concatenation des textbox est égale à zéro, on a une ligne vide)

A supposer que TextBox01 à TextBox03 représente une ligne

A+++++
 

Vincenzozo

XLDnaute Nouveau
Re : Aide pour amélioration userform

IF len(Trim(TextBox01 & TextBox02 & TextBox03)) =0 Then Lignevide
(Si la longueur de la concatenation des textbox est égale à zéro, on a une ligne vide)

Bojour,

Je comprends bien ta formule, mais par contre, je n'arrive pas à voir comment l'appliquer...
Ce que je souhaite

Code:
ça, c'est la trame de l'USF.
Textbox10a  Textbox10b  Textbox10c
Textbox11a  Textbox11b  Textbox11c
Textbox12a  Textbox12b  Textbox12c

Une fois remplie, ça donne ceci :
Valeur1x1  Valeur1x2  Valeur1x3
Valeur2x1  Valeur2x2  Valeur2x3
rien       rien      rien

Et une fois recopié dans le tabelau excel, ça devrait donner ceci
          Colonne A  Colonne B  Colonne C
Ligne A : Valeur1x1  Valeur1x2   Valeur1x3
Ligne B : Valeur2x1  Valeur2x2   Valeur2x3

JE suis OK pour le test de la ligne vide, mais je n'arrive pas à implémenter une boucle qui vienne automatiquement recopier les lignes non vides...
Sachant que l'hypothèse est que le chef d'équipe remplisse les lignes sans laisser de trous... :)

Voilà, si ça peut t'aider à mieux comprendre mon problème...
Si tu as besoin d'autres infos, n'hésite pas!

Bien à toi,
Vincenzozo
 

Vincenzozo

XLDnaute Nouveau
Aide boucle qui boucle pas...

Bonjour à tous,

Bon, j'ai trouvé, mais je me pose une question :
dans une boucle, à quoi sert un "exit sub"???

Je vous colle mon code en exemple, si vous pouviez me renseigner sur ce qui est mieux : rien ou le exit sub dans ce cas là!

Merci

Code:
'Reporting des performances
'Pour voir se qui se passe je bascule sur la feuille "Perf"
Sheets("Perf").Activate
'ici je repère la dernière ligne vide pour le recueil des données
Lpe = Sheets("Perf").Range("A65536").End(xlUp).Row + 1
With Sheets("Perf")
For vpe = 10 To 25
    If Len(Trim(Me.Controls("TextBox" & vpe & "b") & Me.Controls("TextBox" & vpe & "c") & Me.Controls("TextBox" & vpe & "d") & Me.Controls("TextBox" & vpe & "e") & Me.Controls("TextBox" & vpe & "f") & Me.Controls("TextBox" & vpe & "g"))) <> 0 Then
    .Range("A" & Lpe).Value = Calendar1.Value
    .Range("B" & Lpe).Value = pause
    .Range("C" & Lpe).Value = ListBox1.Value
    .Range("D" & Lpe).Value = Me.Controls("ComboBox" & vpe & "a").Value
    .Range("E" & Lpe).Value = Me.Controls("Textbox" & vpe & "b").Value
    .Range("F" & Lpe).Value = Me.Controls("Textbox" & vpe & "c").Value
    .Range("G" & Lpe).Value = Me.Controls("Textbox" & vpe & "d").Value
    .Range("H" & Lpe).Value = Me.Controls("Textbox" & vpe & "e").Value
    .Range("I" & Lpe).Value = Me.Controls("Textbox" & vpe & "f").Value
    .Range("J" & Lpe).Value = Me.Controls("Textbox" & vpe & "g").Value
    Lpe = Lpe + 1
Else
    'If Len(Trim(Me.Controls("TextBox" & vpe & "b") & Me.Controls("TextBox" & vpe & "c") & Me.Controls("TextBox" & vpe & "d") & Me.Controls("TextBox" & vpe & "e") & Me.Controls("TextBox" & vpe & "f") & Me.Controls("TextBox" & vpe & "g"))) = 0 Then Exit Sub
End If
Next
End With
 
Dernière édition:
G

Guest

Guest
Re : Aide pour amélioration userform

Vincenzo,

Vincenzo à dit:
dans une boucle, à quoi sert un "exit sub"???

De manière générale et au besoin, dans un boucle for on met 'Exit For' et dans une boucle Do 'Exit Do'. Cela permet de mettre proprement fin à la boucle.

Dans ton cas, puisque tu n'as pas d'autres traitements que ceux qui répondent à la condition, 'Exit For' n'est pas necessaire.

A bientôt
 

Discussions similaires

Réponses
4
Affichages
217

Statistiques des forums

Discussions
312 329
Messages
2 087 334
Membres
103 519
dernier inscrit
Thomas_grc11