prob pour affichage d'1 graph a partir d1 userform

  • Initiateur de la discussion Initiateur de la discussion nico64
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

N

nico64

Guest
salut,
g un prob je n'arrive pas à afficher un graph a partir d'un userform qui determine la plage, la serie et la période à afficher.

voici le code de l'userform ou sinon le fichier a télécharger

merci d'avance

Option Explicit

Private Sub ComboBox1_Change()

End Sub

Private Sub CommandButton1_Click()
Dim X As Byte, i As Byte
Dim j As Integer, Debut As Integer, Fin As Integer
Dim Plage As Range, Plage2 As Range

If ListBox1.Value = '' Then Exit Sub
If ComboBox1.ListIndex = -1 Or ComboBox2.ListIndex = -1 Then Exit Sub

If ComboBox1.ListIndex > ComboBox2.ListIndex Then
MsgBox 'La date de fin ne peut pas etre antérieure à la date de début .'
Exit Sub
End If

Debut = ComboBox1.ListIndex + 2
Fin = ComboBox2.ListIndex + 2

Set Plage = Feuil1.Range('A' & Debut & ':A' & Fin)

Application.ScreenUpdating = False
Worksheets(1).ChartObjects('Graphique 1').Activate

For j = ActiveChart.SeriesCollection.Count To 1 Step -1
ActiveChart.SeriesCollection(j).Delete
Next j

For i = 0 To ListBox1.ListCount - 1 'boucle sur les éléments de la listbox

If ListBox1.Selected(i) = True Then
X = X + 1

ActiveChart.SeriesCollection.NewSeries
Set Plage2 = Feuil1.Range(Feuil1.Cells(Debut, i + 2).Address & ':' & Feuil1.Cells(Fin, i + 2).Address)

ActiveChart.SeriesCollection(X).Values = Plage2
If X = 1 Then ActiveChart.SeriesCollection(X).XValues = Plage
ActiveChart.SeriesCollection(X).Name = ListBox1.List(i) ' nom de la courbe
ActiveChart.SeriesCollection(X).Border.ColorIndex = i + 4
End If

Next i


Application.ScreenUpdating = True

End Sub

Private Sub Label1_Click()

End Sub

Private Sub UserForm_Initialize()
Dim X As Byte
Dim Y As Integer

For X = 2 To 6
ListBox1.AddItem Feuil1.Cells(1, X)
Next X

For Y = 2 To 366
ComboBox1.AddItem Format(Feuil1.Range('A' & Y), 'dd mmmm')
ComboBox2.AddItem Format(Feuil1.Range('A' & Y), 'dd mmmm')
Next Y

End Sub

😉 [file name=userformdate.zip size=13866]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/userformdate.zip[/file]
 

Pièces jointes

Salut nico64,

Voici la réponse à ton problème, il s'agissait d'une mauvaise définition des valeurs de tes cellules dans le chargement de ton userform. Le reste fonctionnait déjà très bien!

A+

Thierry78 [file name=userformdate_20050407153916.zip size=17014]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/userformdate_20050407153916.zip[/file]
 

Pièces jointes

aprés verification je m'aperçoit que la courbe affiche un jour en moins que celui demandé !!! (elle décale d'1 jour)

-serait-il possible de modifier ceci ?
-ou faut-il agir pour que l'userform prenne en compte de nouvelles données ?

merci d'avance.

voici le dernier code et le fichier:

Option Explicit


Private Sub CommandButton1_Click()
Dim X As Byte, i As Byte
Dim j As Integer, Debut As Integer, Fin As Integer
Dim Plage As Range, Plage2 As Range

If ListBox1.Value = '' Then Exit Sub
If ComboBox1.ListIndex = -1 Or ComboBox2.ListIndex = -1 Then Exit Sub

If ComboBox1.ListIndex > ComboBox2.ListIndex Then
MsgBox 'La date de fin ne peut pas etre antérieure à la date de début .'
Exit Sub
End If

Debut = ComboBox1.ListIndex + 2
Fin = ComboBox2.ListIndex + 2

Set Plage = Feuil1.Range('A' & Debut & ':A' & Fin)

Application.ScreenUpdating = False
Worksheets(1).ChartObjects('Graphique 1').Activate

For j = ActiveChart.SeriesCollection.Count To 1 Step -1
ActiveChart.SeriesCollection(j).Delete
Next j

For i = 0 To ListBox1.ListCount - 1 'boucle sur les éléments de la listbox

If ListBox1.Selected(i) = True Then
X = X + 1

ActiveChart.SeriesCollection.NewSeries
Set Plage2 = Feuil1.Range(Feuil1.Cells(Debut, i + 2).Address & ':' & Feuil1.Cells(Fin, i + 2).Address)

ActiveChart.SeriesCollection(X).Values = Plage2
If X = 1 Then ActiveChart.SeriesCollection(X).XValues = Plage
ActiveChart.SeriesCollection(X).Name = ListBox1.List(i) ' nom de la courbe
ActiveChart.SeriesCollection(X).Border.ColorIndex = i + 4
End If

Next i


Application.ScreenUpdating = True

End Sub


Private Sub Label1_Click()

End Sub

Private Sub UserForm_Initialize()
Dim X As Byte
Dim Y As Integer

For X = 2 To 6
ListBox1.AddItem Worksheets('Feuil1').Cells(1, X).Value
Next X

For Y = 3 To 366
If Worksheets('feuil1').Range('A' & Y).Value = '' Then
GoTo suite:
Else
ComboBox1.AddItem Format(Feuil1.Range('A' & Y), 'dd mmmm')
ComboBox2.AddItem Format(Feuil1.Range('A' & Y), 'dd mmmm')
End If
Next Y
suite:
End Sub
[file name=userformdate_20050407153916_20050407164501.zip size=17014]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/userformdate_20050407153916_20050407164501.zip[/file]
 

Pièces jointes

rien de bien méchant,

Il s'agit d'un mauvais calcul quand à l'estimation du numéro de la ligne de la plage par rapport à la position de la listindex:

Debut = ComboBox1.ListIndex + 3
Fin = ComboBox2.ListIndex + 3

et non pas

Debut = ComboBox1.ListIndex + 2
Fin = ComboBox2.ListIndex + 2

A+

Thierry78
 
ok ça marche merci
🙂 :lol: 🙂 B)

mais comment faut-il modifier le code pour pouvoir ajouter des valeurs. car là si j'ajoute des dates elles n'apparaissent pas
si tu vois une solution.

apres j'arrete de t'embeter !

je pensais que la selection des dates se faisait sur cet ligne de code:

For Y = 3 To 366
If Worksheets('feuil1').Range('A' & Y).Value = '' Then

mais apparement non !
:S
 
Voilà,

En m'appercevant que ça fonctionnait tout à l'heure je n'ai pas voulu le modifier, mais il s'agit exactement du même problème qu'au début! Il suffit de modiier la définition de la valeur a ajouter dans la liste pour y arriver:

For Y = 3 To 366
If Worksheets('feuil1').Range('A' & Y).Value = '' Then
GoTo suite:
Else
ComboBox1.AddItem Format(Worksheets('Feuil1').Cells(Y, 1), 'dd mmmm')
ComboBox2.AddItem Format(Worksheets('Feuil1').Cells(Y, 1), 'dd mmmm')
End If
Next Y
suite:

Et ça marche! :-D

Bonne soirée,

Thierry78
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
10
Affichages
292
Réponses
3
Affichages
197
  • Question Question
Microsoft 365 affichage userform
Réponses
4
Affichages
363
Réponses
3
Affichages
672
Réponses
8
Affichages
236
  • Question Question
Microsoft 365 Erreur UBound
Réponses
4
Affichages
149
Réponses
4
Affichages
201
Réponses
2
Affichages
210
Retour