[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 !