bon et ce contrôle combobox1 il existe bien sur l'userform associé à ton code..?
bon et ce contrôle combobox1 il existe bien sur l'userform associé à ton code..?
oui il existe bien ainsi que les 19 autres.
pourquoi un "init" lorsque tu quitte le contôle ..? elle est appelée comment cette procédure..?Envoyé par sebi78
voici le code du bouton quitter
puis cela renvoie au code suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Private Sub QUITTER_Click() ScrollBar1.Min = 1 ScrollBar1.Value = 1 'Ecrit les dernières modifs avant de quitter End End Sub
C'est dans cette fonction que l'on renvoie à la fonction init
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 Private Sub ScrollBar1_Change() ''Ecrit les données dans la feuille de calculs Dim NoCol As Integer, NomControle As String If Not Initialisation Then If Not verifligne() Then 'Ligne vide, accès à la suivante inhibé If NoLigne < ScrollBar1.Value Then ScrollBar1.Value = NoLigne Exit Sub End If End If 'Ecriture dans la feuille de calculs des données affichées For NoCol = 1 To NbreColonnes NomControle = "combobox" & NoCol fl.Cells(NoLigne, NoCol).Value = Me.Controls(NomControle).Value Next End If NoLigne = ScrollBar1.Value Call ScrollBarMax 'Nouvelle valeur de ScrollBar.max Call Init 'Init des champs Initialisation = False End Sub
Hello me revoilou.
Comme je connais le code que tu souhaites utiliser, dis-nous plutôt ce que tu veux faire dans Init
Init était écrit pour renseigner autant de textbox qu'il y avait de colonnes
Ton code corrigé ainsi,
Sub Init() 'Renseigne les combobox pour la ligne NoLigne
... met le contenue de fl.Cells(NoLigne, NoCol).Value dans l'entête.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Dim NoCol As Integer, NomControle As String For NoCol = 1 To NbreColonnes NomControle = "Combobox" & NoCol Me.Controls(NomControle).value = fl.Cells(NoLigne, NoCol).Value Me.NuméroLigne = " Ligne " & NoLigne 'Affichage du N° de ligne Next End Sub
Si tu veux remplir tes combos, tu as deux façons de t'y prendre, soit avec RowSource de la seconde ligne à la dernière d'une même colonne, soit avec additem si les données ne se suivent pas dans une colonne.
Tu dis
bbil, sebi s'inspire de ça en remplaçant les textbox par des combos (!)
Si je comprend mieux ta fonction init.
Dans mon cas, je n'en aurais pas besoin ?
Mon nombre de colonne sera toujours egale à 19 .
colonne A est remplit par combobox1
colonne B est remplit par combobox2
colonne C est remplit par combobox3
colonne D est remplit par combobox4
colonne E est remplit par combobox5
colonne F est remplit par combobox6
colonne G est remplit par combobox7
colonne H est remplit par combobox8
colonne I est remplit par combobox9
colonne J est remplit par combobox10
colonne K est remplit par combobox11
colonne L est remplit par combobox12
colonne M est remplit par combobox13
colonne N est remplit par combobox14
colonne O est remplit par combobox15
colonne P est remplit par combobox16
colonne Q est remplit par combobox17
colonne R est remplit par combobox18
colonne S est remplit par combobox19
J'ai utilisé additem pour remplir chaque combobox 1 à 12 et 17 à 19 les donnes sont differentes.
Seul les combobox 13,14,15 ET 16 les donnes sont identique ( date du type 01/01/2007 ... 31/12/2007 )
J'ai pas trop compris pourquoi le bouton quitter pointe sur scollbar ?
Je cherche à sortir de l'userform.
Voici ou j'en suit. J'adapterais cela apres pour remplir une 20 de page.
http://cjoint.com/?eptFMYuHVb
Il y a forcement le moyen d'optimiser le code mais j'en suis pas la. Je cherche à le faire fonctionner.
J'ai essayer avec ton code modifier tjs la meme erreurs 380.
Je n'ai pas encore dechiffrer toute la finesse de ton code.
dur dur![]()
Je sais le resultat que je veux optenir mais comment l'expliquer avec des bouts de code ?????.
Je veux reproduire une insertion de ligne avec des donnees imposees.
Supprimer une ligne, l'effacer, copier une ligne existante et la modifier.
Et sortir de l'usrform. voila ce que je veux faire.
J'y suis preque mais cela plante en sortant. IL y a peut-etre des ligne de codes en trop, inutile...
Bouton quitter : Rien à voir avec ce que tu veux faire. "End" suffit.
Dans mon code, si une modif a été saisie dans un ou plusieurs textbox, seul un changement de ligne enregistre les données modifiées ou saisie. Donc, avant de quitter, je place le scrollbar sur la ligne 1 (qui n'est jamais affichée dans les textbox). Juste une astuce pour que la validation de la dernière ligne saisie ne soit pas oubliée.
Dans ton cas... ce n'est pas le cas![]()
Peux-tu regarder si tu trouves des failles à mon code. Et me donner des conseils pour optimiser mon code. Merci.
Je sais c'est pas la bonne facon de proceder mais avec un exemple c'est plus facile pour moi .
http://cjoint.com/?epuFXZzScX
J'ai supprimer les deux lignes dont tu me parler et cela à resolu mon probleme erreur 380. Par contre j'ai quand meme garder init sinon cela me fait pas ce que j'aurait voulu dans la fonction supprimer ligne et pour inserer mes donnes sur une ligne avec le scrollbar.
Je pense que j'y suis arrive avec un peu de mal et sans trop avoir compris ton code de depart.
Je regarderai ça demain.
Chapeau car mon code de départ n'avait rien à voir avec ce que tu veux faire et, pour le moment, j'avoue ne pas que je n'ai toujours pas comprisEnvoyé par Tu
Avec ton code, peut-être.
Ceci dit, passant systématiquement par des userforms pour la réalisation de formulaires de saisie, j'interdis toujours à l'utilisateur l'accès aux feuilles de calculs et n'y place des contrôles que dans certains cas bien spécifiques.
Enfin, une fois que j'aurai compris, je te dirai.
A+
Bonjour,
As-tu dechiffrer mon code ? Et vu comment marchait mon essai.
Je vais essayer de l'utiliser pour remplir mes 20 feuilles.
Puis essayer de resoudre mon probleme de selection de cellule :
Mon tableau commence ligne 3 ( 1 et 2 etant vide pour y place des boutons )
Ligne 3 et 4 ( titre )
Je suis oblige de tricher de temps en temps en mettant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part ActiveSheet.UsedRange.Rows("5:" & ActiveSheet.UsedRange.Rows.Count).Select
3 ald 5
Car il me decale ma selection. Et je me retrouve avec des lignes vides ou il me manque une ligne remplit.
Je pense que cela provient du deuxieme tableau sur une meme feuille.
Je pense resoudre cela avec cette essai.
![]()
![]()
Voilà. J'ai venu, j'ai vu, j'ai compru...
J'ai ajouté un bouton validation dans l'urform. Avec la scrollbar, ça devient tout de suite + compliqué (mais c'est faisable)
Le code du bouton Valider :
Ce bouton enregistre les données de tous les combos dont l'un des éléments a été sélectionné.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 Private Sub ValiderLaLigne_Click() Dim i As Integer, NoLigne As Long NoLigne = Range("A1").SpecialCells(xlCellTypeLastCell).Row + 1 For i = 1 To 19 If UserForm1.Controls("Combobox" & i).ListIndex <> -1 Then Cells(NoLigne, i) = UserForm1.Controls("Combobox" & i).List(UserForm1.Controls("Combobox" & i).ListIndex) End If Next End Sub
Il fait ça dans la seule feuille que comporte le fichier.
Tu dis
PS - A l'avenir, peux-tu zipper ton fichier et le mettre sur le forum ?
Le fichier s'ouvre via internet. Pour le modifier, j'ai été obligé de copier l'userform, puis la feuille que je ne voyais pas Excel, puis puis puis...
Merci pour nous![]()
Slt,
Merci pour ta reponse
J'ai bien rajouter le bouton validation.
Part contre, j'ai pas bien compris si tu avais gardé le scrollbar.
Alors j'ai tester deux choses :
1°) sans scrollbar . Il me remplit la ligne 3 ald de commencer en 2 .
Et le bouton effacer et supprimer du coup ne sont plus utilisable car je choissit la ligne à effacer ou supprimer par le scrollbar.
2°) avec scrollbar et en supprimant la partie copie sur la ligne selectionner ( je crois si j'ai bien sélectionner la bonne partie du code )
Et la c'est la panique, Lorsque je lance l'usr si je pointe sur ligne 7 et je me positionne sur ligne 2 avec le scrollbar. Je valide mes selections pour remplir ligne 2 et la suprise est la suivant il me copie en ligne 7.
Je ne comprends pas trop ce que tu as améliorer ...
Peux tu me renvoyer ton fichier test.
Merci
Non, tout ce que tu observes est normal. Mais c'est là que ça devient plus compliqué (beaucoup plus à expliquer qu'à faire...)
Le N° de ligne : Mon code donne la dernière ligne renseignée + 1. Je parle de cette ligne
Malheureusement, si tu supprimes une ligne, il persiste à donner le même N° de dernière ligne tant que le fichier n'est pas enregistré.NoLigne = Range("A1").SpecialCells(xlCellTypeLastCell).Row + 1
L'avantage : Si tu as des ligne vides ou des cellules vides dans ta plage de données, il persiste à donner toute la plage.
Si, dans une colonne, tu es certain que toutes les cellules seront remplies, tu peux utiliser un autre code. Par exemple, si les cellules de la colonne A sont renseignées jusque sur la dernière ligne de ta plage de données :
Si ce n'est pas le cas, tu vas devoir faire une boucle sur les 19 colonnes de ta plage pour trouver la dernière ligne renseignée. Un truc comme ça
Code : Sélectionner tout - Visualiser dans une fenêtre à part DerniereLigne = Range("A65535").End(xlUp).Row
La valeur max de scrollbar = NoDerniereLigne +2
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 Sub ChercherDerniereLigne Dim NoDerniereLigne as long Dim i as integer, AvecColonne as variant Dim NoCol as integer NoDerniereLigne = 1 For NoCol = 1 to 19 AvecColonne = Cells(65536, NoCol).Address if NoDerniereLigne < Range(AvecColonne).End(xlUp).Row then _ NoDerniereLigne = Range(AvecColonne).End(xlUp).Row endif Next End sub
Cette syntaxe t'évite d'avoir à enregistrer le fichier à chaque suppression de ligne.
Le scrollbar, justement... : Pour afficher la ligne courante, tu ne peux le faire que dans la ligne d'entête de tes combos
Jamais fait, donc à tester.
Code : Sélectionner tout - Visualiser dans une fenêtre à part ComboBoxn.value = Cells(NoLigne,NoColonne)
Pour remplir toutes ces entêtes, une boucle voisine du dernier code que je t'ai mis pour la validation.
Pas d'index pour le relire mais simplement
L'effacement dépendra du résultat de ce que donnent les tests ci-dessus.
Code : Sélectionner tout - Visualiser dans une fenêtre à part LaDonnée = ComboBoxn.value
Sans filet, ça devrait donner un truc comme ça :
Tu essaies de débrouiller tout ça et tu dis.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Sub Lecture() Dim i As Integer, NoLigne As Long NoLigne = Me.ScrollBar.value For i = 1 To 19 Me.Controls("Combobox" & i).Value = Cells(NoLigne, i).value Next End sub
A+
Bonjour,
Merci pour tes explications.
Je testerais tout cela quand j'aurais un peu plus de temps en fin de semaine ou ce week-end.
Si à partir de ce que tu m'as expliqué cela n'aboutit pas.
Il y a peut-etre une autre approche.
Suppression du scrollbar et demande à l'utilisateur le numéro de ligne à effacer, detruire ou modifier avec selection de celle-ci.
Il remplit ou modifit avec les valeurs du combo et valide. Je mets une routine pour supprimer les lignes vides . Et le tour est joué.![]()
Partager