Excel et code VB

Fermé
vcloclo1 Messages postés 483 Date d'inscription jeudi 1 janvier 2009 Statut Membre Dernière intervention 15 juin 2024 - 1 mai 2010 à 12:16
vcloclo1 Messages postés 483 Date d'inscription jeudi 1 janvier 2009 Statut Membre Dernière intervention 15 juin 2024 - 2 mai 2010 à 16:26
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



A voir également:

8 réponses

eriiic Messages postés 24583 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 17 juin 2024 7 225
1 mai 2010 à 14:16
Bonjour,

et si tu donnais l'erreur ça serait mieux non ?
eric
0
vcloclo1 Messages postés 483 Date d'inscription jeudi 1 janvier 2009 Statut Membre Dernière intervention 15 juin 2024 31
1 mai 2010 à 15:32
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
eriiic Messages postés 24583 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 17 juin 2024 7 225
1 mai 2010 à 15:42
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
vcloclo1 Messages postés 483 Date d'inscription jeudi 1 janvier 2009 Statut Membre Dernière intervention 15 juin 2024 31
1 mai 2010 à 17:02
Pourquoi avec mes autre userform ça marche, j'ai fait la meme chose pourtant.

cdate() je le mets ou exactement ?

Merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
eriiic Messages postés 24583 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 17 juin 2024 7 225
Modifié par eriiic le 1/05/2010 à 17:32
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
vcloclo1 Messages postés 483 Date d'inscription jeudi 1 janvier 2009 Statut Membre Dernière intervention 15 juin 2024 31
2 mai 2010 à 11:27
Toujours la meme erreur

0
vcloclo1 Messages postés 483 Date d'inscription jeudi 1 janvier 2009 Statut Membre Dernière intervention 15 juin 2024 31
2 mai 2010 à 11:39
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
eriiic Messages postés 24583 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 17 juin 2024 7 225
2 mai 2010 à 11:51
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
vcloclo1 Messages postés 483 Date d'inscription jeudi 1 janvier 2009 Statut Membre Dernière intervention 15 juin 2024 31
Modifié par vcloclo1 le 2/05/2010 à 16:27
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