Userform lié à base de données excel

Fermé
lili - Modifié par lili le 20/10/2015 à 22:32
 Maurice - 21 oct. 2015 à 17:14
Bonjour,

je débute en VBA et userform et je galère à fond !!!
J'ai créé le fichier ci-dessous :
http://www.cjoint.com/c/EJutR0XcVeM


mais je n'arrive pas à faire en sorte que les données de l'USF s'enregistrent dans la ligne 3 de mon tableau feuille "base de données". A chaque ligne "3" enregistrée je veux qu'excel créé une nouvelle ligne n°3 pour permettre l'enregistrement d'un nouveau contenu d'usf.

Ensuite, je n'arrive pas a créer une macro me permettant de ré-ouvrir un usf via un n° précédemment rentré (Cf. feuille "accueil" D20:I22).

Pouvez-vous m'aider svp ??? je galère !!!
A voir également:

5 réponses

Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149
21 oct. 2015 à 00:18
Bonjour,

- évite le multi-page, ça complique les choses.
- peut-on avoir plusieurs offres de service à la fois ? si non, préférer des boutons radio et on affiche/dégrise les champs adéquats en-dessous
- pour le repérage, que doit-on remplir à côté de CAMPS, etc. ? Juste oui/non ou un nom de famille. Si c'est oui/non, une listbox à sélection multiple est plus approprié.
- remplir les cellules par rapport aux évolutions des TextBox, pourquoi pas, mais si on annule une saisie, il faudrait pouvoir tout vider. Peut-être faudrait-il remplir le tableau à la toute fin, quand on valide la saisie UserForm.

Sinon par rapport à ta demande tu peux faire :
Rows(3).Insert
Unload UserForm1
Load UserForm1
UserForm1.Show

A+
0
Bonjour,
tout d'abord merci pour ta réponse.
J'ai choisi le MultPage car un acteur peut être concerné par tous les services, et ça sera très souvent le cas. Ce qui représente environ 70 "critères" qui seront étalés sur 4/5 voir 6 pages. C'est pour cette raison qu'il me semblait difficile d'utiliser l'UserForm classic. Je ne connaissais pas les boutons radio mais à priori ça ne vas pas m'aider puisque les acteurs sont concernés dans la majorité par toutes les "critères".

"que doit-on remplir à côté de CAMPS, etc" : des chiffres. Il faudra que je trouve une solution pour convertir les données format texte (Cf. TextBox) de ma base de données en chiffres pour que mes futurs formules de l'onglet automatisation fonctionnent.

"remplir les cellules par rapport aux évolutions des TextBox, pourquoi pas, mais si on annule une saisie, il faudrait pouvoir tout vider. Peut-être faudrait-il remplir le tableau à la toute fin, quand on valide la saisie UserForm" : oui, sais-tu quel code utiliser ? (je suis novice :-()

"Sinon par rapport à ta demande tu peux faire :
Rows(3).Insert
Unload UserForm1
Load UserForm1
UserForm1.Show "
Ça ne fonctionne pas totalement : ça enregistre bien à partir de la ligne 3 et créé une ligne après chaque enregistrement mais ça continu d'enregistrer dans le premier onglet alors qu'il faudrait que ça s'enregistre dans le second onglet.

Sais-tu comment faire en sorte qu'il enregistre toutes les données dans l'onglet "Base de données" = l'onglet n°2
Ou dois-je me résigner à inverser le sens des onglets ?

Merci beaucoup pour ton aide !!!!
0
Bonjour
voila déjà le début pour les combo box
Private Sub userForm_Initialize()
    Me.MultiPage1.Value = 0
' Gestion des ComboBox
Dcol = Array(2, 1, 3, 4)  ' Numero de Colonne
C = 1
   For Col = LBound(Dcol) To UBound(Dcol)
      With Controls("ComboBox" & C)
         .Clear
            For L = 2 To Feuil5.Cells(Rows.Count, Dcol(Col)).End(xlUp).Row
         .AddItem Feuil5.Cells(L, Dcol(Col))
            Next
      End With
      C = C + 1
   Next
End Sub

A+
Maurice
0
Merci Maurice,

j'ai essayé de rentrer ce code et ça me met erreur mais je crois que je m'y prend mal !? Voilà comment j'ai rentré le code dans mon visual basic (j'ai mis à la suite d'un code existant) :

Private Sub userForm_Initialize()
Me.MultiPage1.Value = 0
ComboBox1.RowSource = "Menu!B2:B6"
ComboBox2.RowSource = "Menu!A2:A6"
ComboBox3.RowSource = "Menu!C2:C37"
ComboBox4.RowSource = "Menu!D2:D81"

' Gestion des ComboBox
Dcol = Array(2, 1, 3, 4) ' Numero de Colonne
C = 1
For Col = LBound(Dcol) To UBound(Dcol)
With Controls("ComboBox" & C)
.Clear
For L = 2 To Feuil5.Cells(Rows.Count, Dcol(Col)).End(xlUp).Row
.AddItem Feuil5.Cells(L, Dcol(Col))
Next
End With
C = C + 1
Next
End Sub

pourquoi dans le code parles tu de feuille 5 : "For L = 2 To Feuil5.Cells(Rows.Count, Dcol(Col)).End(xlUp).Row
.AddItem Feuil5.Cells(L, Dcol(Col))" alors que seule la feuille 2 va être alimentée garce à usf ?

Merci pour ton aide
0
J'ai vraiment du mal : même en supprimant tout mon code :Private Sub userForm_Initialize() cf. ci-dessous :

Private Sub userForm_Initialize()
Me.MultiPage1.Value = 0
ComboBox1.RowSource = "Menu!B2:B6"
ComboBox2.RowSource = "Menu!A2:A6"
ComboBox3.RowSource = "Menu!C2:C37"
ComboBox4.RowSource = "Menu!D2:D81"

(du coup je n'ai plus de RowSource)

et en remplaçant par ton code :
Private Sub userForm_Initialize()
Me.MultiPage1.Value = 0
' Gestion des ComboBox
Dcol = Array(2, 1, 3, 4) ' Numero de Colonne
C = 1
For Col = LBound(Dcol) To UBound(Dcol)
With Controls("ComboBox" & C)
.Clear
For L = 2 To Feuil5.Cells(Rows.Count, Dcol(Col)).End(xlUp).Row
.AddItem Feuil5.Cells(L, Dcol(Col))
Next
End With
C = C + 1
Next
End Sub


ça ne marche toujours pas :-( Je désespère ...
0
Bonjour
dur dur tu supprime ta macro pour mettre la mienne
feuille5 = o codename de l'onglet Menu

A+
Maurice
0
Bonjour
retour de ton fichier modifier
http://www.cjoint.com/c/EJvnTjsqmuN
regarde bien
A+
Maurice
0
Wahouuuu époustouflant !!! je me compliquais la tache en décrivant les macros contrôle par Contrôle. J'espère un jour maîtriser comme tu le fais.

Je ne comprends pas tout mais ça fonctionne !!!

du coup il faudra à chaque ajout de textbox et combobox que j'insère à la suite de :

."Cells(Nlig, 6).Value = TextBox2.Value"

c'est bien cela ?

Question de compréhension :
quelle partie du code fait référence à mes contenus de listes déroulantes ?
"Dcol = Array(2, 1, 3, 4)" : ça a une importance l'ordre des chiffres ? et pourquoi ça va jusqu'à 4 seulement ?
0
quelle partie du code dit que tu commence à a ligne 3 ?

Merci bcpppppp !!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bonjour

'pour le numéro de Ligne
Nlig = .Range("A" & Rows.Count).End(xlUp).Row + 1

tu a encore du travail
A+
Maurice
0