Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2019 Enregistrer données à la ligne en dessus impossible

Melysza

XLDnaute Nouveau
Bonjour à tous,

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

KeyAscii = 0

End If
End Sub

Private Sub TextBox2_Change()

End Sub

Private Sub TextBox3_Change()

End Sub

Private Sub TextBox5_Change()

End Sub
 

blord

XLDnaute Impliqué
Bonjour, voici la méthode que j'utilise :

VB:
    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 :

Code:
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

Bonne chance !
Benoit Lord
 

Melysza

XLDnaute Nouveau
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

Unload UserForm1

End If
End Sub
 

GALOUGALOU

XLDnaute Accro
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
 

blord

XLDnaute Impliqué
Bonjour,

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.
 

blord

XLDnaute Impliqué
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...

Benoit Lord
 

Melysza

XLDnaute Nouveau
Bonjour !

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 ?

Merci beaucoup !
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…