Pb sur fichier de saisie : boucle, mise à jour de label et limitation des textbox

franckyh1

XLDnaute Nouveau
Bonjour,

Je pense que quelqu'un pourra m'aider, j'ai avancé sur un fichier avec mes connaissances limitées mais là je bloque.

C'est un fichier de commande repas.
Je joins un fichier de saisie, j'ai créer 2 userform, un d'accueil pour sélectionner les paramètres globaux du fichier, le second pour la saisie des repas chambre par chambre.

Le second userform me pose 3 problèmes (Userform1):

1- je ne sais pas créer une boucle qui me permet de changer de ligne dans le tableau pour renseigner la ligne correspondant à la chambre.

2- J'ai trouvé un moyen de mettre à jour les labels (labels qui doivent correspondre au plat proposé dans la ligne en jaune), j'ai mis un exemple dans le code de la combobox ceci me va très bien, mais existe-t-il un moyen de faire correspondre rapidement au labels les cellules car la cela fait une quantite de ligne à rentrer dans le code vba du combobox.

3- J'ai également trouvé le moyen de limiter la saisie dans les textbox à 0 et 1. Je voudrais l'appliquer à une grande quantité de textbox mais pas toutes...

Pouvez vous me guider ou me proposer des codes pour ces problèmatique?

Merci à tous par avance.
 

Pièces jointes

  • Service vierge.xls
    236 KB · Affichages: 50

Robert

XLDnaute Barbatruc
Repose en paix
Re : Pb sur fichier de saisie : boucle, mise à jour de label et limitation des textbo

Bonjour Francky, bonjour le forum,

Pour le numéro de chambre c'est simple. La propriété ListIndex de la ComboBox renvoie le numéro de l'item sélectionné (de 0 pour le premier à Nombre d'items -1 pour le dernier). Sachant que le premier item (Chambre 100) se trouve en ligne 3, la correspondance est toute faite : la ligne est égale à Me.ComboBox1.ListIndex + 3. Il te suffit donc de céer une variable (li par exemple) pour récupérer le numéro de ligne avec li = Me.ComboBox1.Listindex.

Ensuite, je ne comprends pas la correspondance entre ton tableau et ton UserForm. Il y a des labels partout dans le contrôle multipage, en dehors... Que doit-on faire correspondre avec quoi.
En principe, dans ton cas on utilise une boucle For... Next. Mais il faudrait que les Labels se suivent (Label1, Label2,... Labelx), dans le même ordre que les cellules de ton tableau. Je trouve ton idée de présenter ça avec des labels/textboxes pas très pratique. Une ListBox serait bien plus appropriée et simple à gérer à mon avis. Je t'aurais bien proposé quelque chose mais comme je t'ai dit plus haut, je me comprend pas comment ça fonctionne avec le multipage.

Pour finir, afin d'éviter d'écrire le code de limitation de saisie dans beaucoup de labels, il faut utiliser un module de classe. Là aussi il faut boucler sur les labels pour dire lesquels auront la limitation et lesquels ne l'auront pas. Donc il vaut mieux les avoir dans l'ordre... Et connaître lesquels.

Bref, ton exemple est trop bordélique (pour moi) pour que je te fasse une proposition...
 

franckyh1

XLDnaute Nouveau
Re : Pb sur fichier de saisie : boucle, mise à jour de label et limitation des textbo

Merci pour l'aspect direct de ta réponse.

J'avais essayé de construire quelque chose de rapide pour que vous compreniez tout ce que je souhaitais faire.

J'ai remis en forme le menu normal du tableau en jaune (5éléments de C2 à G2) doit :
correspondre au label 1 à 5, les textbox au éléments précédents et doivent renseigner les champs devant les numéros de chambres choisies.

Ensuite même chose pour les autres menus (5 éléments à chaque fois) que j'ai coloré et qui doivent se retrouver dans les onglets du userform selon les chiffres de label et textbox suivants.

Merci de votre aide et intérêts.
 

Pièces jointes

  • Service vierge2.xls
    239 KB · Affichages: 41
Dernière édition:

Robert

XLDnaute Barbatruc
Repose en paix
Re : Pb sur fichier de saisie : boucle, mise à jour de label et limitation des textbo

Bonsoir Franky, bonsoir le forum,

Merci c'est beaucoup plus limpide ! J'ai commencé à y travailler mais là il est tard je vais me coucher...
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Pb sur fichier de saisie : boucle, mise à jour de label et limitation des textbo

Bonjour Franky, bonjour le forum,

Comme je n'ai pas le contrôle Calendar sur mon PC, j'ai pas mal de problèmes de bibliothèques manquantes avec ton fichier... Du coup, je ne peux pas tester correctement. Je t'envoie quand même pour que tu puisses récupérer le code et voir comment ça fonctionne.
Je n'ai pas compris pourquoi tu alimentais les labels au changement dans la ComboBox1 (Chambre) puisque ce changement n'influe pas sur les menus... J'ai donc mis tout le code à l'initialisation. Attention, la première ligne de code est importante il ne faut pas la supprimer. Elle déclare le tableau TTB qui va contenir les textboxes qui vont être membres de la classe "TB" du module de classe "TbClass"
Code:
Private TTB() As New TbClass 'déclare le tableau TTB (Tableau des CheckBoxes)

Private Sub UserForm_Initialize() 'à l'initialisation de l'UserForm
Dim ctrl As Control 'déclare la variable ctrl (ConTRôLe)
Dim s As Object 'déclare la variable s (onglet Saisie)
Dim dl As Integer 'déclare la variable dl (Dernière Ligne)
Dim pl As Range 'déclare la variable pl (PLage)
Dim cel As Range 'déclare la variable cel (CELlule)
Dim i As Byte 'déclare la variable i (Incrément)

'*******************************************************************************************************************
'alimentation du Tableau des textboxes qui ne vont accepter que les touches 0 et 1 (Voir Module de Classe "TbClass")
'*******************************************************************************************************************
For Each ctrl In Me.Controls 'boucle sur tous les contrôles ctrl de l'UserForm
    If TypeOf ctrl Is MSForms.TextBox Then 'condition : si le contrôle est une Textbox
        Select Case ctrl.Name 'agit en fonction du nom du contrôle ctrl
            'case 'ici, mets le noms des contrôles que tu veux exclure du tableau TTB(ex.: "TextBox15", "TextBox20")
            
            Case Else 'tous les autres cas
                    ReDim Preserve TTB(0 To i) 'redimensionne le tableau TTB
                    Set TTB(i).TB = ctrl 'ajoute le contrôle au tableau
                    i = i + 1 'incrémente i
        End Select 'fin de l'action en fonction du nom du contrôle ctrl
    End If 'fin de la condition
Next ctrl

'****************************
'alimentation de la ComboBox1
'****************************
Set s = Sheets("Saisie") 'définit l'onglet s
dl = s.Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée dl de la colonne 1 (=A) de l'onglet s
Set pl = s.Range("A3:A" & dl) 'définit la plage pl
For Each cel In pl 'boucle sur toutes les cellules cel de la plage pl
    'ajoute la valeur de la cellule à la ComboBox1 si elle né st pas nulle
    If cel.Value <> "" Then Me.ComboBox1.AddItem cel.Value
Next cel 'prochaine cellule de la boucle

'***********************
'alimentation des labels
'***********************
For i = 1 To 5 'boucle sur les 5 labels (tu adapteras par la suite)
    Me.Controls("Label" & i).Caption = s.Cells(2, i + 2).Value 'récupère la valeur de la cellule du tableau
Next i 'prochain label de la boucle
End Sub

Le module de classe évite, entre autres, d'écrire le même code pour plusieurs contrôles. Il suffit d'alimenter le tableau des contrôles à l'initialisation de l'UserForm et de placer le code dans le module de classe :
Code:
Public WithEvents TB As MSForms.TextBox

Private Sub TB_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii < 48 Or KeyAscii > 49 Then KeyAscii = 8: Beep
'If InStr("01", Chr(KeyAscii)) = 0 Then KeyAscii = 0: Beep
End Sub
Remarque : comme j'ai un bug avec Chr j'ai écrit un code qui fait à peu près la même chose...

À partir de là, tous les contrôles faisant parti du tableau TTB vont réagir à la macro événementielle KeyPress...
Mais comme je t'ai dit plus haut, j'ai des bugs en testant à cause de bibliothèques manquantes. J'espère que chez toi ça tournera...

Le fichier :
 

Pièces jointes

  • Franky_v01.xls
    253 KB · Affichages: 43

franckyh1

XLDnaute Nouveau
Re : Pb sur fichier de saisie : boucle, mise à jour de label et limitation des textbo

Bonjour,

Merci Robert pour ta réponse mais la boucle ne marche pas et je ne trouve pas.

Pouvez vous m'aider j'ai avancer sur les textbox et les label correspondants.

Je souhaite que lors de la saisie, l'utilisateur choisit les numéro de chambre dans la userform 1 qui remplit le tableau de la feuille Saisie.

Merci à tous.
 

Pièces jointes

  • Service vierge4.xls
    255.5 KB · Affichages: 47
  • Service vierge4.xls
    255.5 KB · Affichages: 43
  • Service vierge4.xls
    255.5 KB · Affichages: 59

Robert

XLDnaute Barbatruc
Repose en paix
Re : Pb sur fichier de saisie : boucle, mise à jour de label et limitation des textbo

Bonjour Francky, bonjour le forum,

Bonjour,

Merci Robert pour ta réponse mais la boucle ne marche pas et je ne trouve pas.

Tu ne trouve pas quoi ? Si il y a bug, en cliquant sur le bouton Débogage la ligne qui plante est surlignée de jaune. Tu pourrais au moins la recopier...
Mais visiblement, ce qu'il te faut c'est une solution clé en main, peut importe si tu as compris... Vu le désintéressement, je ne pense pas te recroiser sur ce forum...
 

franckyh1

XLDnaute Nouveau
Re : Pb sur fichier de saisie : boucle, mise à jour de label et limitation des textbo

Je trouve ta réponse très dur, surtout que si tu regardes j'ai beaucoup bosser entre temps.
Il y avait même une erreur sur le code que tu m'as donné.
Le initialize était indiqué UserForm et je l'ai remis en Userform1.

Je n'ai pas de ligne bloqué justement d'où mon problème.
Juste que le userform ne remplit pas le tableau et je ne comprends pas d'où cela vient.

Désolé de m'exprimer de cette façon mais mon but est de comprendre et de garder un repect pour tout le forum.

Merci si tu peux m'aider quand même.
 

Staple1600

XLDnaute Barbatruc
Re : Pb sur fichier de saisie : boucle, mise à jour de label et limitation des textbo

Bonjour à tous, Robert


Le initialize était indiqué UserForm et je l'ai remis en Userform1.
Ce n'est pas une erreur ;)
Ça doit être ainsi
Code:
Private Sub UserForm_Initialize()
'ici le code VBA
End Sub
Cela explique pourquoi l'userform ne s'initialisait pas
 

franckyh1

XLDnaute Nouveau
Re : Pb sur fichier de saisie : boucle, mise à jour de label et limitation des textbo

Oui, en effet je comprends mieux.

Malheuresement, je suis vraiment perdu.

Désormais, c'est le userform 1 qui ne se lance plus avec la commande
userfor1.show

J'ai une erreur 70, alors que cela marchait avant.

Vous pouvez m'indiquer la problèmatique?

Merci
 

Pièces jointes

  • Service vierge4.xls
    272 KB · Affichages: 43
  • Service vierge4.xls
    272 KB · Affichages: 45
  • Service vierge4.xls
    272 KB · Affichages: 49

Staple1600

XLDnaute Barbatruc
Re : Pb sur fichier de saisie : boucle, mise à jour de label et limitation des textbo

Re


Code:
Private Sub o_Click()
Unload UserForm2
UserForm.Show
End Sub
Par contre ici, il faut que ce soit UserForm1.Show

Pour comprendre un plus à propos des Userform, voir ce que dit l'aide de VBE (ALT+F11 puis F1)
voir également les tutoriaux dans la section Téléchargement du forum ou ailleurs sur le net.
 

franckyh1

XLDnaute Nouveau
Re : Pb sur fichier de saisie : boucle, mise à jour de label et limitation des textbo

Re


Code:
Private Sub o_Click()
Unload UserForm2
UserForm.Show
End Sub
Par contre ici, il faut que ce soit UserForm1.Show

Pour comprendre un plus à propos des Userform, voir ce que dit l'aide de VBE (ALT+F11 puis F1)
voir également les tutoriaux dans la section Téléchargement du forum ou ailleurs sur le net.

Oui, c'est ce qu'il y a dans mon dernier fichier.
Du coup, je tente la section que tu me conseille mais si tu as testé et que ça marche, sur mon ordi ca bugge.
 

Staple1600

XLDnaute Barbatruc
Re : Pb sur fichier de saisie : boucle, mise à jour de label et limitation des textbo

Re

Code:
Oui, c'est ce qu'il y a dans mon dernier fichier.
Non.
Mon copier/coller vient de ton dernier fichier
errUsf.png
Regardes dedans une seconde fois.
 
Dernière édition:

franckyh1

XLDnaute Nouveau
Re : Pb sur fichier de saisie : boucle, mise à jour de label et limitation des textbo

En effet tu as raison.

J'avais suivi ton conseil sur le fichier de mon ordi et ça me donne erreur 70.

Je ne comprends pas, j'ai cru comprendre que c'est un refus d'accés...
 

Discussions similaires

Statistiques des forums

Discussions
312 206
Messages
2 086 202
Membres
103 157
dernier inscrit
youma