Selectionner une boucle

Résolu/Fermé
imis - 24 oct. 2008 à 09:22
 imis - 24 oct. 2008 à 14:38
Bonjour à vous tous,

Je suis débutant sur VBA et j'ai un petit souci de code. Voilà j’ai créé des listeBox , ComboBox,TextBox sur un UserForm pour saisir des données, ces données sont ensuite rangées dans un tableau sur une feuille Excel via un bouton de commande (bouton9). Mes lignes de code sont les suivantes :

Private Sub CommandButton9_Click()
Sheets("Feuil2").Cells(6, 1) = TextBox2
Sheets("Feuil2").Cells(6, 5) = ComboBox1
etc.(y'en a 16^^)

Donc pas de problème les informations s’inscrivent bien dans ces cellules, mais ce que je souhaite maintenant c’est quand un utilisateur lambda vient ressaisir et réactiver le bouton 9 ses données se réinscrivent sans effacer les précédentes. A force de recherche j’ai trouvé une boucle qui est la suivante:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Range ("A6").Select
Do While IsEmpty(ActiveCell)= False
Selection.Offset(1,0)Select
Loop

Je l'ai mise sur la feuille en question et effectivement elle marche, mais seulement si j’écris directement sur la feuille du classeur elle même et non automatiquement après avoir cliqué sur le bouton 9.
Là ou je veux en venir (et il est temps^^), quel code me permettrait de relier les deux (bouton9-boucle) ou même à la rigueur désigner la cellule active (au lieu de .Cells(6,1) ) pour toutes mes lignes.

MERCI D'AVANCE

8 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
24 oct. 2008 à 09:44
bonjour,

pour trouver la dernière ligne utilisée d'une colonne +1 (+1:donc, la vide)

dim lig as long

lig=range("A65536").end(xlup).row +1
Sheets("Feuil2").Cells(lig, 1) = TextBox2
0
bonjour Michel_m,

Merci de ta réponce je vais essayer ça tout de suite....
0
Bonjour,

Bah me revoilà, j'ai effectué la dermache suivante:

Private Sub CommandButton9_Click()

dim lig as long
lig = Range("A65536").End(xlUp).Row + 1
Sheets("Feuil2").Cells(lig, 1) = TextBox2
Sheets("Feuil2").Cells(lig, 2) = TextBox1
Sheets("Feuil2").Cells(lig, 3) = TextBox3
Sheets("Feuil2").Cells(lig, 4) = TextBox4
Sheets("Feuil2").Cells(lig, 5) = ComboBox1
Sheets("Feuil2").Cells(lig, 6) = ComboBox2
Sheets("Feuil2").Cells(lig, 7) = ComboBox3
Sheets("Feuil2").Cells(lig, 8) = ComboBox4
Sheets("Feuil2").Cells(lig, 9) = TextBox5
Sheets("Feuil2").Cells(lig, 10) = TextBox6
Sheets("Feuil2").Cells(lig, 11) = TextBox7
Sheets("Feuil2").Cells(lig, 12) = TextBox8
Sheets("Feuil2").Cells(lig, 13).NumberFormat = TextBox9
Sheets("Feuil2").Cells(lig, 13).NumberFormat = "# ###0,00€"
Sheets("Feuil2").Cells(lig, 14) = TextBox10
Sheets("Feuil2").Cells(lig, 15) = TextBox11
Sheets("Feuil2").Cells(lig, 16) = ComboBox7
Sheets("Feuil2").Cells(lig, 18) = ComboBox6

End Sub

et maintenant rien ne s'inscrit dans mon tableau :( , je suis vraiment débutant donc dsl d'être aussi nul j'essaye d'assimiler les codes ^^ mais j'ai du mal (la preuve)
0
Bonjour,

Autant pour moi, oh la boulette, oui le code fonctionne parfaitement, sauf qu'il me rempli les cases intitulé de mon tableau ^^, je n'ai plus qua définir la cellule à partir de laquelle il doit remplir ^^.

Merci michel_m
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
24 oct. 2008 à 10:41
Curieux, je viens de vérifier
XL<2007
lig = Range("A65536").End(xlUp).Row + 1
fonctionne

sélectionne lig et demande un espion (débogage-ajouter un espion)
la m^chose pour textbox2

mets un point d'arret au niveau de lig (clique dans le bandeau vertical à gauche)

lance ton usf mets des valeurs et appuie sur ton bouton

la macro s'arr^te sur sur ... la ligne du point d'arrêt
continue en pas à pas (F8)
et regarde la valeur de lig puis de textbox2


autre chose pour allèger ton code:

With Sheets("Feuil2")
.Cells(lig, 1) = TextBox2
.Cells(lig, 2) = TextBox1
....
End With

tu me tiens au courant...
0

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

Posez votre question
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
24 oct. 2008 à 10:42
Excuses, j'avais pas rafraichi...
0
Pas d'excuses celui qui ne réfléchi pas ici c'est moi ^^, bon alors non seulement en plus d'être un boulet je pollue le forum car je n'avais pas fait attention mais vous m'avez répondu ^^. Donc DSL.
Alors votre code marche absolument, le seul problème c'est qu'il m'inscrit mes données dans l'intitulé de mon tableu et non dans les case adéquates. Pour faire simple la première ligne à remplie comme à la cellule A6 les précédentes étant reservées aux intitulés.
J'ai effectué la dermarche avec les espions et tout concorde pour les lignes. SAUF le fait qu'il commence à la ligne A2 au lieu de A6.

Merci pour le conseil de racourcir mon code c'est bien plus clair ^^.
0
Bonjour,

J’ai crié trop hâtivement victoire car ce code en veux qu’à mes intitulés ^^ , et ça malgré toutes mes tentatives. Mon tableau commence à la cellule A6 et pourtant il me rempli dès la cellule A2 à savoir en plein titre de mon tableau.
Je vous saurais gré de bien vouloir m’aider car je suis vraiment perdu et le pire c’est que je sais que le code de michel_m marche puisqu’il est posté sur plusieurs codes dans le forum et de surcroit marche sur mon tableau.

Ma question est donc la suivante:
-comment lui (code) dire de commencer à la cellule A6 et ensuite qu’il enchaîne sur le code de michel_m afin qu'il puisse remplir à chaque fois les champs vides.

Merci d’avance
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
24 oct. 2008 à 11:44
lig = Range("A65536").End(xlUp).Row

if lig<6 then
lig=6
else
lig=lig+1
end if

en saisissant un espace ou un point ou... en A5, tu pourrais garder
lig = Range("A65536").End(xlUp).Row + 1
sans le test

a toi de voir ( le test est + prudent car à l'abri d'une saisie malencontreuse en A6)
0
Bon alors là chouette les informations sont bien inscrites dans les bonnes cases, mais le point négatif malgré toute cette précieuse aide, c'est que je retourne à mon 1er problème à savoir qu'il m'efface la ligne qui vient juste d'être écrite si je réitère l'opération. voilà mon code pour voir où ça coince et vraiment merci:

Private Sub CommandButton9_Click()

Dim lig As Long
lig = Range("A65536").End(xlUp).Row
If lig < 6 Then
lig = 6
Else
lig = lig + 1
End If
With Sheets("Feuil2")
.Cells(lig, 1) = TextBox2
.Cells(lig, 2) = TextBox1
.Cells(lig, 3) = TextBox3
.Cells(lig, 4) = TextBox4
.Cells(lig, 5) = ComboBox1
.Cells(lig, 6) = ComboBox2
.Cells(lig, 7) = ComboBox3
.Cells(lig, 8) = ComboBox4
.Cells(lig, 9) = TextBox5
.Cells(lig, 10) = TextBox6
.Cells(lig, 11) = TextBox7
.Cells(lig, 12) = TextBox8
.Cells(lig, 13).NumberFormat = TextBox9
.Cells(lig, 13).NumberFormat = "# ###0,00€"
.Cells(lig, 14) = TextBox10
.Cells(lig, 15) = TextBox11
.Cells(lig, 16) = ComboBox7
.Cells(lig, 18) = ComboBox6
End With

Unload UserForm2
Unload UserForm3
Unload UserForm1

End Sub
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
24 oct. 2008 à 12:13
je viens d'essayer cette macro test et ca marche

Sub fff()
Dim lig As Long
lig = Range("A65536").End(xlUp).Row
If lig < 6 Then
lig = 6
Else
lig = lig + 1
End If
With Sheets(1)
.Cells(lig, 1) = "toto"
End With
End Sub
0
Roohh c'est dingue bah chez moi pas d'amélioration il m'efface toujours la ligne précedente mais la je réfléchis à partir de la ligne 5 :

1)Private Sub CommandButton9_Click()
2)Dim lig As Long
3)lig = Range("A65536").End(xlUp).Row
4)If lig < 6 Then
5)lig = 6
6)Else
7)lig = lig + 1
8)End If

SI j'ai bien compris le principe si lors de sa boucle il trouve une case vide plus petite que A6 il se met automatiquement à la ligne 6. ensuite il met la valeurs dans lig+1.
Je supose quelque chose: pour lui il le mettra tjrs à lig6+1 soit la ligne 7 donc il le mettra tjrs sur la même ligne (dis moi si mon raisonnement n'a aucun sens) d'où l'effacement perpetuelle.

donc je suis en train de travailler sur le code et je te tiens au courant
0
ah bah y'a encore plus dingue, ton code fonctionne à merveille comme tu me l'as dis et j'ai pu le vérifier en refaisant un nouveau fichier excel, et de surcroit il répond exactement à ce que je souhaite.

Ma question est ALORS pourquoi dans mon "logiciel il ne fonctionne PAS"?????
0
j'ai identifier mon problème, au départ je croyais que dès que je rajoutais un chiffre le code ne marchais pas. Le problème est que tant que l'on utilise des TextBox y'a pas de problème mais dès que l'on utilise un Combobox les données sont obligatoirement placées sur la première ligne.

Je sais identifier le problème mais pas le régler ^^ donc je demande de l'aide SVP mais là ça deviens un autre problème alors je vais peut être me permettre de lancer un autre question.

Merçi pour ton aide précieuse michel_m elle m'a aidée et une fois que j'aurais résolu ma dernière question grâce à toi j'aurai terminé mon programme.
0