IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

[E-07] graphique s'adaptant au nombre de lignes, regex


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2008
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 44
    Par défaut [E-07] graphique s'adaptant au nombre de lignes, regex
    Bonjour à tous,

    Je souhaite obtenir un graphique excel dont le nombre de lignes s'adapte au nombre de lignes de ma feuille excel.

    Il faut donc que je puisse modifier la série du graphique et remplacer la ligne actuelle par la ligne correspondant réellement au nombre de lignes de mon graphique.
    Si j'ai bien compris, cela passe par l'utilisation de la fonction série, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SERIE(Tasks!$BN$11;Tasks!$BI$12:$BI$72;Tasks!$BN$12:$BN$72;5)
    Il est facile de voir que le graphique s'étend de la ligne 12 à la ligne 72.

    Maintenant, si je rajoute 10 lignes, je voudrais que le graphique s'étende jusqu'à la ligne 82.
    Pour cela, je compte utiliser le code suivant (qui fonctionne très bien):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        For Each oChart In ActiveSheet.ChartObjects
            For Each mySrs In oChart.Chart.SeriesCollection
                'MsgBox mySrs.Formula
                mySrs.Formula = WorksheetFunction.Substitute(mySrs.Formula, "72", "82")
            Next
        Next
    ma question est : comment repérer automatiquement le "72" dans la chaîne de caractère "=SERIE(Tasks!$BN$11;Tasks!$BI$12:$BI$72;Tasks!$BN$12:$BN$72;5)" ?
    Il faut récupérer le nombre situé juste avant le deuxième point-virgule (attention, ce nombre peut être à 2, 3 ou 4 caractères.

    Que me proposeriez-vous ?

  2. #2
    Membre Expert
    Avatar de JackOuYA
    Inscrit en
    Juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1 040
    Par défaut
    bonjour,

    si tu connais la formule à modifier, pour quoi utiliser un recherche remplace ? tu peu utiliser les foncitons de concaténations pour créer ta chaine

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Dim MaChaine as string
    Dim DerLigne as integer 
    DerLigne = 82
     'C.init"=SERIE(Tasks!$BN$11;Tasks!$BI$12:$BI$72;Tasks!$BN$12:$BN$72;5)"
    MaChaine = "=SERIE(Tasks!$BN$11;Tasks!$BI$12:$BI$" & DerLigne & ";Tasks!$BN$12:$BN$" & DerLigne & " ;5)"
    msgbox MaChaine.

  3. #3
    Expert confirmé

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Par défaut
    je te suggères, puisque tu passes par le code VBA d'enregistrer une macro qui crée un graphique.
    Tu verras de nouvaeux mots apparairte.
    Par exemple, SetSourceData qui attend une plage en référence.

    Ensuite, si tu enregistres la succession des actions suivantes : Edition/Atteindre/Cellules/Zone en cours, tu verras encore un nouveau mot apparaitre : CurrentRegion.

    Si tu combine le tout, on pourrait imaginer une macro qui suive le concept suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ActiveSheet.ChartObjects(1).Chart.SetSourceData Range("A1").CurrentRegion

  4. #4
    Membre averti
    Inscrit en
    Novembre 2008
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 44
    Par défaut
    Merci Jackouya et Maxence.

    Jackouya > j'ai pas mal de séries à mon graphique et je voudrais éviter de mettre une ligne par série.

    Maxence > j'ai essayé ta commande en l'adaptant à on cas, mais il semble que la définition des données de mon graphique est trop complexe pour être assimilée en une seule définition des données (en fait, tout a disparu de mon graphe quand j'ai lancé la macro)

    Enfin je dois quand même pouvoir me débrouiller avec vos deux codes.

  5. #5
    Expert confirmé

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Par défaut
    Il faudrait avoir une idée plus claire de la structure de tes données sources, surtout qu'il semble que tu utilises plusieurs graphes dans la même feuille...

    La solution de JacouYa est intéressante puisque tu ne fais varier que le nombre de lignes.
    La solution que je te propose est intéressante puisque je te parle objet (Range/ plage de cellules)

    Saches q'il y a beaucoup de termes et de moyens d'arriver à un résultat.
    Par exemple, UNION sert à assembler des plages distinctes.

    Si ton graph s'est vidé, c'est parce que je t'ai donné un exemple de code partant de A1... peut-être que ce n'est pas TON cas

  6. #6
    Membre averti
    Inscrit en
    Novembre 2008
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 44
    Par défaut
    En fait, j'ai un graphique en barres horizontales avec 4 séries empilées et la série en ordonnée (les descriptions) sont sur une colonne qui n'est pas située à côté des données.
    J'avais changé A1 en BM8 pour coller à mes données tout de même .

    C'est clair qu'il y a beaucoup de moyens d'arriver à mon résultat. Je souhaitais initialement modifier la cellule de fin de chaque série, mais je pense finalement utiliser la méthode de jackouya qui est peut être moins belle mais qui sera plus simple dans mon cas.

    Merci à vous deux !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Adaptation du nombres de lignes automatiquement dans un tableau
    Par parky67 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 25/07/2012, 20h29
  2. Réponses: 0
    Dernier message: 25/05/2009, 17h05
  3. Réponses: 2
    Dernier message: 03/10/2008, 16h06
  4. Réponses: 2
    Dernier message: 11/12/2007, 23h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo