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. Contributeur
    Bonjour,

    et si tu donnais l'erreur ça serait mieux non ?
    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
        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. Pourquoi avec mes autre userform ça marche, j'ai fait la meme chose pourtant.

          cdate() je le mets ou exactement ?

          Merci
          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. Toujours la meme erreur

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