Combinaison "Cells" et "Range"

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

agd

XLDnaute Nouveau
Bonjour,

Bon d'habitude, en fouinant, j'arrive toujours a m'en sortir mais la j'avoue je cale.

Avant-Propos :

Je suis entrain de réaliser une macro VBA qui consiste à :

1 - Copier-coller dans l'onglet "DATA", un tableau de bords issue d'un autre fichier Excel => Fait
2 - De réaliser dans l'onglet "TCD", un tableau Croisé Dynamique => Fait
3 - De réaliser certaine opération mathématiques statistiques issues du TCD => Fait
4 - De réaliser un graphique multicourbles issues des opérations mathématiques => C'est là que je coince.

NOTA :
Ce travail je dois le réaliser plusieurs fois par semaine. il est donc primordiale de ne pas rendre la macro statique à une série de ligne et de colonne spécifique puisque le nombre de ligne et de colonne du TCD va croissant de jour en jour.
Actuellement le Tableau de bords dont est issu le TCD contient plusieurs centaines de lignes pour 21 colonnes.
La résultante est que le TCD gagne environ 3 à 4 colonnes supplémentaire par semaine.

Détail du Problème rencontré :
Pour la réalisation de l'étape 4, je me suis aidé de l'enregistreur de macro.
Celui-ci m'a écrit naturellement le code suivant :

Code:
Range("A20").Select
ActiveSheet.Shapes.AddChart.Select
ActiveChart.ChartType = xlLine
With ActiveSheet.ChartObjects(1)
    .Name = "Graphique_JOUR"
End With
ActiveChart.SeriesCollection.NewSeries

ActiveChart.SeriesCollection(1).Values = "='Journalier'!$B$10:$Y$10"
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(2).Values = "='Journalier'!$B$11:$Y$11"
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(3).Values = "='Journalier'!$B$12:$Y$12"
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(4).Values = "='Journalier'!$B$13:$Y$13"
ActiveChart.SeriesCollection(4).XValues = "='Journalier'!$B$2:$Y$2"

Ce code fonctionne mais comme expliqué en "Nota", je peux pas garder l'expression $B$10:$Y$10 dans cet état puisque la sélection des données de ma courbe ne seront pas toujours au même endroit sur la page.

Pour ce faire, j'ai déclaré plusieurs variables : LigneX, ColonneMin, et ColonneMax
ces variables sont déterminées par une série de boucles "For - Next" qui me permettent de savoir ou sont les lignes que je souhaite intégrer dans mon graphiques.

L'idée étant de remplacer l'écriture $B$10:$Y$10 par : Cells(LigneX, ColonneMin) :Cells(LigneX, ColonneMax)

Mais voila, j'ai beau tourner cette phrase dans tous les sens, je tombe invariablement sur la même erreur

Code d'éxécution'1004':
Erreur définie par l'application ou par l'objet.

si vous pouviez m'aider a écrire ce bout de code, je vous en serait tres reconnaissant.

PS : Je ne peux vous joindre de fichier, celui ci contenant des données sensibles.

Merci d'avance.

Cordialement

agd
 
Re : Combinaison "Cells" et "Range"

Bonjour Agd et bienvenu, bonjour le forum,

Essaie comme ça :
Code:
Range(Cells(LigneX, ColonneMin), Cells(LigneX, ColonneMax))

p.s. c'est quoi Agd ? ça me rappelle ma ville natale Agde...

[Édition]
Bonjour Efgé on s'est croisé...
 
Re : Combinaison "Cells" et "Range"

Bonjour,

Merci pour ta réponse Efgé.

=> Erreur de compilation
Erreur de syntaxe

du je pense au fait que la ligne contient déjà des guillemets :

ci-dessous la ligne au complet :
ActiveChart.SeriesCollection(1).Values = "='Journalier'!Cells(LigneX & ColonneMin).address & ":" & Cells(LigneX & ColonneMax).address"
 
Re : Combinaison "Cells" et "Range"

Re
Bonjour Robert
....Efgé.

=> Erreur de compilation
Erreur de syntaxe

du je pense au fait que la ligne contient déjà des guillemets :

ci-dessous la ligne au complet :
ActiveChart.SeriesCollection(1).Values = "='Journalier'!Cells(LigneX & ColonneMin).address & ":" & Cells(LigneX & ColonneMax).address"

Tu n'as pas recopié ma proposition:
ActiveChart.SeriesCollection(1).Values = "='Journalier'!" & Cells(LigneX, ColonneMin).Address & ":" & Cells(LigneX, ColonneMax).address
Et pas de " à la fin.

Cordialement
 
Re : Combinaison "Cells" et "Range"

Bonjour le fil, bonjour le forum,

Peut-être comme ça, viel ange gardien :
Code:
With Sheets("Journalier")
    ActiveChart.SeriesCollection(1).Values = "=Journalier!" & .Range(.Cells(LigneX, ColonneMin), .Cells(LigneX, ColonneMax)).Address
End With

Sinon, l'histoire de fichier aux données sensibles n'est que baratin de Ruel Malmaison... Rien ne t'empêche de recréer un fichier exemple avec la même structure que ton fichier original, d'y coller un poignée de données bidons, nécessaires à l'exemple et de nous envoyer ce magnifique chef-d'œuvre en pièce jointe...

[Édition]
Arf ! nos réponses se sont croisées... On n'attend ton fichier..
 
Dernière édition:
Re : Combinaison "Cells" et "Range"

Bonjour le fil, bonjour le forum,

Oui j'avais vu (mais après...). En revanche, pas d'onglet Journalier dans ton exemple donc plantage...
Avec le code ci-dessous :
Code:
ActiveChart.SeriesCollection.NewSeries
With Sheets("TCD")
    ActiveChart.SeriesCollection(1).Values = "='Journalier'!" & .Range(.Cells(p, ColonneMin), .Cells(p, ColonneMax)).Address
End With
'ActiveChart.SeriesCollection.NewSeries
'ActiveChart.SeriesCollection(2).Values = "='Journalier'!$B$11:$Y$11"
'ActiveChart.SeriesCollection.NewSeries
'ActiveChart.SeriesCollection(3).Values = "='Journalier'!$B$12:$Y$12"
'ActiveChart.SeriesCollection.NewSeries
'ActiveChart.SeriesCollection(4).Values = "='Journalier'!$B$13:$Y$13"
'ActiveChart.SeriesCollection(4).XValues = "='Journalier'!$B$2:$Y$2"

ActiveSheet.ChartObjects(1).Left = Range("A20").Left
ActiveSheet.ChartObjects(1).Top = Range("A20").Top

J'ai obtenu ce magnifique graphique :
Capture.jpg

Donc ça devrait marcher si tu finis le travail...
 

Pièces jointes

  • Capture.jpg
    Capture.jpg
    45.5 KB · Affichages: 66
  • Capture.jpg
    Capture.jpg
    45.5 KB · Affichages: 56
Re : Combinaison "Cells" et "Range"

J'ai trouvé

1 - Faut renommer l'onglet : mettre "Journalier" au lieu de TCD

2 - ActiveChart.SeriesCollection(1).Values = "=NomOnglet!" & Range(Cells(Ligne, ColonneMin), Cells(Ligne, ColonneMax - 1)).Address

En PJ, le fichier corrigé
 

Pièces jointes

- 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

Discussions similaires

Réponses
8
Affichages
631
  • Question Question
Microsoft 365 Export données
Réponses
4
Affichages
503
Réponses
9
Affichages
847
Retour