Microsoft 365 Décalage de ligne lors de la saisie

  • Initiateur de la discussion Initiateur de la discussion Marvin57
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Marvin57

XLDnaute Occasionnel
Bonjour à tout le monde,

j'ai un petit soucis lors de la saisie et validation de mes données vers un tableau structuré.

C'est à dire :

Lorsque je saisi les données dans mon userform et que je clique sur valider, il me m'inscrit les données à la suite de mon tableau structuré au lieu de le faire une ligne au dessus.

Voici le code qui sert à valider cela.

J'espère que cela va vous aider à comprendre mon problème car mon fichier est très volumineux et difficile a transmettre.

Le tableau structuré de l'onglet "POINTS" se nomme "Tableau28" si vous avez besoin de cette info.
Le tableau "Tableau28" démarre à la ligne A2 de l'onglet "POINTS".

Private Sub VALIDATION_Click() 'Valider l'enregistrement des points saisis
Dim Wtc As Worksheet
Application.ScreenUpdating = False
Set Wtc = Sheets("POINTS")
If VALIDATION.Caption = "VALIDER" Then
Dl = Wtc.Range("A" & Rows.Count).End(xlUp).Row + 1
If Dl = 2 Then
Wtc.Cells(Dl, 1).Value = 1
Else
Wtc.Cells(Dl, 1).Value = Application.WorksheetFunction.Max(Wtc.Range("A2:A" & Dl).Value) + 1
End If
Wtc.Cells(Dl, 2).Value = CDate(Me.TextBox1.Value)
Wtc.Cells(Dl, 2).NumberFormat = "m/d/yyyy"
Wtc.Cells(Dl, 3).Value = CDate(Me.TextBox2.Value)
Wtc.Cells(Dl, 3).NumberFormat = "m/d/yyyy"
Wtc.Cells(Dl, 4).Value = CDate(Me.TextBox3.Value)
Wtc.Cells(Dl, 4).NumberFormat = "m/d/yyyy"
Wtc.Cells(Dl, 5).Value = Me.ComboBox1.Value
Wtc.Cells(Dl, 6).Value = Me.ComboBox2.Value
Wtc.Cells(Dl, 7).Value = Me.ComboBox3.Value
Wtc.Cells(Dl, 8).Value = Me.TextBox4.Value
If Me.OptionButton1 = True Then Wtc.Cells(Dl, 9).Value = Me.TextBox5.Value
If Me.OptionButton2 = True Then Wtc.Cells(Dl, 10).Value = Me.TextBox5.Value

Actualiser_Affiche
MsgBox " Points enregistrés"
Else
Dl = Wtc.Range("A" & Rows.Count).End(xlUp).Row
For i = 2 To Dl
If Me.lbltc.Caption = Wtc.Cells(i, 1).Value Then
Wtc.Range(Wtc.Cells(i, 2), Wtc.Cells(i, 10)) = ""
Wtc.Cells(i, 2).Value = CDate(Me.TextBox1.Value)
Wtc.Cells(i, 2).NumberFormat = "m/d/yyyy"
Wtc.Cells(i, 3).Value = CDate(Me.TextBox2.Value)
Wtc.Cells(i, 3).NumberFormat = "m/d/yyyy"
Wtc.Cells(i, 4).Value = CDate(Me.TextBox3.Value)
Wtc.Cells(i, 4).NumberFormat = "m/d/yyyy"
Wtc.Cells(i, 5).Value = Me.ComboBox1.Value
Wtc.Cells(i, 6).Value = Me.ComboBox2.Value
Wtc.Cells(i, 7).Value = Me.ComboBox3.Value
Wtc.Cells(i, 8).Value = Me.TextBox4.Value
If Me.OptionButton1 = True Then Wtc.Cells(i, 9).Value = Me.TextBox5.Value
If Me.OptionButton2 = True Then Wtc.Cells(i, 10).Value = Me.TextBox5.Value
Actualiser_Affiche
RAZ
Exit For
End If
Next
Me.LblTypeConge = "Points donnés "
Me.OptionButton1 = True
VALIDATION.Caption = "VALIDER"
VALIDATION.BackColor = &HFF00&
MsgBox " Points donnés modifiés"
End If


End Sub

Merci d'avance à vous pour vos infos et rectifications.

Marvin57
 
Retrouvé avec plaisir un calendrier qui venait de moi 😉
Mais pourquoi y avoir ajouté un bouton QUITTER ? La croix de fermeture ou la touche Echap faisait déjà le taf, non ? Remarquez, j'en ai maintenant une version permettant de saisir aussi l'heure …
Bon je retourne à l'objet due la discussion. À plus …
(Remarque: vous auriez intérêt à renommer tous vos contrôles d'un nom mnémonique, ce serait bien plus facile de s'y retrouver que de chaque fois chercher …)
Super votre calendrier.
En ce qui concerne le bouton quitter, je l'ai rajouté car dans mon fichier je me sert autrement du calendrier.

A+
 
hello Bernard

@Marvin57
et pour éviter le double message à l'enregistrement

VB:
Private Sub VALIDATION_Click() 'Valider l'enregistrement des congés saisis
    Dim Wtc As Worksheet
    Application.ScreenUpdating = False
   
    Set Wtc = Sheets("POINTS")
    With Wtc.ListObjects(1)
        If VALIDATION.Caption = "VALIDER" Then
            .ListRows.Add
            ligne = .ListRows.Count
            Message = "Points demandés enregistrés"
        Else
            Set trouve = .ListColumns(1).Range.Find(Me.lbltc.Caption, lookat:=xlWhole)
            If Not trouve Is Nothing Then
                ligne = trouve.Row - .Range.Row
            End If
            Message = "Points de l'élève modifiés"
        End If
       
        .DataBodyRange(ligne, 1) = WorksheetFunction.Max(.ListColumns(1).DataBodyRange) + 1
        .DataBodyRange(ligne, 2).Value = CDate(Me.TextBox1.Value)
        .DataBodyRange(ligne, 2).NumberFormat = "m/d/yyyy"
        .DataBodyRange(ligne, 3).Value = CDate(Me.TextBox2.Value)
        .DataBodyRange(ligne, 3).NumberFormat = "m/d/yyyy"
        .DataBodyRange(ligne, 4).Value = CDate(Me.TextBox3.Value)
        .DataBodyRange(ligne, 4).NumberFormat = "m/d/yyyy"
        .DataBodyRange(ligne, 5).Value = Me.ComboBox1.Value
        .DataBodyRange(ligne, 6).Value = Me.ComboBox2.Value
        .DataBodyRange(ligne, 7).Value = Me.ComboBox3.Value
        .DataBodyRange(ligne, 8).Value = Me.TextBox4.Value
        If Me.OptionButton1 = True Then .DataBodyRange(ligne, 9).Value = Me.TextBox5.Value
        If Me.OptionButton2 = True Then .DataBodyRange(ligne, 10).Value = Me.TextBox5.Value
    End With
    MsgBox Message
    Me.LblTypePoints = "Points payés "
    Me.OptionButton1 = True
    VALIDATION.Caption = "VALIDER"
    VALIDATION.BackColor = &HFF00&

    Sheets("POINTS").Activate
    Application.ScreenUpdating = True
    Unload Me
   
End Sub

une remarque.. on est bien d'accord que dans le code fourni, à aucun moment, le bouton "Valider" change de texte en "Modifier"...?
Bonjour vgendron,

Merci pour ton travail sur le code dans ma demande.

Alors, il m'inscrit bien tout dans le tableau maintenant.

Et oui, moi j'ai oublié de mentionner que le bouton valider peut changer en modifier !!! Vraiment désolé pour cet oubli !!!🙈

Est-il possible de modifier cela SVP ?

Merci à vous
 
modifier quoi??
à quel moment ton bouton passe en "modifier"??

je faisais juste remarquer que dans ton fichier, le bouton est TOUJOURS en "valider"..
donc le test if bouton.caption="Valider" else.... ne sert pas à grand chose en l'état..
 
après.. valider ou modifier. le texte du bouton.. on s'en fout un peu..
quand tu fais le test, si trouve is nothing.. ca veut dire que c'est une nouvelle ligne
si NOT trouve is nothing, ca veut dire que tu modifies une ligne existante...
 
Bon, l'ai pas encore testé, mais écrit selon ce que je voyais …
Bonjour Dranreb,

Merci pour le retour mais cela ne fonctionne pas !!
après.. valider ou modifier. le texte du bouton.. on s'en fout un peu..
quand tu fais le test, si trouve is nothing.. ca veut dire que c'est une nouvelle ligne
si NOT trouve is nothing, ca veut dire que tu modifies une ligne existante...
Re,
OK, alors vous me conseillez quoi ? de mettre un autre bouton pour modifier si besoin ?
 
pas besoin d 'un autre bouton

celui qui existe, tu mets "Enregistrer"
et le code

VB:
Private Sub VALIDATION_Click() 'Valider l'enregistrement des congés saisis
    Dim Wtc As Worksheet
    Application.ScreenUpdating = False
    
    Set Wtc = Sheets("POINTS")
    With Wtc.ListObjects(1)
        Set trouve = .ListColumns(1).Range.Find(Me.lbltc.Caption, lookat:=xlWhole)
        If Not trouve Is Nothing Then
            ligne = trouve.Row - .Range.Row
            Message = "Points de l'élève modifiés"
        Else
            .ListRows.Add
            ligne = .ListRows.Count
            Message = "Points demandés enregistrés"
        End If

        .DataBodyRange(ligne, 1) = WorksheetFunction.Max(.ListColumns(1).DataBodyRange) + 1
        .DataBodyRange(ligne, 2).Value = CDate(Me.TextBox1.Value)
        .DataBodyRange(ligne, 2).NumberFormat = "m/d/yyyy"
        .DataBodyRange(ligne, 3).Value = CDate(Me.TextBox2.Value)
        .DataBodyRange(ligne, 3).NumberFormat = "m/d/yyyy"
        .DataBodyRange(ligne, 4).Value = CDate(Me.TextBox3.Value)
        .DataBodyRange(ligne, 4).NumberFormat = "m/d/yyyy"
        .DataBodyRange(ligne, 5).Value = Me.ComboBox1.Value
        .DataBodyRange(ligne, 6).Value = Me.ComboBox2.Value
        .DataBodyRange(ligne, 7).Value = Me.ComboBox3.Value
        .DataBodyRange(ligne, 8).Value = Me.TextBox4.Value
        If Me.OptionButton1 = True Then .DataBodyRange(ligne, 9).Value = Me.TextBox5.Value
        If Me.OptionButton2 = True Then .DataBodyRange(ligne, 10).Value = Me.TextBox5.Value
    End With
    MsgBox Message
    Me.LblTypePoints = "Points payés "
    Me.OptionButton1 = True
    VALIDATION.Caption = "VALIDER"
    VALIDATION.BackColor = &HFF00&

    Sheets("POINTS").Activate
    Application.ScreenUpdating = True
    Unload Me
    
End Sub
 
pas besoin d 'un autre bouton

celui qui existe, tu mets "Enregistrer"
et le code

VB:
Private Sub VALIDATION_Click() 'Valider l'enregistrement des congés saisis
    Dim Wtc As Worksheet
    Application.ScreenUpdating = False
   
    Set Wtc = Sheets("POINTS")
    With Wtc.ListObjects(1)
        Set trouve = .ListColumns(1).Range.Find(Me.lbltc.Caption, lookat:=xlWhole)
        If Not trouve Is Nothing Then
            ligne = trouve.Row - .Range.Row
            Message = "Points de l'élève modifiés"
        Else
            .ListRows.Add
            ligne = .ListRows.Count
            Message = "Points demandés enregistrés"
        End If

        .DataBodyRange(ligne, 1) = WorksheetFunction.Max(.ListColumns(1).DataBodyRange) + 1
        .DataBodyRange(ligne, 2).Value = CDate(Me.TextBox1.Value)
        .DataBodyRange(ligne, 2).NumberFormat = "m/d/yyyy"
        .DataBodyRange(ligne, 3).Value = CDate(Me.TextBox2.Value)
        .DataBodyRange(ligne, 3).NumberFormat = "m/d/yyyy"
        .DataBodyRange(ligne, 4).Value = CDate(Me.TextBox3.Value)
        .DataBodyRange(ligne, 4).NumberFormat = "m/d/yyyy"
        .DataBodyRange(ligne, 5).Value = Me.ComboBox1.Value
        .DataBodyRange(ligne, 6).Value = Me.ComboBox2.Value
        .DataBodyRange(ligne, 7).Value = Me.ComboBox3.Value
        .DataBodyRange(ligne, 8).Value = Me.TextBox4.Value
        If Me.OptionButton1 = True Then .DataBodyRange(ligne, 9).Value = Me.TextBox5.Value
        If Me.OptionButton2 = True Then .DataBodyRange(ligne, 10).Value = Me.TextBox5.Value
    End With
    MsgBox Message
    Me.LblTypePoints = "Points payés "
    Me.OptionButton1 = True
    VALIDATION.Caption = "VALIDER"
    VALIDATION.BackColor = &HFF00&

    Sheets("POINTS").Activate
    Application.ScreenUpdating = True
    Unload Me
   
End Sub
Re,
Merci à vous vgendron.
Cela fonctionne comme voulu.

Oui, quand je sélectionne des données de la listbox, elles sont chargées. Mais cela fonctionne.
Je vais faire une série de test et je reviendrai ce soir.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
625
Réponses
35
Affichages
2 K
Retour