[EXCEL 97] Passer à la ligne suivante à chaque validation d'un userform

RoM45

XLDnaute Nouveau
Bonjour à tous,

Ayant pas mal passé de temps sur google, je me décide à poster sur le forum pour demander de l'aide.
Je précise que je suis débutant en VBA et que je travaille sur excel 97.
J'ai crée un userform avec 5 textbox et 1 combobox qui remplisse les cases de A4 à E4 et H4.
Les cases G4 et H4 contiennent une formule qui réagit selon E4 en allant chercher dans une 2ème feuille et la case I4 indique la date et l'heure dès lors que la case H4 est remplie.
Mon souci est que je n'arrive pas à trouver le code qui me permettrait de passer à la ligne suivante à chaque fois que j'utilise le userform.
Je m'explique: la 1ère fois, le userform va remplir les cases de la ligne 4. J'aimerais qu'en validant une 2ème fois le userform avec d'autres données, celui-ci remplisse les cases de la ligne 5.
Pour encore préciser, uniquement les cases de la colonne A et H sont forcément remplies à chaque validation de l'userform (les autres cases B, C, D et E peuvent-être vides.
J'ai testé beaucoup de choses (décalage d'une ligne, couper/coller sur la ligne du dessous,...) sans résultat pour le moment.

Si quelqu'un a une idée, je suis preneur.
Merci d'avance.
 

CHALET53

XLDnaute Barbatruc
Re : [EXCEL 97] Passer à la ligne suivante à chaque validation d'un userform

Bonjour,

Pour trouver la première ligne disponible de la colonne A : derligne étant un nom de variable

Modifier les instructions d'écriture dans la feuille Excel : cells(derligne, 1)= ..... (pour écrire dans la colonne A sur la première ligne disponible

derligne = Range("A65535").End(xlUp).Row + 1

A+
 

RoM45

XLDnaute Nouveau
Re : [EXCEL 97] Passer à la ligne suivante à chaque validation d'un userform

Bonjour CHALET53 et déjà merci de m'avoir répondu.

J'ai déjà essayé ça mais ça ne résout pas mon problème :
1) si la case A4 est déjà remplie, à chaque fois que je tape un caractère dans ma textbox, ça repasse à la ligne suivante
ex : si je tape ABCD dans la textbox en imaginant que A4 est remplie, cela va remplir A en A5, AB en A6, ABC en A7, ABCD en A8 alors que je voudrais seulement avoir ABCD en A5.
2) je ne sais pas comment faire pour que ma 2ème textbox remplisse la case adjacente à celle qu'a remplit la textbox1 ?
ex : si la cellule A4 est remplie, ma textbox1 va remplir A5 et ma textbox2 devra remplir B5 même si B4 est vide.

J'espère que mes expliations sont suffisament claires ;)
A+
 

JNP

XLDnaute Barbatruc
Re : [EXCEL 97] Passer à la ligne suivante à chaque validation d'un userform

Bonjour le fil :),
J'espère que mes expliations sont suffisament claires ;)
Ce serait certainement plus clair avec minimum le code de ton USF, ou mieux, un fichier exemple :rolleyes:...
A priori, tu utilises un TextBox_Change pour envoyer les données, peut-être qu'un TextBox_Exit serait plus efficace :p...
Après, tu peux utiliser
Code:
derligne = Range("A65535").End(xlUp).Row + 1
dans TextBox1_Exit et
Code:
derligne = Range("A65535").End(xlUp).Row
dans les autres TextBox_Exit, ça devrait le faire :rolleyes:...
Bon WE :cool:
 

RoM45

XLDnaute Nouveau
Re : [EXCEL 97] Passer à la ligne suivante à chaque validation d'un userform

Merci JNP pour ta réponse rapide et efficace.
Ca fonctionne mis à part que la première ligne remplit est la 19 alors qu'il faudrait que ça soit la 4.
Et j'en profite pendant que je tiens un pro, comment faire pour que mon bouton "annuler" efface les cellules remplies avec les textbox et combobox ?
Voilà mon code :

Private Sub CommandButton2_Click()
Dim objControl As Control
For Each objControl In UserForm1.Controls
If TypeOf objControl Is MSForms.TextBox Then
objControl.Text = ""
End If
Next objControl
Unload UserForm1
End Sub

Private Sub CommandButton1_Click()
derligne = Range("A65535").End(xlUp).Row
Cells(derligne, 9) = Now()
ThisWorkbook.Save
Unload UserForm1
End
End Sub

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
derligne = Range("A65535").End(xlUp).Row + 1
Cells(derligne, 1) = UserForm1.TextBox1
End Sub

Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
derligne = Range("A65535").End(xlUp).Row
Cells(derligne, 2) = UserForm1.TextBox2
End Sub

Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
derligne = Range("A65535").End(xlUp).Row
Cells(derligne, 3) = UserForm1.TextBox3
End Sub

Private Sub TextBox4_Exit(ByVal Cancel As MSForms.ReturnBoolean)
derligne = Range("A65535").End(xlUp).Row
Cells(derligne, 4) = UserForm1.TextBox4
End Sub

Private Sub TextBox5_Exit(ByVal Cancel As MSForms.ReturnBoolean)
derligne = Range("A65535").End(xlUp).Row
Cells(derligne, 5) = UserForm1.TextBox5
End Sub

Private Sub ComboBox1_Change()
derligne = Range("A65535").End(xlUp).Row
Cells(derligne, 8) = UserForm1.ComboBox1
End Sub
 

RoM45

XLDnaute Nouveau
Re : [EXCEL 97] Passer à la ligne suivante à chaque validation d'un userform

Pour le bouton annuler, c'est bon, j'ai trouvé tout seul.
C'est moche mais ça marche :

Private Sub CommandButton2_Click()
derligne = Range("A65535").End(xlUp).Row
Cells(derligne, 1) = ""
Cells(derligne, 2) = ""
Cells(derligne, 3) = ""
Cells(derligne, 4) = ""
Cells(derligne, 5) = ""
Cells(derligne, 8) = ""
Unload UserForm1
End Sub
 

JNP

XLDnaute Barbatruc
Re : [EXCEL 97] Passer à la ligne suivante à chaque validation d'un userform

Re :),
C'est moche mais ça marche :
Code:
Range(Cells(derligne, 1), Cells(derligne, 8)).Clear
Ca fonctionne mis à part que la première ligne remplit est la 19 alors qu'il faudrait que ça soit la 4.
Supprime carément tes lignes 4 à 19, il doit rester une trace de leur utilisation antérieure :rolleyes:...

Et j'en profite pendant que je tiens un pro
C'est gentil mais évite ce type de commentaire, il n'y a que des bonnes volontés dans ce forum, je ne suis pas plus pro que d'autres ;)...
Bonne soirée :cool:
 

RoM45

XLDnaute Nouveau
Re : [EXCEL 97] Passer à la ligne suivante à chaque validation d'un userform

J'essaie demain au boulot, je n'ai qu'Openoffice chez moi.
Dans toutes vos "petits" bouts de code pour le bouton annuler, j'ai uniquement besoin d'effacer les cellules des colonnes de A à E et H (soit 1 à 5 et 8, les cellules F et G étant liées par des formules à la cellule E.

C'est mieux ou non ??! :
Private Sub CommandButton2_Click()
Range(Cells(derligne, 1), Cells(derligne, 5)).Clear
Cells(derligne, 8) = ""
Unload UserForm1
End Sub

Merci également à Staple1600 d'avoir "rejoint le chantier".
Surtout partez pas, je sens que je vais encore avoir du boulot pour vous ;)
J'ai encore pas mal d'idée en tête pour mon fichier mais je n'ai pas encore trouvé comment faire (si c'est faisable bien sûr).
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : [EXCEL 97] Passer à la ligne suivante à chaque validation d'un userform

Bonsoir


Merci également à Staple1600 d'avoir "rejoint le chantier".
JNP parlait du chantier qui se prépare dans le salon du forum ;)

Pas de ton fil.

Sinon, je verrai plus le code ainsi
Code:
Private Sub CommandButton2_Click()
Dim derligne As Long
derligne=[A65536].End(xlUp).Row
Union(Cells(derligne, 1).Resize(, 5), Cells(derligne, 8)).Clear
Unload UserForm1
 End Sub
 
Dernière édition:

RoM45

XLDnaute Nouveau
Re : [EXCEL 97] Passer à la ligne suivante à chaque validation d'un userform

Bonsoir


JNP parlait du chantier qui se prépare dans le salon du forum ;)

Pas de ton fil.

Bonsoir

Ok, désolé, je viens d'aller jeter un oeil.
A côté de ça, effectivement, mes requêtes semblent d'un niveau plus qu'élémentaire (pour vous en tout cas).
cool.png


Sinon, je verrai plus le code ainsi
Code:
Private Sub CommandButton2_Click()
Dim derligne As Long
derligne=[A65536].End(xlUp).Row
Union(Cells(derligne, 1).Resize(, 5), Cells(derligne, 8)).Clear
Unload UserForm1
 End Sub

Je teste ça demain, merci encore.
 

RoM45

XLDnaute Nouveau
Re : [EXCEL 97] Passer à la ligne suivante à chaque validation d'un userform

Bonjour,

Ok, j'ai testé. Le resize m'efface également les bordures de cellule, je suis donc resté sur mon premier jet.
Je finis de poser mes questions sur ce fil même si le sujet ne correspond plus vraiment, je peux déplacer si besoin.
J'aimerais créer une macro me permettant automatiquement de remplir certaines cases d'une feuille avec les cases de la dernière ligne d'une autre feuille :
Exemple :
La dernière case non vide de la colonne A de la feuille 1 va remplir A2 sur la feuille 2.
La dernière case non vide de la colonne B de la feuille 1 va remplir B2 sur la feuille 2.
C > C2, D > D2, E > E2, F > F2, G > G2, H > B4, I > D4
Mon problème étant toujours que toutes les cellules ne sont pas forcément remplies et je voudrais dans ces cas là que rien n'appraisse dans la cellule.
Exemple :
A6, la dernière case non vide de la colonne A de la feuille 1 va remplir A2 sur la feuille 2. la cellule B6 n'est pas remplie et j'aimerais donc que rien n'apparaisse en B2 sur la feuille 2.

Voilà ce que j'ai tenté sur la feuille 1 ou sur this workbook et qui ne fonctionne pas :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
derligne = Sheets("feuille1").Range("A65535").End(xlUp).Row
Cells(derligne, 1) = Sheets("feuille2").[A2]
End Sub
 

JNP

XLDnaute Barbatruc
Re : [EXCEL 97] Passer à la ligne suivante à chaque validation d'un userform

Re :),
Ce serait plutôt
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
derligne = Sheets("feuille1").Range("A65535").End(xlUp).Row
Range(Cells(derligne, 1), Cells(derligne, 7)).Copy Sheets("feuille2").Range("A2")
Cells(derligne, 8).Copy Sheets("feuille2").Range("B4")
Cells(derligne, 9).Copy Sheets("feuille2").Range("D4")
End Sub
mais ça va se produire à chaque modification de la feuille, la logique serait de limiter l'action en fonction de Target :rolleyes:...
Bonne suite :cool:
 

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 942
Membres
101 849
dernier inscrit
florentMIG