Microsoft 365 Erreur code ou pas ?

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 le code ci-dessous qui sert à transférer les données saisies via un UserForm.

Par contre, si le tableau de destination, qui est un tableau structuré, est vide, alors il me place la première inscription sur la première ligne hors du tableau !.

Est-ce que quelqu'un pourrait m'indiquer ce qui manque dans ce code S'il vous plaît.

Je vous remercie d'avance.

VB:
Private Sub VALIDATION_Click() 'Valider l'enregistrement
Dim Wtc As Worksheet
  Application.ScreenUpdating = False
  Set Wtc = Sheets("TYPES BCE")
  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
End if
End Sub

Marvin57
 
Solution
Je m'adressais au demandeur.
Voici la procédure complète que je propose :
VB:
Private Sub VALIDATION_Click() 'Valider l'enregistrement
   Dim LOt As ListObject, TVL()
   If Validation.Caption = "VALIDER" Then
      Set LOt = Sheets("CONGES").ListObjects(1)
      ReDim TVL(1 To 1, 1 To 10)
      If LOt.ListRows.Count > 0 Then
         TVL(1, 1) = Application.WorksheetFunction.Max(LOt.ListColumns(1).DataBodyRange) + 1
      Else
         TVL(1, 1) = 1
         End If
      TVL(1, 2).Value = CDate(Me.TextBox1.Value)
      TVL(1, 3).Value = CDate(Me.TextBox2.Value)
      TVL(1, 4).Value = CDate(Me.TextBox3.Value)
      TVL(1, 5).Value = Me.ComboBox1.Value
      TVL(1, 6).Value = Me.ComboBox2.Value
      TVL(1, 7).Value = Me.ComboBox3.Value...
Désolé je pensais que le code placé au poste #1 était de toit.
Donc "mm/dd/yyyy" c'est le format américain mois/jours/année tu as inversé le jour et le moi pour un affichage pseudo français.
Code:
Wtc.Cells(TVLl, 2).Value = Format(Me.TextBox1.Value,"yyyy-mm-dd") ' ici on est au format international donc compréhensible par Excel français
     ' Wtc.Cells(TVLl, 2).NumberFormat = "m/d/yyyy"

Vue que j'ai modifié une partie du codé que tu as toi même fournir je pensais que tu t'y retrouverai.

Personnellement je ne caste pas les dates avec cdate qui prend en charge les paramètres régionaux.
Re,

pas de soucis. J'ai bien noté ton indication. ça me servira un jour.👍👍
 
Attention, je viens de m'apercevoir que dans le code que j'ai proposé au #11 j'avais laissé des .Value qui n'ont rien à faire derrière des éléments de tableau. Le bon code devrait plutôt être celui ci :
VB:
Private Sub VALIDATION_Click() 'Valider l'enregistrement
   Dim LOt As ListObject, TVL()
   If Validation.Caption = "VALIDER" Then
      Set LOt = Sheets("CONGES").ListObjects(1)
      ReDim TVL(1 To 1, 1 To 10)
      If LOt.ListRows.Count > 0 Then
         TVL(1, 1) = Application.WorksheetFunction.Max(LOt.ListColumns(1).DataBodyRange) + 1
      Else
         TVL(1, 1) = 1
         End If
      TVL(1, 2) = CDate(Me.TextBox1.Value)
      TVL(1, 3) = CDate(Me.TextBox2.Value)
      TVL(1, 4) = CDate(Me.TextBox3.Value)
      TVL(1, 5) = Me.ComboBox1.Value
      TVL(1, 6) = Me.ComboBox2.Value
      TVL(1, 7) = Me.ComboBox3.Value
      TVL(1, 8) = Me.TextBox4.Value
      If Me.OptionButton1.Value Then TVL(1, 9) = CCur(Me.TextBox5.Value)
      If Me.OptionButton2.Value Then TVL(1, 10) = CCur(Me.TextBox5.Value)
      LOt.ListRows.Add.Range.Value = TVL
      Unload Me
      End If
   End Sub
 
Attention, je viens de m'apercevoir que dans le code que j'ai proposé au #11 j'avais laissé des .Value qui n'ont rien à faire derrière des éléments de tableau. Le bon code devrait plutôt être celui ci :
VB:
Private Sub VALIDATION_Click() 'Valider l'enregistrement
   Dim LOt As ListObject, TVL()
   If Validation.Caption = "VALIDER" Then
      Set LOt = Sheets("CONGES").ListObjects(1)
      ReDim TVL(1 To 1, 1 To 10)
      If LOt.ListRows.Count > 0 Then
         TVL(1, 1) = Application.WorksheetFunction.Max(LOt.ListColumns(1).DataBodyRange) + 1
      Else
         TVL(1, 1) = 1
         End If
      TVL(1, 2) = CDate(Me.TextBox1.Value)
      TVL(1, 3) = CDate(Me.TextBox2.Value)
      TVL(1, 4) = CDate(Me.TextBox3.Value)
      TVL(1, 5) = Me.ComboBox1.Value
      TVL(1, 6) = Me.ComboBox2.Value
      TVL(1, 7) = Me.ComboBox3.Value
      TVL(1, 8) = Me.TextBox4.Value
      If Me.OptionButton1.Value Then TVL(1, 9) = CCur(Me.TextBox5.Value)
      If Me.OptionButton2.Value Then TVL(1, 10) = CCur(Me.TextBox5.Value)
      LOt.ListRows.Add.Range.Value = TVL
      Unload Me
      End If
   End Sub
Bonjour,

Merci pour la nouvelle version. Je n'avais rien remarqué !

A+
Marvin57
 
- 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
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
240
Réponses
2
Affichages
394
Réponses
35
Affichages
2 K
Réponses
9
Affichages
380
Réponses
6
Affichages
540
Réponses
4
Affichages
446
Réponses
10
Affichages
649
Retour