Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Tableau sous conditions [le retour]

  • Initiateur de la discussion Initiateur de la discussion garfn7
  • 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 !

G

garfn7

Guest
Bonjour
J'ai longuement parcouru le thread qui possède le même intitulé que celui que j'ouvre.
Mais je suis très certainement "trop" débutant pour partir de celui-ci, donc j'en ouvre un nouveau pour partir de zéro.

J'ai des collègues qui remplissent quotidiennement un tableau contenant plusieurs lignes (!) et plusieurs colonnes. Les colonnes correspondent aux jours de la semaine.
Je souhaiterai rajouter un onglet qui serait donc les courbes de ces valeurs, avec en abscisse les jours de la semaine et en ordonnée les valeurs.
Sachant que certains jours de la semaine n'ont pas de valeur ou une valeur à zéro donc je souhaiterai les zapper lors de la création du graphique.
Si en bonus les graphiques pouvaient s'updater automatiquement quand les données sont modifiées ça serait le pied.
Bon après j'aimerai plusieurs graphiques mais je vous poserai les questions après 🙂

Je vous joint un tableau mensuel complet.
Si qqun peut me faire un exemple pour la ligne de données numéro 9.

Merci à tous d'avance.
Romain
 

Pièces jointes

Re : Tableau sous conditions [le retour]

Bonjour
Alors, en quelques mots.
Cela correspond EXACTEMENT à ce que je voulais faire. MERCI 😀
Cependant, serait-il possible de me guider pas à pas pour la création de ce joli graphique dynamique (avec macro j'imagine) pour que je puisse facilement en faire d'autres pour d'autres lignes de données ?
Merci 🙂
PS : Si on peut me tuyauter pour les légendes aussi dans les graphiques.
 
Re : Tableau sous conditions [le retour]

Petit ajout.
Je suis en fait sous EXCEL 2002...
Et lorsque j'exécute le programme, il plante sur la ligne de macro "ActiveSheet.Shapes.AddChart.Select"
=> Propriété ou méthode non gérée par cet objet
Help 😱)
Merci
 
Re : Tableau sous conditions [le retour]

J'ai changé le code comme suite :

Set ChrtObj = ActiveSheet.ChartObjects.Add _
(100, 375, 100, 225)
ChrtObj.Chart.ChartType = xlLine
ChrtObj.Chart.SeriesCollection.NewSeries
ChrtObj.Chart.SeriesCollection(1).Name = "=""Valeurs"""
ChrtObj.Chart.SeriesCollection(1).Values = "='Graphique'!$A$2:" & Adresse_DC2
ChrtObj.Chart.SeriesCollection(1).XValues = "='Graphique'!$A$1:" & Adresse_DC1

Mais erreur toujours.
HELP !
 
Re : Tableau sous conditions [le retour]

J'ai avancé encore un peu
Voir fichier joint, le code fonctionne bien pour créer une graphique pour une ligne.

Mode op :
-Je copie les données de la ligne sur la feuille "Graphique" en lignes 1 et 2, 1 pour les dates et 2 pour les données
-Je "nettoie" les données vides en copiant les données non vides en lignes 3 et 4, 3 pour les dates et 4 pour les données
-Je trace ma courbe

J'aimerai maintenant pouvoir donner plusieurs lignes, et pouvoir mettre une légende à chaque courbe, voire une couleur

Merci
 

Pièces jointes

Re : Tableau sous conditions [le retour]

Salut garfn7,
essaye ceci :

VB:
Sub Test()

Dim DC As Integer, i As Integer, j As Integer, Nb_Occurences As Integer, DL As Integer
Dim Adresse_DC(1 To 10) As String
Dim Mon_Graph As ChartObject
Dim Message, Titre, Ligne
Dim La_Ligne_Affichage(1 To 10) As Long
Dim Position As Byte

Dim ChrtObj As ChartObject

Application.ScreenUpdating = False
Sheets("Graphique").Select

With Range(Cells(1, 1), Cells(15, 1)).EntireRow
    .ClearContents
    .ClearFormats
End With

For Each Mon_Graph In Sheets("Graphique").ChartObjects
    Mon_Graph.Delete
Next

Sheets("ONGLET DATAS").Select
DC = Cells(6, 256).End(xlToLeft).Column 'Derniere Colonne
Range(Cells(6, 6), Cells(6, DC)).Copy Sheets("Graphique").Cells(1, 1) 'Les dates

Sheets("ONGLET DATAS").Select
Message = "Veuillez indiquer la(les) ligne(s) que vous souhaitez illuster. Pour l'affichage de lignes multiples, veuillez les séparer par un point-virgule--> ;  Maximum = 10 lignes différentes. Merci !"
Titre = "Choix de la ligne..."
Ligne = InputBox(Message, Titre)

Nb_Occurences = 1
For i = 1 To Len(Ligne)
    If Mid(Ligne, i, 1) = ";" Then Nb_Occurences = Nb_Occurences + 1
Next i

For i = 1 To Nb_Occurences
    If Nb_Occurences = 1 Then
        La_Ligne_Affichage(1) = Ligne
    Else
        If i = Nb_Occurences Then
            La_Ligne_Affichage(i) = Ligne
        Else
            Position = InStr(Ligne, ";")
            La_Ligne_Affichage(i) = Mid(Ligne, 1, Position - 1)
            Ligne = Mid(Ligne, Position + 1, Len(Ligne) - Position)
        End If
    End If
    Range(Cells(La_Ligne_Affichage(i), 6), Cells(La_Ligne_Affichage(i), DC)).Copy Sheets("Graphique").Cells(1 + i, 1) 'les données
Next i


Sheets("Graphique").Select
DC = Cells(1, 256).End(xlToLeft).Column
DL = Cells(65536, 1).End(xlUp).Row

For i = 2 To DL
    For j = 1 To DC
        On Error Resume Next
        If Cells(i, j).Value = "" Then Cells(i, j).Value = "=NA()"
        On Error GoTo 0
    Next j
Next i

Range(Cells(1, 1), Cells(DL, DC)).Copy
Cells(1, 1).PasteSpecial xlPasteValues
Application.CutCopyMode = False

Adresse_DC(1) = Cells(1, DC).Address
Adresse_DC(2) = Cells(2, DC).Address


ActiveSheet.Shapes.AddChart.Select
    ActiveChart.ChartType = xlLine
    ActiveChart.SeriesCollection.NewSeries
    ActiveChart.SeriesCollection(1).Name = "=""Valeurs 1"""
    ActiveChart.SeriesCollection(1).Values = "='Graphique'!$A$2:" & Adresse_DC(2)
    ActiveChart.SeriesCollection(1).XValues = "='Graphique'!$A$1:" & Adresse_DC(1)
    
    If Nb_Occurences > 1 Then
        For i = 2 To Nb_Occurences
            Adresse_DC(1 + i) = Cells(1 + i, DC).Address
            ActiveChart.SeriesCollection.NewSeries
            ActiveChart.SeriesCollection(i).Name = "Valeurs " & i
            ActiveChart.SeriesCollection(i).Values = "='Graphique'!$A$" & (i + 1) & ":" & Adresse_DC(1 + i)
        Next i
    End If
    
r:
    For i = 1 To ActiveChart.SeriesCollection.Count
        On Error Resume Next
        If Left(ActiveChart.SeriesCollection(i).Name, 5) = "Série" Then
            ActiveChart.SeriesCollection(i).Delete
            GoTo r
        End If
        On Error GoTo 0
    Next i

End Sub

Cordialement,

Étienne
 
Re : Tableau sous conditions [le retour]

Rebonjour Etienne et merci encore de te pencher sur mon problème !
Alors, je viens d'essayer.
Ca fonctionne mais pas entièrement.
Quand je propose les lignes 8;9;10 il me trace bien les courbes pour les lignes 9 et 10, mais plante pour la ligne 8 avec l'erreur :
Erreur d'exécution '1004':
Impossible de définir la propriété Values de la classe Series

Et il m'indique la ligne ActiveChart.SeriesCollection(1).Values = "='Graphique'!$A$2:" & Adresse_DC(2) (avant la boucle sur le Nb_Occurences)

D'autre part, les courbes on les noms Valeurs1, Série2, Série3, Série4.
Enfin il me fait le graphique dans un nouvel onglet au lieu de le faire dans l'onglet "Graphique".

Si tu vois d'où peuvent provenir les problèmes. Je vais me pencher dessus aujourd'hui, mais j'espère que tu pourras m'aider!

Romain
 
Re : Tableau sous conditions [le retour]

J'en suis à ça :

VB:
Sub Test()

Dim DC As Integer, i As Integer, j As Integer, Nb_Occurences As Integer, DL As Integer
Dim Adresse_DC(1 To 10) As String
Dim Mon_Graph As ChartObject
Dim Message, Titre, Ligne
Dim La_Ligne_Affichage(1 To 10) As Long
Dim Position As Byte

Dim myCht As ChartObject
Dim RngCht As Range

Dim ChrtObj As ChartObject

Application.ScreenUpdating = False
Sheets("Graphique").Select

With Range(Cells(1, 1), Cells(15, 1)).EntireRow
    .ClearContents
    .ClearFormats
End With

For Each Mon_Graph In Sheets("Graphique").ChartObjects
    Mon_Graph.Delete
Next

Sheets("ONGLET DATAS").Select
DC = Cells(6, 256).End(xlToLeft).Column 'Derniere Colonne
Range(Cells(6, 6), Cells(6, DC)).Copy Sheets("Graphique").Cells(1, 1) 'Les dates

Sheets("ONGLET DATAS").Select
Message = "Veuillez indiquer la(les) ligne(s) que vous souhaitez illuster. Pour l'affichage de lignes multiples, veuillez les séparer par un point-virgule--> ;  Maximum = 10 lignes différentes. Merci !"
Titre = "Choix de la ligne..."
Ligne = InputBox(Message, Titre)

Nb_Occurences = 1
For i = 1 To Len(Ligne)
    If Mid(Ligne, i, 1) = ";" Then Nb_Occurences = Nb_Occurences + 1
Next i

For i = 1 To Nb_Occurences
    If Nb_Occurences = 1 Then
        La_Ligne_Affichage(1) = Ligne
    Else
        If i = Nb_Occurences Then
            La_Ligne_Affichage(i) = Ligne
        Else
            Position = InStr(Ligne, ";")
            La_Ligne_Affichage(i) = Mid(Ligne, 1, Position - 1)
            Ligne = Mid(Ligne, Position + 1, Len(Ligne) - Position)
        End If
    End If
    Range(Cells(La_Ligne_Affichage(i), 6), Cells(La_Ligne_Affichage(i), DC)).Copy Sheets("Graphique").Cells(1 + i, 1) 'les données
Next i


Sheets("Graphique").Select
DC = Cells(1, 256).End(xlToLeft).Column
DL = Cells(65536, 1).End(xlUp).Row

For i = 2 To DL
    For j = 1 To DC
        On Error Resume Next
        If Cells(i, j).Value = "" Then Cells(i, j).Value = "=NA()"
        On Error GoTo 0
    Next j
Next i

Range(Cells(1, 1), Cells(DL, DC)).Copy
Cells(1, 1).PasteSpecial xlPasteValues
Application.CutCopyMode = False

Adresse_DC(1) = Cells(1, DC).Address
Adresse_DC(2) = Cells(2, DC).Address


'ActiveSheet.Shapes.AddChart.Select
'Sheets("Graphique").Select
'Charts.Add
 
Set myCht = ActiveSheet.ChartObjects.Add _
            (Left:=100, Width:=375, Top:=75, Height:=225)

With myCht.Chart
            
    .ChartType = xlLine
'    ActiveChart.SeriesCollection.NewSeries
'    ActiveChart.SeriesCollection(1).Name = "=""Valeurs 1"""
'    ActiveChart.SeriesCollection(1).Values = "='Graphique'!$A$2:" & Adresse_DC(2)
'    ActiveChart.SeriesCollection(1).XValues = "='Graphique'!$A$1:" & Adresse_DC(1)
    
    If Nb_Occurences > 0 Then
        For i = 1 To Nb_Occurences
            Adresse_DC(1 + i) = Cells(1 + i, DC).Address
            With .SeriesCollection.NewSeries
                '.Name = "=""Valeurs " & i
                Range("='Graphique'!$A$" & (i + 1) & ":" & Adresse_DC(1 + i)).Select
                
                .Values = Range("='Graphique'!$A$" & (i + 1) & ":" & Adresse_DC(1 + i))
            End With
        Next i
    End If
    
End With
    
'r:
 '   For i = 1 To ActiveChart.SeriesCollection.Count
  '      On Error Resume Next
   '     If Left(ActiveChart.SeriesCollection(i).Name, 5) = "Série" Then
    '        ActiveChart.SeriesCollection(i).Delete
     '       GoTo r
      '  End If
       ' On Error GoTo 0
    'Next i

End Sub

Et ça marche ! En EXCEL 2002 j'entends.

Tu crois qu'on peut alléger tout ça ?
Merci
Romain
 
- 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
8
Affichages
836
Réponses
2
Affichages
3 K
Réponses
17
Affichages
2 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…