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

Microsoft 365 Erreur code ou pas ?

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...

Marvin57

XLDnaute Occasionnel
Re,

pas de soucis. J'ai bien noté ton indication. ça me servira un jour.
 

Dranreb

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

Marvin57

XLDnaute Occasionnel
Bonjour,

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

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