[2007] Tableau dynamique et macro - problème de date

Bonjour à tous !

Bon... A peine sorti d'un problème que j'en rencontre un autre...

J'ai une macro qui remplie les champs "filtre du rapport" d'un tableau dynamique à l'aide de combobox et d'un bouton :

Private Sub CommandButton4_Click()

Dim Wbk As Workbook

Set Wbk = Workbooks.Open(ThisWorkbook.Path & "\donnée TRS.xlsm")
    With Wbk.Worksheets("Résumé")

.Range("B1").Value = userform2.ComboBox1.Value
.Range("B2").Value = userform2.ComboBox2.Value
.Range("B6").Value = userform2.ComboBox3.Value
.Range("B3").Value = userform2.ComboBox4.Value
.Range("B4").Value = userform2.ComboBox5.Value
.Range("B9").Value = userform2.ComboBox6.value
.Range("B5").Value = userform2.ComboBox7.Value
.Range("B7").Value = userform2.ComboBox8.Value
.Range("B8").Value = userform2.ComboBox9.Value
.Range("B10").Value = userform2.ComboBox10.Value
.Range("B11").Value = userform2.ComboBox11.Value

 End With

Wbk.Close True
    Set Wbk = Nothing

End Sub

Seulement j'ai un problème à cette ligne :

.Range("B9").Value = userform2.ComboBox6.value

Car il s'agit d'une date et quand je click sur le bouton le gentil message "Erreur d'éxecution '1004' : '41643' n'est pas un élément du champs" apparait... (la date saisie étant 01/04/2014)

J'ai compris que la macro ne trouve pas cette "valeur" dans les possibilités proposées par le filtre du tableau mais pourtant elle existe bien et sous la même forme "01/04/2014" et le même format de date...

Quand je change le code ".Range("B9").Value...." en ".Range("D9").Value..." j'obtient bien la date "01/04/2014"....

J'ai essayé le format :

.Range("B9").Value = CDate (userform2.ComboBox6.value)

Mais rien ne change...

Donc la je sèche et si quelqu'un à une idée !

Bonne journée

Bonjour

Peut être une bete question mais tu es sur qu'il s'agit bien d'une Combobox dans ton USerform ?

Crdlt

Quand on sait que la plupart des erreurs que je fais en VBA sont des trucs idiots, il n'y a pas vraiment de question bêtes

Oui, il s'agit bien d'une Combobox.

Re,

Essaie comme ceci : ->

 .Range("B9").Value =format(userform2.ComboBox6.value, "dd/mm/yy")

Crdlt

Toujours la même erreur malheureusement

re,

Pas facile sans voir ton fichier.

Je viens de faire un test dans un fichier perso et je n'ai pas de soucis

Quelle est le code qui remplit les combox de l'userform2 ?

Alors je te mets tout le code mais il faut savoir que je début et qu'il n'est pas optimisé :

Private Sub CheckBox5_Click()

If CheckBox5 = False Then

Me.Frame3.Visible = False

End If

If CheckBox5 = True Then

Me.Frame3.Visible = True

End If

End Sub
Private Sub CheckBox6_Click()

If CheckBox6 = False Then

Me.Frame4.Visible = False

End If

If CheckBox6 = True Then

Me.Frame4.Visible = True

End If

End Sub
Private Sub CheckBox7_Click()

If CheckBox7 = False Then

Me.Frame5.Visible = False

End If

If CheckBox7 = True Then

Me.Frame5.Visible = True

End If

End Sub
Private Sub CheckBox8_Click()

If CheckBox8 = False Then

Me.Frame6.Visible = False

End If

If CheckBox8 = True Then

Me.Frame6.Visible = True

End If

End Sub
Private Sub CheckBox9_Click()

If CheckBox9 = False Then

Me.Frame7.Visible = False

End If

If CheckBox9 = True Then

Me.Frame7.Visible = True

End If

End Sub

Private Sub ComboBox1_Change()
If ComboBox1.Value = "" Then ComboBox1.ListIndex = 0
End Sub

Private Sub ComboBox10_Change()
If ComboBox10.Value = "" Then ComboBox10.ListIndex = 0
If ComboBox10.Value <> "(Tous)" Then ComboBox6.ListIndex = 0
End Sub

Private Sub ComboBox11_Change()
If ComboBox11.Value = "" Then ComboBox11.ListIndex = 0
If ComboBox11.Value <> "(Tous)" Then ComboBox6.ListIndex = 0
End Sub

Private Sub ComboBox2_Change()
If ComboBox2.Value = "" Then ComboBox2.ListIndex = 0
End Sub

Private Sub ComboBox3_Change()
If ComboBox3.Value = "" Then ComboBox3.ListIndex = 0
End Sub

Private Sub ComboBox4_Change()
If ComboBox4.Value = "" Then ComboBox4.ListIndex = 0
End Sub

Private Sub ComboBox5_Change()
If ComboBox5.Value = "" Then ComboBox5.ListIndex = 0
End Sub

Private Sub ComboBox6_Change()
If ComboBox6.Value = "" Then ComboBox6.ListIndex = 0
If ComboBox6.Value <> "(Tous)" Then ComboBox10.ListIndex = 0
If ComboBox6.Value <> "(Tous)" Then ComboBox11.ListIndex = 0
End Sub

Private Sub ComboBox7_Change()
If ComboBox7.Value = "" Then ComboBox7.ListIndex = 0
End Sub

Private Sub ComboBox8_Change()
If ComboBox8.Value = "" Then ComboBox8.ListIndex = 0
End Sub

Private Sub ComboBox9_Change()
If ComboBox9.Value = "" Then ComboBox9.ListIndex = 0
End Sub

Private Sub CommandButton4_Click()

Dim Wbk As Workbook

Set Wbk = Workbooks.Open(ThisWorkbook.Path & "\donnée TRS.xlsm")
    With Wbk.Worksheets("Résumé")

.Range("B1").Value = userform2.ComboBox1.Value
.Range("B2").Value = userform2.ComboBox2.Value
.Range("B6").Value = userform2.ComboBox3.Value
.Range("B3").Value = userform2.ComboBox4.Value
.Range("B4").Value = userform2.ComboBox5.Value
.Range("B9").Value = userform2.ComboBox6.Value
.Range("B5").Value = userform2.ComboBox7.Value
.Range("B7").Value = userform2.ComboBox8.Value
.Range("B8").Value = userform2.ComboBox9.Value
.Range("B10").Value = userform2.ComboBox10.Value
.Range("B11").Value = userform2.ComboBox11.Value

 End With

Wbk.Close True
    Set Wbk = Nothing

End Sub

Private Sub UserForm_initialize()
Dim Wbk As Workbook
Dim i As Variant
Dim f As Integer

Me.Frame3.Visible = False
Me.Frame4.Visible = False
Me.Frame5.Visible = False
Me.Frame6.Visible = False
Me.Frame7.Visible = False

ComboBox1.AddItem "(Tous)"
ComboBox2.AddItem "(Tous)"
ComboBox3.AddItem "(Tous)"
ComboBox4.AddItem "(Tous)"
 ComboBox5.AddItem "(Tous)"
 ComboBox6.AddItem "(Tous)"
 ComboBox7.AddItem "(Tous)"
 ComboBox8.AddItem "(Tous)"
 ComboBox9.AddItem "(Tous)"
ComboBox10.AddItem "(Tous)"
 ComboBox11.AddItem "(Tous)"

 Set Wbk = Workbooks.Open(ThisWorkbook.Path & "\donnée TRS.xlsm")
 With Wbk.Worksheets("Feuille donnée")

  For f = 2 To Sheets("Feuille donnée").Range("D65536").End(xlUp).Row
  ComboBox1 = Sheets("Feuille donnée").Range("D" & f)
If ComboBox1.ListIndex = -1 Then ComboBox1.AddItem Sheets("Feuille donnée").Range("D" & f)
  ComboBox1.ListIndex = 0
Next f

 For f = 2 To Sheets("Feuille donnée").Range("AP65536").End(xlUp).Row
  ComboBox2 = Sheets("Feuille donnée").Range("AP" & f)
If ComboBox2.ListIndex = -1 Then ComboBox2.AddItem Sheets("Feuille donnée").Range("AP" & f)
  ComboBox2.ListIndex = 0
Next f

 For f = 2 To Sheets("Feuille donnée").Range("AQ65536").End(xlUp).Row
  ComboBox3 = Sheets("Feuille donnée").Range("AQ" & f)
If ComboBox3.ListIndex = -1 Then ComboBox3.AddItem Sheets("Feuille donnée").Range("AQ" & f)
  ComboBox3.ListIndex = 0
Next f

For f = 2 To Sheets("Feuille donnée").Range("J65536").End(xlUp).Row
  ComboBox4 = Sheets("Feuille donnée").Range("J" & f)
If ComboBox4.ListIndex = -1 Then ComboBox4.AddItem Sheets("Feuille donnée").Range("J" & f)
  ComboBox4.ListIndex = 0
Next f

For f = 2 To Sheets("Feuille donnée").Range("B65536").End(xlUp).Row
  ComboBox5 = Sheets("Feuille donnée").Range("B" & f)
  If ComboBox5.ListIndex = -1 Then ComboBox5.AddItem Sheets("feuille donnée").Range("B" & f)
  ComboBox5.ListIndex = 0
Next f

For f = 2 To Sheets("Feuille donnée").Range("F65536").End(xlUp).Row
  ComboBox6 = Sheets("Feuille donnée").Range("F" & f)
  If ComboBox6.ListIndex = -1 Then ComboBox6.AddItem Sheets("feuille donnée").Range("F" & f)
  ComboBox6.ListIndex = 0
Next f

For f = 2 To Sheets("Feuille donnée").Range("C65536").End(xlUp).Row
  ComboBox7 = Sheets("Feuille donnée").Range("C" & f)
  If ComboBox7.ListIndex = -1 Then ComboBox7.AddItem Sheets("feuille donnée").Range("C" & f)
  ComboBox7.ListIndex = 0
Next f

For f = 2 To Sheets("Feuille donnée").Range("H65536").End(xlUp).Row
  ComboBox8 = Sheets("Feuille donnée").Range("H" & f)
  If ComboBox8.ListIndex = -1 Then ComboBox8.AddItem Sheets("feuille donnée").Range("H" & f)
  ComboBox8.ListIndex = 0
Next f

For f = 2 To Sheets("Feuille donnée").Range("I65536").End(xlUp).Row
  ComboBox9 = Sheets("Feuille donnée").Range("I" & f)
  If ComboBox9.ListIndex = -1 Then ComboBox9.AddItem Sheets("feuille donnée").Range("I" & f)
  ComboBox9.ListIndex = 0
Next f

For f = 2 To Sheets("Feuille donnée").Range("AN65536").End(xlUp).Row
  ComboBox10 = Sheets("Feuille donnée").Range("AN" & f)
  If ComboBox10.ListIndex = -1 Then ComboBox10.AddItem Sheets("feuille donnée").Range("AN" & f)
  ComboBox10.ListIndex = 0
Next f

For f = 2 To Sheets("Feuille donnée").Range("AO65536").End(xlUp).Row
  ComboBox11 = Sheets("Feuille donnée").Range("AO" & f)
  If ComboBox11.ListIndex = -1 Then ComboBox11.AddItem Sheets("feuille donnée").Range("AO" & f)
  ComboBox11.ListIndex = 0
Next f

  End With

  Wbk.Close False
    Set Wbk = Nothing

End Sub

Private Sub ANNULER1_Click()
Unload userform2
End Sub

Je veux bien te passer le fichier mais je suis pas sur que ça soit plus clair...

Re,

Pas sur que le format de ta combobox soit au format date. En principe la combobox est au format texte même si tu vois une date entrée avec le format dd/mm/yy

Je suppose que dans ta combobox, tu vois bien la date avec les "/" ??

Essaie un peu ceci -->

.Range("B9").Value = userform2.Cdate(ComboBox6.value)

Crdlt

Salut,

ça me paraissait correcte mais il me met une erreur de compilation - membre de méthdoe ou données introuvable...

re

Oups déso -->

 .Range("B9").Value = CDate(userform2.ComboBox6.Value)

Toujours la même erreur, impossible de savoir d'où ça vient


Toujours la même erreur, impossible de savoir d'où ça vient

re

Faut être sur de ce qui est dans la combo.

Lorsque tu complètes la combo es-tu sur que les datesqui viennent de ta feuille sont bien en format date. Tu n'as pas de caractères vides ?

La cellule d'où provient la date est bien au format *01/01/2014 et est renseignée par un autre userforme à l'aide du format "CDate"

Bonjour à tous !

J'ai finalement trouvé la solution :

Lorsque la date était saisie, elle était sous la forme *jj/mm/aaaa (lié au CDate) ce qui correspond à la date sous forme jj/mm/aaaa mais avec prise en charge de la date et heure du système d'exploitation or les date lu par le tableau dynamique sont sous la forme jj/mm/aaaa donc la solution :

J'ai viré le .Range("A1").Value = CDate(userform.valeur.Value) pour le remplacer par .Range("").Value = userform.valeur.Value

et j'ai ajouté dans le code plus loin :

.Range("A1").NumberFormat = "dd/mm/yyyy"

voilà, je crois que c'est bon maintenant !

Merci Dan d'avoir pris le temps pour essayer de trouver une solution !

Rechercher des sujets similaires à "2007 tableau dynamique macro probleme date"