Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Autres enregistre non pas en ligne mais en colonne

Aucun

XLDnaute Nouveau
RE-bonnour,


Comme je l'ai indiqué dans ma présentation (à lire de toute urgence !) je vous soumets une petite interrogation (je ramasse les copies dans 1h30) !
Pour faire simple j’ai créé un formulaire avec des combobox et textebox. Lorsque l’on choisi dans l’une des combobox un chiffre allant de 1 à 5 j’ai 1 à 5 textbox qui s’affiche(nt). Jusque-là pas de soucis.

Le petit hic c’est que j’aimerais que les données des textbox qui s’affichent se compilent dans mon tableau dans la même colonne mais à la suite donc par exemple :

Si ma combobox contient le chiffre 4 j’ai 4 textboxe qui s’affiche que je nomme disons Txtb1 Txtb2 Txtb3 Txtb4

Les données de ces 4 textbox doivent s’enregistrer lorsque je clic sur le bouton valider dans le tableau à dans la colonne F les unes au-dessus des autres puisque ces 4 texbox contiennent le même type de donnée.

J’ai réussi à faire en sorte de recopier X fois le contenu des autre texbox ou combobox dans leur colonnes respectives mais enregistrer des données de sources différentes dans la même colonne je sais pas faire.

Quelqu’un a-t-il une idée ?

J'ai cette partie de code pour le boutton valider

Private Sub CommandButton3_Click()
Dim L As Long
Dim Derlign As Long
Derlign = Sheets("BDD").Range("A" & Rows.Count).End(xlUp).Row
If TextBox7 <= TextBox2 Or TextBox2 = "" Or TextBox2 = "JJ/MM/AA" Or TextBox3 = "" Or TextBox6 = "" Or TextBox7 = "" Or TextBox7 = "JJ/MM/AA" Or ComboBox1 = "" Or ComboBox2 = "" Or ComboBox4 = "" Or TextBox8.Visible = True And TextBox8 = "" Or TextBox9.Visible = True And TextBox9 = "" Or TextBox10.Visible = True And TextBox10 = "" Or TextBox11.Visible = True And TextBox11 = "" Or TextBox12.Visible = True And TextBox12 = "" Then
MsgBox ("Compléter toutes les informations / La date de délai doit être inférieure à la date de l'événement")
Else
If MsgBox("Voulez-vous confirmer l'ajout de ces données ?", vbYesNo, "Demande de confirmation") = vbYes Then 'condition : si oui au message
For L = 1 To Val(ComboBox5.Value)
Cells(Derlign + L, 1) = ComboBox1.Value
Cells(Derlign + L, 2) = ComboBox2.Value
Cells(Derlign + L, 3) = ComboBox4.Value
Cells(Derlign + L, 7) = ComboBox5.Value
Cells(Derlign + L, 4) = TextBox2.Value
Cells(Derlign + L, 5) = TextBox3.Value
Cells(Derlign + L, 8) = TextBox6.Value
Cells(Derlign + L, 9) = TextBox7.Value
Next
End If

' Affiche une boîte de message
MsgBox ("Données insérées dans la base de donnée") 'Vous informant que le présent contact est inséré dans votre tableau Excel.

Unload Me ' Vide et ferme l'Userform ( formulaire)
End If
End Sub


Merci par avance pour votre aide
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Essayez :
VB:
Cells(Derlign + L, 6) = Me("Txtb" & L).Value
Cela dit vous auriez du montrer le code qui fait d'abord en sorte que seules ces TextBox voient leur propriété Visible mise à True. Parce que pour faire ça vous deviez à priori utiliser la même syntaxe. À la conception de l'UserForm, avez vous bien nommé ainsi vos 5 TextBox, au moins ?
 
Dernière édition:

Aucun

XLDnaute Nouveau
Bonjour,


Pour répondre à la question je n'ai pas renomé les textbox ni combobox. Comme je n'en ai pas trop j'arrive à m'en sortir mais j'y penserai la prochaine fois vu que je débute je n'ai pas encore ce réflex.
Je vous copie l’ensemble de mon code, comme je suis débutant j’ai pris des bouts par ci par là que j’ai assemblé et adapté à mon besoin (parfois facilement parfois moins.). Je comprends la logique de certains codes mais d’autres j’avoue ne rien y comprendre. C’est pourquoi je sollicite l’aide des membres du forum.

Je vous copie l’ensemble de mon code pour avoir une meilleure idée (je pense qu'il y a moyen de modifier la partie combobox5 mais j'avoue ne pas savoir comment faire).

J’avoue que jusqu’à enregistrer le contenue d’une textbox ou combobox ça allait mais faire en sorte que plusieurs textbox s’enregistrent dans la même colonne à la suite je sèche un peu.

Je vais essayer avec votre code pour voir.

Merci pour la réponse c’est vraiment sympa !

Option Explicit 'Activation de la déclaration explicite des variables
Dim strtemp As String
Dim Ws As Worksheet


Private Sub ComboBox5_Change()
If ComboBox5.Value = 0 Then
Label14.Visible = False
Label15.Visible = False
Label16.Visible = False
Label17.Visible = False
Label18.Visible = False
Label19.Visible = False
TextBox8.Visible = False
TextBox9.Visible = False
TextBox10.Visible = False
TextBox11.Visible = False
TextBox12.Visible = False
Else
If ComboBox5.Value = 1 Then
Label15.Visible = True
TextBox8.Visible = True
Else
If ComboBox5.Value = 2 Then
Label15.Visible = True
Label16.Visible = True
TextBox8.Visible = True
TextBox9.Visible = True
Else
If ComboBox5.Value = 3 Then
Label15.Visible = True
Label16.Visible = True
Label17.Visible = True
TextBox8.Visible = True
TextBox9.Visible = True
TextBox10.Visible = True
Else
If ComboBox5.Value = 4 Then
Label15.Visible = True
Label16.Visible = True
Label17.Visible = True
Label18.Visible = True
TextBox8.Visible = True
TextBox9.Visible = True
TextBox10.Visible = True
TextBox11.Visible = True
Else
If ComboBox5.Value = 5 Then
Label15.Visible = True
Label16.Visible = True
Label17.Visible = True
Label18.Visible = True
Label19.Visible = True
TextBox8.Visible = True
TextBox9.Visible = True
TextBox10.Visible = True
TextBox11.Visible = True
TextBox12.Visible = True
Else
If ComboBox5.Value > 5 Then
Label14.Visible = True
Label15.Visible = True
Label16.Visible = True
Label17.Visible = True
Label18.Visible = True
Label19.Visible = True
TextBox8.Visible = True
TextBox9.Visible = True
TextBox10.Visible = True
TextBox11.Visible = True
TextBox12.Visible = True
End If
End If
End If
End If
End If
End If
End If
End Sub

Private Sub ComboBox5_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If InStr("1234567890", Chr(KeyAscii)) = 0 Then KeyAscii = 0: Beep
End Sub



Private Sub TextBox2_Change()
strtemp = TextBox2.Text
Select Case Len(strtemp)
Case 2, 6
strtemp = strtemp & "/ "
End Select
TextBox2.Text = strtemp
End Sub

Private Sub TextBox7_Change()
strtemp = TextBox7.Text
Select Case Len(strtemp)
Case 2, 6
strtemp = strtemp & "/ "
End Select
TextBox7.Text = strtemp
End Sub

Private Sub Userform_Initialize()
TextBox2.Text = "JJ/MM/AA"
TextBox7.Text = "JJ/MM/AA"
ComboBox5.Value = 0
Set Ws = Sheets("BDD")
End Sub

Private Sub CommandButton3_Click()
Dim L As Long
Dim Derlign As Long
Derlign = Sheets("BDD").Range("A" & Rows.Count).End(xlUp).Row
If TextBox7 <= TextBox2 Or TextBox2 = "" Or TextBox2 = "JJ/MM/AA" Or TextBox3 = "" Or TextBox6 = "" Or TextBox7 = "" Or TextBox7 = "JJ/MM/AA" Or ComboBox1 = "" Or ComboBox2 = "" Or ComboBox4 = "" Or TextBox8.Visible = True And TextBox8 = "" Or TextBox9.Visible = True And TextBox9 = "" Or TextBox10.Visible = True And TextBox10 = "" Or TextBox11.Visible = True And TextBox11 = "" Or TextBox12.Visible = True And TextBox12 = "" Then
MsgBox ("Compléter toutes les informations / La date de délai doit être inférieure à la date de l'événement")
Else
If MsgBox("Voulez-vous confirmer l'ajout de ces données ?", vbYesNo, "Demande de confirmation") = vbYes Then 'condition : si oui au message
For L = 1 To Val(ComboBox5.Value)
Cells(Derlign + L, 1) = ComboBox1.Value
Cells(Derlign + L, 2) = ComboBox2.Value
Cells(Derlign + L, 3) = ComboBox4.Value
Cells(Derlign + L, 7) = ComboBox5.Value
Cells(Derlign + L, 4) = TextBox2.Value
Cells(Derlign + L, 5) = TextBox3.Value
Cells(Derlign + L, 8) = TextBox6.Value
Cells(Derlign + L, 9) = TextBox7.Value
Next
End If

' Affiche une boîte de message
MsgBox ("Données insérées dans la base de donnée") 'Vous informant que le présent contact est inséré dans votre tableau Excel.

Unload Me ' Vide et ferme l'Userform ( formulaire)
End If
End Sub

Private Sub TextBox2_AfterUpdate()
On Error GoTo mesageerreur
TextBox2 = Format(TextBox2, "Short date")
Exit Sub
mesageerreur:
MsgBox ("Indiquer la date au format JJ/MM/AAAA")
TextBox2 = Empty
End Sub


Private Sub TextBox2_Enter()
If TextBox2 = "JJ/MM/AA" Then
TextBox2 = ""
End If
End Sub

Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If TextBox2 = "" Then
TextBox2 = "JJ/MM/AA"
End If
End Sub

Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If Not ((KeyAscii > 46 And KeyAscii < 58)) Then

KeyAscii = 0

End If

End Sub


Private Sub TextBox5_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If Not ((KeyAscii > 47 And KeyAscii < 58)) Then

KeyAscii = 0

End If
End Sub

Private Sub TextBox7_AfterUpdate()
On Error GoTo mesageerreur
TextBox7 = Format(TextBox7, "Short date")
Exit Sub
mesageerreur:
MsgBox ("Indiquer la date au format JJ/MM/AAAA")
TextBox7 = Empty
End Sub


Private Sub TextBox7_Enter()
If TextBox7 = "JJ/MM/AA" Then
TextBox7 = ""
End If
End Sub

Private Sub TextBox7_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If TextBox7 = "" Then
TextBox7 = "JJ/MM/AA"
End If
End Sub

Private Sub TextBox7_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If Not ((KeyAscii > 46 And KeyAscii < 58)) Then

KeyAscii = 0

End If
End Sub
 

Aucun

XLDnaute Nouveau
Bonjour,


Comme demandé je vous joins le document. Pour info j'ai trouvé une formule sur le net car après avoir essayé le code de Dranreb à plusieurs reprises je n’arrivais pas au résultat attendu (je pense qu’un truc m’échappais ou que je l’ai mal inséré). Bref merci pour l’aide malgré tout.
Maintenant je bute sur l’étape suivant : faire en sorte que la boucle crée pour la liste déroulante du nombre d’action (Cbnbaction) ne prenne pas plusieurs secondes à faire apparaitre le contenu de la page deux.

Ensuite je passerai à l’étape suivante coder les boutons options pour faire apparaître les textbox associées puis que les valeurs des ces dernières s’enregistrent à la bonne place. Tout un programme mais bon je commence à comprendre de plus en plus la logique et identifier mes erreurs quand je copie et adapte une ligne de code.

Vu qu’on y est pensez-vous qu’il serait plus judicieux de faire plusieurs pages de formulaire avec sur la page 2 que les infos relatives à l’action 1, sur la page 3 que les infos relatives à l’action 2 … ou faire comme j’ai fais une seule page avec l’apparition des info selon le nombre d’actions choisies ? Heu je sais pas si je suis clair, même moi je m’y perds

En tout cas je ne vois pas le temps passer et ça c’est cool !

Encore merci pour vos réponses passées et à venir.

EDIT : Je suis en train de me rendre compte que les boutons options servent à conditionner l'apparition des textbox responsables et délai si elles sont différentes de la textobx relatives à l'action une. Bref quand j'ai terminé je poste le code de remplacement (je vais y arriver, je vais y arriver !!!)

Bonne fin de journée
 

Pièces jointes

  • Formulaire 5 actions forum.xlsm
    61.8 KB · Affichages: 5
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
bonjour
j'ai ouvert ton fichier
l'ouverture de l'userform est tres pénible pour la mémoire
d’après ce que je comprends tu choisi un nombre dans la combo et le nombre de textboxs sont visible dans la page 4 du multipage c'est bien ca
dis mois un peu 5 ou plus ca sert a quoi ????tu n'en a que 5 lignes de textboxs

perso je reverrais entièrement ce code qui selon moi comporte des inutilités a foison
je commencerais deja par mettre chaque colonne de textbox dans une frame que je nommerai selon la colonne de destination dans le sheets et les textbox porterais des noms simple et court suivi d'un sufixe numerique incrémenté (1,2,3,4,5)
ainsi 3 ligne de code pour boucler dessus et les identifier en cohérence avec la destination
je regarderais ce soir en rentrant du boulot en l’état je l'ai refermé je n'ai pas assez de temps ce matin mais dans tout les cas tu peux pas le laisser comme tel
 

Aucun

XLDnaute Nouveau
Bonjour Patrick,


J'ai revu le code entre temps, je remets mon fichier.
En fait j'ai indiqué "5 ou plus" parce que je veux limiter le formulaire à 5 actions et si l'utilisateurs a 6 actions à renseigner par exemple il ouvre un autre formulaire pour rentrer une action supplémentaire (plus s’il en a plus). Normalement il ne devrait pas y avoir plus de 3-4 actions.
J’ai fait ce choix pour ne pas avoir à faire trop de textbox et autres objets et ne pas avoir à faire des ligne de fou déjà que je ne suis pas un expert.

Mais si une solution existe pour faire en sorte que l’on puisse entrer X actions dans le formulaire et que chaque action vienne se copier dans la case action de la base de données les unes au-dessus des autres je suis preneur .

Maintenant que j’ai allégé le chargement de mon formulaire je vais passer au codage des textboxe responsable et délai pour qu’elles apparaissent avec le clic sur le bouton option puis faire en sorte que chaque textebox active s’enregistre dans la colonne dédiée les unes au dessus des autres. Désolé je suis pas très clair mais je suis crevé après ma journée de travail.

Je vais rentrer

A demain bonne soirée / journée
 

Pièces jointes

  • Formulaire 5 actions forum.xlsm
    47.8 KB · Affichages: 14

Aucun

XLDnaute Nouveau
Bonjour,

J'ai vu ça en effet, en fait j'ai changé le premier formulaire en formulaire à onglet et j'ai oublié d'actaliser le lien.
Pour ce qui est des dates j'aimerais bien faire mieux mais bon je vois pas trop comment faire. Une tite piste ?
Je galère déjà à faire ce que j'ai envie de faire , je pense que j'ai mis la barre un peu haute pour un débutant comme moi mais bon je suis certains que je vais y arriver avant l'an 3000 .
 

Dranreb

XLDnaute Barbatruc
Bonjour.
J'ai eu 3 jours sans ordinateur.
J'aurais cru, depuis mon poste #2, que les contrôles se terminant par un chiffre tels que TbrespA1 à TbrespA5, à répéter mais pour chacun de leurs numéros de la bonne ligne L allant de1 à 5 auraient fait l'objet d'expressions telles que Me("TbrespA" & L).Value
 
Dernière édition:

jcf6464

XLDnaute Impliqué
Re bonjour à tous
Tu dis
Pour faire simple j’ai créé un formulaire avec des combobox et textebox. Lorsque l’on choisi dans l’une des combobox un chiffre allant de 1 à 5 j’ai 1 à 5 textbox qui s’affiche(nt). Jusque-là pas de soucis.

quand on saisie 3,4,5 la page 2 ne s"affiche pas

en aparté ton retour d'expérience (Rex) est pour quel travail ou sport,

de mon point de vue je pense qu'un seul formulaire ferait l'affaire,

a+ jcf
Regarde sur post cela pourrez t'aider
 
Dernière édition:

Aucun

XLDnaute Nouveau
Bonjour à toutes et tous,

Le document que je tente de faire est une base de données compilant le retour d’expérience de chaque exercice (incendie, environnement, …) sur plusieurs sites (au moins 1 exercice par quart et par site, environ une dizaine de sites voire plus dans le futur, au moins un quart par site jusqu’à 4 quarts). En gros il va y avoir plusieurs utilisateurs qui vont entrer pas mal de donner et comme je ne veux pas qu’ils aillent fouiller ou modifier mon tableau je passe par un formulaire.

Mon objectif est de faire en sorte que l’utilisateur entre la première page du formulaire et s’il a des actions qu’il puisse les renseigner sur les pages suivantes. Comme en général le responsable de l’action est toujours le même et que le délai de réalisation peut être différent d’action en action je voulais faire en sorte qu’en fonction de ma liste nombre d’actions j’ai les cases et label des actions 1 à X qui s’affichent avec une case à cocher si le responsable ou le délai est différent s’ils ne le sont pas lors de l’enregistrement c’est le responsable et/ou le délai de l’action 1 qui est/sont enregistré(s). Ca c’est pour le formulaire 1

Le formulaire deux j’espère arriver à bricoler quelque chose qui aille chercher les actions ouvertes pour chaque site et que l’utilisateur puisse renseigner l’état d’avancement, la réalisation ….

Après en avoir discuté avec des collègues on me conseil d’aller jusqu’à 10 actions (moi je reste persuadé qu’il n’y aura jamais plus de 5 actions par exercice mais bon la démocratie l’emporte).

Bref je suis en train d’essayer de faire une usine à gaz fonctionnelle voilà pour le résumé !

En plus je viens de me rendre compte que lorsque j’indique un nombre d’action par exemple 5, que je passe sur autre chose que la liste de nombre d’action (par exemple la description) et bien si je modifie le 5 en 3 je n’rien qui se modifie en conséquence. Mais bon ça c’est un autre problème.

Pour ce qui est de remplacer par me.(« X » & Numéro truc bidule chouette chose).value j’avoue que je suis partis sur autre chose et que je n’ai pas pensé à modifier ça. Je vais essayer de changer le tout (j’ai déjà tout renommé c’est pas mal non ? )

Tout ça pour dire qu’en voulant essayer d’anticiper tous les cas de figure et bien je me complique la vie !!!

P.S : rassurez moi vous aussi vous pensez que 5 actions c'est déjà pas mal pour un exercice ?
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Je sais que personnellement je n'aurais jamais procédé ainsi. J'aurais fait en sorte que l'UserForm ne traite qu'une seule ligne à la fois, avec possibilité d'ajouter, modifier ou supprimer une ligne. Si plusieurs lignes se rapportent à la même chose (il faudrait dire ce qui identifie l'ensemble) on pourrait les afficher dans une ListBox avec possibilité d'en sélectionner une en vue de la supprimer ou la modifier.
Mettez des ComboBox pour les éléments d'identification du jeu.
Remarque : Il y a bien 3 ComboBox Site, Type et Catégorie mais elles semblent prévues avec des listes fixes et ne peuvent donc pas être utilisées pour des recherches dans la base à l'aide de listes construites dynamiquement d'après ce qui y existe.
 
Dernière édition:

Discussions similaires

Réponses
6
Affichages
485
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…