J'ai un problème que je n'arrive pas à résoudre depuis 2 jours (je suis nouvelle dans le domaine VBA, donc j'ai un peu de mal). J'ai créé un formulaire avec les codes que je vous mettrai juste en bas, mais lorsque je rentre de nouvelles données via ce formulaire, ces données écrasent les anciennes de la première ligne au lieu de s'incrémenter sur la ligne d'en dessous et je ne trouve pas le code qui permet de faire cela. Pourriez-vous m'aider ?
Merci bcp !
Private Sub CommandButton1_Click()
If TextBox1 = "jj/mm/aa" Or TextBox2 = "" Or TextBox3 = "" Or TextBox4 = "" Or TextBox5 = "" Or TextBox6 = "" Or TextBox7 = "" Or TextBox8 = "" Then
MsgBox ("Toutes les informations ne sont pas remplies")
Else
If Sheets("Feuil1").Range("A2") = "" Then
Sheets("feuil1").Range("A2") = TextBox1
End If
DLT = Sheets("feuil1").Range("a1048576").End(xlUp).Row
Sheets("feuil1").Range("B2") = TextBox2.Value
Sheets("feuil1").Range("C2") = TextBox3.Value
Sheets("feuil1").Range("D2") = TextBox4.Value
Sheets("feuil1").Range("F2") = TextBox6.Value
Sheets("feuil1").Range("G2") = TextBox7.Value
Sheets("feuil1").Range("H2") = TextBox8.Value
Unload UserForm1
End If
End Sub
Private Sub TextBox1_AfterUpdate()
On Error GoTo Messageerreur
TextBox1 = Format(TextBox1, "short date")
Exit Sub
Messageerreur:
MsgBox ("Le format introduit n'est pas valide, le format de date est JJ/MM/AA")
TextBox1 = Empty
End Sub
Private Sub TextBox1_Enter()
If TextBox1 = "" Then
TextBox1 = "jj/mm/aa"
End If
End Sub
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If Not ((KeyAscii > 46 And KeyAscii < 58)) Then
Dim DerLig As Long
DerLig = ThisWorkbook.Worksheets("Feuil1").Range("A" & ThisWorkbook.Worksheets("Feuil1").Rows.Count).End(xlUp).Row +1
Ceci permet de déterminer la dernière cellule utilisée de la feuil1 dans la colonne A (Remarquez le +1 à la fin qui donnera la ligne suivante qui est disponible pour l'écriture. De plus cette méthode sera valide peu importe le nombre de lignes disponibles dans la feuille car votre méthode décide d'arbitrairement débuter à la ligne 1048576...
Ensuite vous écrivez dans votre feuille comme ceci :
Dim DerLig As Long
DerLig = ThisWorkbook.Worksheets("Feuil1").Range("A" & ThisWorkbook.Worksheets("Feuil1").Rows.Count).End(xlUp).Row +1
Ceci permet de déterminer la dernière cellule utilisée de la feuil1 dans la colonne A (Remarquez le +1 à la fin qui donnera la ligne suivante qui est disponible pour l'écriture. De plus cette méthode sera valide peu importe le nombre de lignes disponibles dans la feuille car votre méthode décide d'arbitrairement débuter à la ligne 1048576...
Ensuite vous écrivez dans votre feuille comme ceci :
Merci beaucoup pour la réponse ! J'ai essayé et ça a fonctionné uniquement pour une ligne mais ça ne fonctionne pas pour les autres... Est-ce que j'ai loupé quelque chose ? :
Private Sub CommandButton1_Click()
If TextBox1 = "jj/mm/aa" Or TextBox2 = "" Or TextBox3 = "" Or TextBox4 = "" Or TextBox5 = "" Or TextBox6 = "" Or TextBox7 = "" Or TextBox8 = "" Then
MsgBox ("Toutes les informations ne sont pas remplies")
Else
If Sheets("Feuil1").Range("A2") = "" Then
Sheets("feuil1").Range("A2") = TextBox1
End If
Dim Derlig As Long
Derlig = ThisWorkbook.Worksheets("feuil1").Range("a" & ThisWorkbook.Worksheets("feuil1").Rows.Count).End(xlUp).Row + 1
ThisWorkbook.Worksheets("feuil1").Range("B" & Derlig) = TextBox2.Value
ThisWorkbook.Worksheets("feuil1").Range("C" & Derlig) = TextBox3.Value
ThisWorkbook.Worksheets("feuil1").Range("D" & Derlig) = TextBox4.Value
ThisWorkbook.Worksheets("feuil1").Range("F" & Derlig) = TextBox6.Value
ThisWorkbook.Worksheets("feuil1").Range("G" & Derlig) = TextBox7.Value
ThisWorkbook.Worksheets("feuil1").Range("H" & Derlig) = TextBox8.Value
bonjour Melysza bonjour le fil bonjour le forum
sous toute réserve
votre code teste la colonne A pour la dernière Ligne, mais vous n'écrivez rien avec la macro commandbutton1 en colonne A, donc a chaque écriture la macro se cale toujours sur la même ligne et écrase vos données.
Il vaudrait mieux tester la colonne B ou C ou D etc
une petite précision, pour la lisibilité des lecteurs écrire le code avec la balise de code en haut à gauche </>
cdt
galougalou
Mon code teste effectivement la colonne A pour déterminer la ligne disponible, idéalement il faut tester la colonne qui contient le plus de données ou celles qu sera toujours complètement remplie.
Bonjour à nouveau,
Voici ce que pourrait être le code sur votre bouton :
VB:
Private Sub CommandButton1_Click()
If TextBox1.Value = "jj/mm/aa" Or TextBox2.Value = "" Or TextBox3.Value = "" Or TextBox4.Value = "" Or TextBox5.Value = "" Or TextBox6.Value = "" Or TextBox7.Value = "" Or TextBox8.Value = "" Then
MsgBox "Toutes les informations ne sont pas remplies"
Exit Sub
End If
Dim Derlig As Long
Derlig = ThisWorkbook.Worksheets("feuil1").Range("A" & ThisWorkbook.Worksheets("feuil1").Rows.Count).End(xlUp).Row + 1
ThisWorkbook.Worksheets("feuil1").Range("A" & Derlig) = TextBox1.Value
ThisWorkbook.Worksheets("feuil1").Range("B" & Derlig) = TextBox2.Value
ThisWorkbook.Worksheets("feuil1").Range("C" & Derlig) = TextBox3.Value
ThisWorkbook.Worksheets("feuil1").Range("D" & Derlig) = TextBox4.Value
ThisWorkbook.Worksheets("feuil1").Range("F" & Derlig) = TextBox6.Value
ThisWorkbook.Worksheets("feuil1").Range("G" & Derlig) = TextBox7.Value
ThisWorkbook.Worksheets("feuil1").Range("H" & Derlig) = TextBox8.Value
Unload UserForm1
End Sub
Par contre je ne suis pas certain de comprendre votre validation sur le Textbox1...
Bonjour à nouveau,
Voici ce que pourrait être le code sur votre bouton :
VB:
Private Sub CommandButton1_Click()
If TextBox1.Value = "jj/mm/aa" Or TextBox2.Value = "" Or TextBox3.Value = "" Or TextBox4.Value = "" Or TextBox5.Value = "" Or TextBox6.Value = "" Or TextBox7.Value = "" Or TextBox8.Value = "" Then
MsgBox "Toutes les informations ne sont pas remplies"
Exit Sub
End If
Dim Derlig As Long
Derlig = ThisWorkbook.Worksheets("feuil1").Range("A" & ThisWorkbook.Worksheets("feuil1").Rows.Count).End(xlUp).Row + 1
ThisWorkbook.Worksheets("feuil1").Range("A" & Derlig) = TextBox1.Value
ThisWorkbook.Worksheets("feuil1").Range("B" & Derlig) = TextBox2.Value
ThisWorkbook.Worksheets("feuil1").Range("C" & Derlig) = TextBox3.Value
ThisWorkbook.Worksheets("feuil1").Range("D" & Derlig) = TextBox4.Value
ThisWorkbook.Worksheets("feuil1").Range("F" & Derlig) = TextBox6.Value
ThisWorkbook.Worksheets("feuil1").Range("G" & Derlig) = TextBox7.Value
ThisWorkbook.Worksheets("feuil1").Range("H" & Derlig) = TextBox8.Value
Unload UserForm1
End Sub
Par contre je ne suis pas certain de comprendre votre validation sur le Textbox1...
Je viens de tester et ça fonctionne ! C'est exactement ce que je voulais, merci beaucoup ! J'ai maintenant une autre question mais je ne suis pas sûre de savoir comment l'expliquer.
Mon collègue m'a demandé s'il était possible de créer ce bouton de commande pour ouvrir le formulaire directement sur la barre d'outils d'Outlook, ce qui permettrait d'ouvrir le petit carré du formulaire et le remplir directement via Outlook. Savez-vous si premièrement c'est faisable et si oui, comment ?