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

Excel Discussion :

Forcer l'affichage d'un "maximum ylValues" sur des graphiques en fonction de la valeur d'une cellule. [XL-MAC 2011]


Sujet :

Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    amateur
    Inscrit en
    Mars 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : amateur
    Secteur : Services de proximité

    Informations forums :
    Inscription : Mars 2016
    Messages : 8
    Points : 3
    Points
    3
    Par défaut Forcer l'affichage d'un "maximum ylValues" sur des graphiques en fonction de la valeur d'une cellule.
    Bonjour à tous et merci d'avance de jeter un coup d'oeil à mon petit souci.

    Version Excel pour Mac 2011.

    Je travaille sur un classeur d'analyse: Plusieurs feuilles, plusieurs graphiques par feuilles.
    Je souhaite imposer l'affichage de la valeur max de l'axe des ordonnées à certains de ces graphiques (pas tous, mais il en existe sur chaque feuille) en fonction de la valeur d'une cellule sur la première feuille, sachant que cette valeur peut varier en fonction de l'utilisateur.

    J'ai beau chercher, je ne trouve pas de solution, car complètement néophyte en vba… Et je ne souhaite pas reprendre tous mes graphiques 1 par 1 pour chaque utilisateur (en gros il faudrait que je reprenne les paramètres d'environ 500 graphiques et ça ne me fait pas rire du tout…).

    Je vous joins le fichier incriminé. La cellule référence est "B3" de la feuille "Synthèse Mensuelle", les graphiques à exclure sont ceux appelés "Synthèse" (un par feuille). Tous les autres graphiques (lundi à vendredi et moyenne quotidienne) sont à modifier automatiquement en fonction de la valeur de cette fameuse B3…

    Suis-je clair? Sinon demandez-moi des éclaircissements…

    Merci d'avance!

    MadPier87
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 239
    Points : 5 610
    Points
    5 610
    Par défaut début de solution
    En attaché, un début de solution.
    Il faut savoir qu'une zone de texte peut être reliée à une cellule, p.ex. =B33, mais qu'elle ne peut pas contenir une formule, p.ex. =MAX(B8:B32).
    La macro Ajout2max a le défaut qu'il n'y a pas de mise à jour instantanée des max affichés. Il faut lancer la macro pour qu'elle se fasse.
    La macro Ajou1max a le défaut qu'il faut ajouter une ligne au tableau qui calcule les max de chaque série, mais ils sont instantanément mis à jour. Cette macro est aussi encore à terminer.
    Fichiers attachés Fichiers attachés

  3. #3
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Il est possible, dans un graphique, de mettre une zone de texte contenant une formule.
    Tu sélectionnes la zone de texte et tu cliques dans la barre de formule pour taper ta formule (dans ton cas, ce serait un =MAX(... )
    Mais faire ça en VBA, ça doit être assez compliqué. Peut-être l'enregistreur de macro pourra-t-il te mettre sur la voie.

  4. #4
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 239
    Points : 5 610
    Points
    5 610
    Par défaut
    EXCEL 2010. Je l'avais essayé, mais j'obtiens le message d'erreur: Le texte que vous avez tapé n'est ni une référence ni un nom défini valides.

    Même si je tape =MAX(1;2) je reçois ce message d'erreur, que la zone de texte soit dans la feuille ou dans une fenêtre de graphe.

    Maintenant, si je définis comme 'nom': MaxBS1 =MAX('Sem 1'!$B$8:$B$32) et que j'insère dans la zone de texte la formule =MaxBS1, j'obtiens le message d'erreur: Référence non valide

  5. #5
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Je viens de faire des tests. A priori, on ne peut pas mettre une formule mais on peut mettre une référence à une cellule.
    Donc, il faut mettre le MAX dans une cellule et ensuite mettre dans la barre de formule de la zone de texte la référence à cette cellule sans calculs, juste avec un = devant.

  6. #6
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 239
    Points : 5 610
    Points
    5 610
    Par défaut
    Ok, c'est sur ce principe qu'est établi la macro Ajout1max.
    Bonne journée.

  7. #7
    Candidat au Club
    Homme Profil pro
    amateur
    Inscrit en
    Mars 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : amateur
    Secteur : Services de proximité

    Informations forums :
    Inscription : Mars 2016
    Messages : 8
    Points : 3
    Points
    3
    Par défaut Alternative
    Bonjour et merci pour vos commentaires et conseils!

    En fait, je suis arrivé à çà:

    'Procédure parcourant chaque graphique de chaque feuille et modifie la valeur maximale de l'axe en prenant comme valeur le contenu de la cellule nommée "cell.Places"
    'Règle de gestion : ne modifie pas l'axe si le titre du graphique contient le mot 'SYNTHESE'
    'Déclenchement : Automatique, après la saisie du nombre de places sur la feuille "Synthese Mois"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub MAJAxesGraphiques()
     
    Dim vchart As ChartObject
    Dim vFeuille As Worksheet
     
    For Each vFeuille In ActiveWorkbook.Sheets
        For Each vchart In vFeuille.ChartObjects
            If UCase(Left(vchart.Chart.ChartTitle.Caption, 8)) <> "SYNTHESE" Then
                vchart.Chart.Axes(xlValue).MaximumScale = Range("cell.Places")
            End If
        Next
    Next
     
    End Sub
    La macro, affectée à un bouton, fonctionne parfaitement, MAIS…

    L'utilisation finale s'dressant à des (encore plus) newbies que mois, je dois verrouiller les feuilles, ce qui bloque l'exécution.
    J'ai bien trouvé des lignes de code, mais je n'arrive pas à déterminer comment les insérer dans la macro originale.

    A 53 ans, on ne s'improvise plus codeur VBA comme çà, en claquant des doigts, manifestement...

  8. #8
    Candidat au Club
    Homme Profil pro
    amateur
    Inscrit en
    Mars 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : amateur
    Secteur : Services de proximité

    Informations forums :
    Inscription : Mars 2016
    Messages : 8
    Points : 3
    Points
    3
    Par défaut Pour précision...
    En fait, ce que j'aimerais faire, c'est introduire une commande liée à la macro qui déverrouille la feuille au lancement par le bouton puis qui la reverrouille en fin d'exécution.

    J'ai trouvé ces deux lignes, mais ne sais comment les insérer…

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ActiveWorkbook.Worksheets("Synthèse Mois").Unprotect
    ActiveWorkbook.Worksheets("Synthèse Mois").Protect
    Je tiens à préciser que je ne mets pas de mot de passe de verrouillage car le classeur est susceptible d'évoluer, mais je ne serai pas forcément celui qui le modifiera…

    La macro serait-elle de ce type:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Option Explicit
     
    '20/03/2016 Pierre MADAUNE <a href="mailto:pmadaune@hotmail.com">pmadaune@hotmail.com</a>
    'Proc_dure parcourant chaque graphique de chaque feuille et modifie la valeur maximale de l'axe en prenant comme valeur le contenu de la cellue nomm_e "cell.Places"
    'Règle de gestion : ne modifie pas l'axe si le titre du graphique contient le mot 'SYNTHESE'
    'D_clenchement : Automatique, après la saisie du nombre de places sur la feuille "Synthese Mois"
     
     
    Sub MAJAxesGraphiques()
    ActiveWorkbook.Worksheets("Synthèse Mois").Unprotect
    Dim vchart As ChartObject
    Dim vFeuille As Worksheet
     
    For Each vFeuille In ActiveWorkbook.Sheets
        For Each vchart In vFeuille.ChartObjects
            If UCase(Left(vchart.Chart.ChartTitle.Caption, 8)) <> "SYNTHESE" Then
                vchart.Chart.Axes(xlValue).MaximumScale = Range("cell.Places")
            End If
        Next
    Next
    ActiveWorkbook.Worksheets("Synthèse Mois").Protect
    End Sub

    D'avance, merci!

  9. #9
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 239
    Points : 5 610
    Points
    5 610
    Par défaut Ceci devrait convenir.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub MAJAxesGraphiques()
        Dim vchart As ChartObject
        Dim vFeuille As Worksheet
        For Each vFeuille In ActiveWorkbook.Sheets      '--- passe de feuille en feuille
            vFeuille.Unprotect
            For Each vchart In vFeuille.ChartObjects    '--- passe de graphe en graphe de la feuille
                If UCase(Left(vchart.Chart.ChartTitle.Caption, 8)) <> "SYNTHESE" Then
                    vchart.Chart.Axes(xlValue).MaximumScale = Range("cell.Places")
                End If
            Next
            vFeuille.Protect
        Next
    End Sub
    Pour insérer un bout de code, il suffit de cliquer sur le bouton [#] pour ensuite coller le texte copié entre les balises |CODE| et |/CODE|

    Bonne continuation.

  10. #10
    Candidat au Club
    Homme Profil pro
    amateur
    Inscrit en
    Mars 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : amateur
    Secteur : Services de proximité

    Informations forums :
    Inscription : Mars 2016
    Messages : 8
    Points : 3
    Points
    3
    Par défaut MERCI!!!!
    C'est exactement ce qu'il me fallait!

    Je pensais qu'il me suffisait de déverrouiller la première feuille pour permettre au tableau de se mettre à jour automatiquement sur toutes les autres, ce qui n'est manifestement pas le cas.

    EricDgn tu es, sinon mon sauveur, en tout cas un facilitateur plus que précieux!

    Je boucle mon tableau et vous joins le fichier finalisé!

    Merci à tous.

  11. #11
    Candidat au Club
    Homme Profil pro
    amateur
    Inscrit en
    Mars 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : amateur
    Secteur : Services de proximité

    Informations forums :
    Inscription : Mars 2016
    Messages : 8
    Points : 3
    Points
    3
    Par défaut Et voili le truc final...
    Merci,

    voici donc le fichier "bouclé... Du moins pour cette partie.

    Je laisse l'option dans la macro "ignorer" les fichiers comportant "SYNTHESE", il peut y avoir des ajouts...
    Il me reste à créer un bouton pour déverrouiller les feuilles, mais... le code suivant, s'il fonctionne, bloque ensuite l'éxécution de la macro initiale... Je bloque encore... Sans doute un nouveau sujet je pense?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Option Explicit
     
    Sub Debloquer()
    '
    ' Debloquer Macro
    ' Déverrouille toutes les feuilles du classeur.
    '
        Dim vFeuille As Worksheet
        For Each vFeuille In ActiveWorkbook.Sheets      '--- passe de feuille en feuille
            vFeuille.Unprotect
            Next
    End Sub
    A suivre...
    Fichiers attachés Fichiers attachés

  12. #12
    Candidat au Club
    Homme Profil pro
    amateur
    Inscrit en
    Mars 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : amateur
    Secteur : Services de proximité

    Informations forums :
    Inscription : Mars 2016
    Messages : 8
    Points : 3
    Points
    3
    Par défaut A y est! Je pense tenir le bon bout!
    Et voiloi voilou, et tout semble correct...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Sub Deverrouiller()
    '
    ' Deverrouiller Macro
    ' Déverrouiller les feuilles du classeur pour modification.
    '
     
    'Sub Deverrouiller()
     Dim i As Integer
     For i = 1 To Sheets.Count
     Sheets(i).Unprotect
     Next i
     End Sub
    A voir à l'usage mais ça me semble correct... Qu'en pensez-vous?

  13. #13
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 239
    Points : 5 610
    Points
    5 610
    Par défaut Sheets / Worksheets
    Pour info: Différence entre sheets et worksheets et Objet Worksheet (Excel)
    Les 2 macros Debloquer() et Deverrouiller() sont correctes!
    Bonne continuation.

  14. #14
    Candidat au Club
    Homme Profil pro
    amateur
    Inscrit en
    Mars 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : amateur
    Secteur : Services de proximité

    Informations forums :
    Inscription : Mars 2016
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Merci EricDgn une fois de plus pour ces précisions, bien utiles pour le newbie que je suis.

    Je vous joins le fichier finalisé (ou presque, le bouton Unlock passera en fait en dernière feuille) et les lignes de codes des deux macros utilisées, auxquelles j'ai rajouté une ligne "retour à la feuille "Synthèse Mois"


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    Option Explicit
     
    Sub MAJAxesGraphiques()
     
     
    '20/03/2016 Pierre MADAUNE pmadaune@hotmail.com
    'Procédure parcourant chaque graphique de chaque feuille et modifie la valeur maximale de l'axe en prenant comme valeur le contenu de la cellule nommée "cell.Places"
    'Règle de gestion : ne modifie pas l'axe si le titre du graphique contient le mot 'SYNTHESE'
    'Déclenchement : Par clic gauche sur le bouton Indigo
     
        Dim vchart As ChartObject
        Dim vFeuille As Worksheet
        For Each vFeuille In ActiveWorkbook.Sheets      '--- passe de feuille en feuille
            vFeuille.Unprotect
            For Each vchart In vFeuille.ChartObjects    '--- passe de graphe en graphe de la feuille
                If UCase(Left(vchart.Chart.ChartTitle.Caption, 8)) <> "SYNTHESE" Then
                    vchart.Chart.Axes(xlValue).MaximumScale = Range("cell.Places")
                End If
            Next
            vFeuille.Protect
                Next
                Sheets("Synthèse Mois").Activate  '---retourne à la feuille "Synthèse Mois"
     
    End Sub
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Sub Deverrouiller()
    '
    ' Deverrouiller Macro
    ' Déverrouiller les feuilles du classeur pour modification.
    '
     
    'Sub Deverrouiller()
     Dim i As Integer
     For i = 1 To Sheets.Count
     Sheets(i).Unprotect
        Next i
        Sheets("Synthèse Mois").Activate   '---retourne à la feuille "Synthèse Mois"
     End Sub
    Si vous avez des suggestions, je reste preneur, merci encore de votre aide.
    Fichiers attachés Fichiers attachés

  15. #15
    Candidat au Club
    Homme Profil pro
    amateur
    Inscrit en
    Mars 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : amateur
    Secteur : Services de proximité

    Informations forums :
    Inscription : Mars 2016
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Et j'ai aussi réalisé que créer un claseur sous Mac pour des utilisateurs finaux PC induit un certain nombre de mini erreurs ou altérations des images (taille des boutons par exemple)... Dorénavant je travaillerai ce type de fichiers avec l'outil le plus proche de l'utilisateur final..

    ;-)

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 27/04/2010, 19h00
  2. Affichage de Box sous condition de valeur d'une cellule
    Par snowcho dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 10/02/2010, 17h52
  3. Affichage MSGBOX selon valeur d'une cellule
    Par Thimmy dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 11/06/2008, 09h07
  4. Affichage MSGBOX selon valeur d'une cellule
    Par Thimmy dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 10/06/2008, 19h41

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