Excel et code VB

Salut,

J'ai créer un code VB sur un fichier excel, avec un Userform pour inseré des info avec des champ. Sa fait 3 Userforme que je fait les deux premier marche tres bien, mais le 3° a une erreur sur ces ligne :

Worksheets("Repro").Select
    Range("A6").End(xlDown).Offset(1, 0) = Format(TextBox1.Value, "dd/mm/yyyy") 'Né le
    Range("A6").End(xlDown).Offset(0, 2) = Format(ComboBox1.Value) 'De
    Range("A6").End(xlDown).Offset(0, 3) = Format(TextBox2.Value, NumberFormat) 'Sexe
    Range("A6").End(xlDown).Offset(0, 4) = TextBox3 'Puce
End Sub


Sur cette ligne plus particulierement :

Range("A6").End(xlDown).Offset(1, 0) = Format(TextBox1.Value, "dd/mm/yyyy") 'Né le


Hors mes autre Userform ont le meme code sur cette ligne et j'ai pas d'erreur.

Voici le code en entier :

' Supprimer la croix de l'UserForm
Private Declare Function GetWindowLongA Lib "User32" _
  (ByVal hWnd As Long, ByVal nIndex As Long) As Long

Private Declare Function SetWindowLongA Lib "User32" _
  (ByVal hWnd As Long, ByVal nIndex As Long, _
  ByVal dwNewLong As Long) As Long

Private Declare Function FindWindowA Lib "User32" _
  (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

' Supprimer la croix de l'UserForm suite
Private Sub UserForm_Initialize()
    Dim hWnd As Long
hWnd = FindWindowA("Thunder" & IIf(Application.Version Like "8*", _
    "X", "D") & "Frame", Me.Caption)
SetWindowLongA hWnd, -16, GetWindowLongA(hWnd, -16) And &HFFF7FFFF
End Sub

'Liste déroulante de "De"
Private Sub ComboBox1_Enter()
Dim c As Range
'Pour nettoyer la combobox, sinon les items s'ajoutent à l'infini
ComboBox1.Clear

Application.ScreenUpdating = False
Worksheets("Dépenses&RecettesChiens").Select
If Range("G6") <> "" Then
    'On détermine la longueur de la liste existante en colonne F12
    For Each c In Range("G6", Range("G6").End(xlDown).Address)
    'On ajoute les items qui se trouvent déjà dans la liste
    ComboBox1.AddItem c
    Next
End If
End Sub

'Bouton "Effacer" pour vider les champs de la boite de dialogue
Private Sub Effacer_Click()
On Error Resume Next
    'Pour nettoyer le contenu de la boite de dialogue
    TextBox1 = "jj/mm/aaaa" 'Né le
    ComboBox1 = "" 'De
    TextBox2 = "" 'Sexe
    TextBox3 = "" 'Puce
End Sub

'Bouton "Ok" pour inserer/valider
Private Sub Ok_Click()
Dim c As Range

'Si le champ Né le est vide
If TextBox1.Value = "" Then
    MsgBox "Champ ''Né le'' non renseigner"
Exit Sub
End If

'Si le champ Né le n'a pas le bon format
If TextBox1.Value = "dd/mm/yyyy" Then
    MsgBox "Champ ''Né le'' non renseigner, Format Incorrect"
Exit Sub
End If

'Si le champ De est vide
If ComboBox1.Value = "" Then
    MsgBox "Champ ''De'' non renseigner"
Exit Sub
End If

'Si le champ Sexe est vide
If TextBox2.Value = "" Then
    MsgBox "Champ ''Sexe'' non renseigner"
Exit Sub
End If

'Si le champ date na pas le bon format
If Not IsDate(TextBox1) Then
    'On affiche le message d'erreur
    MsgBox "Format de la date ''Né le'' Incorrect"
    'Option 1 : Si on veut vidé le champ
        'TextBox1 = ""
    'Option 2 : Si on veut affiché l'exemple du format
        TextBox1 = "jj/mm/aaaa"
Exit Sub
End If

Worksheets("Repro").Select
'Sert a l'insertion dans la colonne aproprier
    Range("A6").End(xlDown).Offset(1, 0) = Format(TextBox1.Value, "dd/mm/yyyy") 'Né le
    Range("A6").End(xlDown).Offset(0, 2) = Format(ComboBox1.Value) 'De
    Range("A6").End(xlDown).Offset(0, 3) = Format(TextBox2.Value, NumberFormat) 'Sexe
    Range("A6").End(xlDown).Offset(0, 4) = TextBox3 'Puce
End Sub

'Bouton Quitter pour fermer la boite de dialogue
Private Sub Quitter_Click()
    Unload UserForm3
End Sub


Pouvez vous me dire d'ou vient le probleme ?

Merci



--
L'esprit c'est comme un parachute, qui est utile seulement quand il est ouvert.

8 réponses

  1. Le problème c'est qu'avec ton code j'ai eu la même erreur.

    Donc je comprend plus rien.

    Chaque userform a un Ok diffèrent, chaque code est indépendant.

    L'esprit c'est comme un parachute, qui est utile seulement quand il est ouvert.
    0
    1. Voici mon autre code fait de la meme maniere et qui fonctionne :

      'Liste déroulante de "Libellé"
      Private Sub ComboBox1_Enter()
      Dim c As Range
      'Pour nettoyer la combobox, sinon les items s'ajoutent à l'infini
      ComboBox1.Clear
      
      Application.ScreenUpdating = False
      'On change de feuil
      Worksheets("Paramètre").Select
      If Range("A3") <> "" Then
          'On détermine la longueur de la liste existante en colonne A
          For Each c In Range("A3", Range("A3").End(xlDown).Address)
          'On ajoute les items qui se trouvent déjà dans la liste
          ComboBox1.AddItem c
          Next
      End If
      'On revient à la bonne feuil
      Worksheets("Dépenses&RecettesChiens").Select
      Application.ScreenUpdating = True
      
      End Sub
      
      'Liste déroulante de "Nom"
      Private Sub ComboBox2_Enter()
      Dim c As Range
      'Pour nettoyer la combobox, sinon les items s'ajoutent à l'infini
      ComboBox2.Clear
      
      Application.ScreenUpdating = False
      Worksheets("Dépenses&RecettesChiens").Select
      If Range("G6") <> "" Then
          'On détermine la longueur de la liste existante en colonne F12
          For Each c In Range("G6", Range("G6").End(xlDown).Address)
          'On ajoute les items qui se trouvent déjà dans la liste
          ComboBox2.AddItem c
          Next
      End If
      End Sub
      
      'Bouton "Effacer" pour vider les champs de la boite de dialogue
      Private Sub Effacer_Click()
      On Error Resume Next
          'Pour nettoyer le contenu de la boite de dialogue
          TextBox1 = "jj/mm/aaaa" 'Date
          ComboBox1 = "" 'Libellé
          TextBox2 = "" 'Somme
          ComboBox2 = "" 'Nom
          TextBox3 = "" 'Commentaires
      End Sub
      
      'Bouton "Ok" pour inserer/valider
      Private Sub Ok_Click()
      Dim c As Range
      
      'Si le champ Date est vide
      If TextBox1.Value = "" Then
          MsgBox "Champ ''Date'' non renseigner"
      Exit Sub
      End If
      
      'Si le champ Date n'a pas le bon format
      If TextBox1.Value = "dd/mm/yyyy" Then
          MsgBox "Champ ''Date'' non renseigner, Format Incorrect"
      Exit Sub
      End If
      
      'Si le champ Libellé est vide
      If ComboBox1.Value = "" Then
          MsgBox "Champ ''Libellé'' non renseigner"
      Exit Sub
      End If
      
      'Si le champ Somme est vide
      If TextBox2.Value = "" Then
          MsgBox "Aucune Somme entrée"
      Exit Sub
      End If
      
      'Si le champ date na pas le bon format
      If Not IsDate(TextBox1) Then
          'On affiche le message d'erreur
          MsgBox "Format de la date Incorrect"
          'Option 1 : Si on veut vidé le champ
              'TextBox1 = ""
          'Option 2 : Si on veut affiché l'exemple du format
              TextBox1 = "jj/mm/aaaa"
      Exit Sub
      End If
      
      Worksheets("Dépenses&RecettesChiens").Select
      'Sert a l'insertion dans la colonne aproprier
          Range("A3").End(xlDown).Offset(1, 0) = Format(TextBox1.Value, "dd/mm/yyyy") 'Date
          Range("A3").End(xlDown).Offset(0, 1) = Format(ComboBox1.Value) 'Libellé
          Range("A3").End(xlDown).Offset(0, 2) = Format(TextBox2.Value, NumberFormat) 'Somme
          Range("A3").End(xlDown).Offset(0, 3) = ComboBox2 'Nom
          Range("A3").End(xlDown).Offset(0, 4) = TextBox3 'Commentaires
      End Sub
      
      'Bouton Quitter pour fermer la boite de dialogue
      Private Sub Quitter_Click()
          Unload UserForm1
      End Sub
      0
      1. Contributeur
        Difficile de savoir sans avoir le classeur...
        Est-ce que le bouton ok où tu mets le code en défaut appartient bien au même formulaire que textbox1 ? Sinon il faut préciser le formulaire : UserForm1.TextBox1.Value

        Mais ça ne retire rien à ce que je t'ai dit avant même si ton code fonctionne : format() te retourne une chaine et je pense que c'est du numérique que tu veux.
        eric
        0
    2. Toujours la meme erreur

      0
      1. Contributeur
        Pourquoi avec mes autre userform ça marche
        N'hésite pas à regarder l'aide excel sur les fonctions, elle est très bien faite.
        essaie avec :
        Range("A6").End(xlDown).Offset(1, 0) = cdate(TextBox1.Value)
        0
        1. Pourquoi avec mes autre userform ça marche, j'ai fait la meme chose pourtant.

          cdate() je le mets ou exactement ?

          Merci
          0
          1. Contributeur
            Re,

            En fait format sert à formater un affichage pour un nombre et retourne une chaine.
            Toi tu veux l'inverse, cad transformer une chaine en une date numérique valide.
            Utilise cdate() et met le format d'affichage voulu dans la cellule.
            eric
            0
            1. Autant pour moi, j'avais complement oublier lol

              Voici les captures

              http://img87.imageshack.us/img87/5047/20100501152906.jpg
              http://img260.imageshack.us/img260/3660/20100501152925.jpg

              0
              1. Contributeur
                Bonjour,

                et si tu donnais l'erreur ça serait mieux non ?
                eric
                0