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 :

Utiliser des checkbox pour choisir les colonnes à afficher dans un graph


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Enseignant en Activité Physique Adaptée
    Inscrit en
    Août 2021
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Enseignant en Activité Physique Adaptée
    Secteur : Santé

    Informations forums :
    Inscription : Août 2021
    Messages : 25
    Par défaut Utiliser des checkbox pour choisir les colonnes à afficher dans un graph
    Bonjour à toutes et à tous,

    je continue l'apprentissage de VBA et du codage des macros mais je suis face à un problème.

    J'ai une macro qui créé des graphiques, par défaut les graphiques affichent les 20 colonnes dans lesquelles j'ai des données mais cela ne m'arrange pas car je n'ai pas tout le temps besoin d'afficher les 20 colonnes.

    Ma question est donc, puis-je utiliser des checkbox à cocher pour sélectionner les données à afficher ?

    Pour l'instant la seule chose que j'ai réussi à faire c'est une boucle if pour chaque colonne mais cela ne fonctionne pas quand je coche plusieurs checkbox.

    Voici ce que j'ai écrit (checkbox 1 est pour afficher les 4 premières colonnes de deux séries):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    If CheckBox1 = True Then
            ActiveChart.SetSourceData Source:=Range( _
                                      "'AméliorationDégradation Indiv'!$B$2:$C$4")
     
            ActiveChart.FullSeriesCollection(1).Name = _
                                                       "='AméliorationDégradation Indiv'!$A$10"
            ActiveChart.FullSeriesCollection(1).Values = _
                                                       "='AméliorationDégradation Indiv'!$B$10:$C$10"
            ActiveChart.FullSeriesCollection(2).Name = _
                                                       "='AméliorationDégradation Indiv'!$A$11"
            ActiveChart.FullSeriesCollection(2).Values = _
                                                       "='AméliorationDégradation Indiv'!$B$11:$C$11"
        End If
    Mais si je fais une deuxième boucle pour une checkbox 2 avec d'autres colonnes je pense qu'il y a un conflit.

    Avez-vous une idée ?

    Bonne journée !

  2. #2
    Membre expérimenté
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Avril 2022
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2022
    Messages : 141
    Par défaut
    'Au lieu du checkBox, on peut essayer ceci :
    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
    Sub graph01()
        'Identifier les colonnes en encodant 0 ou 1 (1=colonne choisie; 0 = colonne ignorée) sur 1 ligne de votre choix
     
        Dim zone As String
        Dim j As Integer
        Dim c As Range
     
        With ThisWorkbook.Sheets("Sheet1")
            For j = 2 To 20 'colonnes B à T
                If .Cells(30, j) = 1 Then zone = zone & ", " & .Cells(30, j).Address    '0 et 1 sont encodés en ligne 30
            Next j
        End With
     
        If Left(zone, 2) = ", " Then zone = Mid(zone, 3)
     
        '****** les 4 lignes qui suivent servent uniquement à tester la procédure, et peuvent être supprimées)
        MsgBox zone
        For Each c In Range(zone)
            c.Interior.Color = vbGreen
        Next c
        '**************************
     
        ActiveChart.FullSeriesCollection(1).Values = "='AméliorationDégradation Indiv'!" & Range(zone)
    End Sub

  3. #3
    Membre averti
    Homme Profil pro
    Enseignant en Activité Physique Adaptée
    Inscrit en
    Août 2021
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Enseignant en Activité Physique Adaptée
    Secteur : Santé

    Informations forums :
    Inscription : Août 2021
    Messages : 25
    Par défaut
    Bonjour !

    Merci beaucoup de votre réponse, je trouve que c'est une très bonne idée de faire comme ça. J'ai remplacé le chiffre 30 par 10 dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Then zone = zone & ", " & .Cells(10, j).Address
    Car mes données sont en ligne 10.

    Par contre je ne comprends pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Left(zone, 2) = ", " Then zone = Mid(zone, 3)
    J'ai vu que la msgbox indiquait correctement la plage de donnée mais la dernière ligne du code de fonctionne pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveChart.FullSeriesCollection(1).Values = "='AméliorationDégradation Indiv'!" & Range(zone)
    J'ai un message d'erreur :
    incompatibilité de type
    Désolé du délai de ma réponse j'étais sur le terrain puis indisponible le soir...

    Merci encore !

  4. #4
    Membre expérimenté
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Avril 2022
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2022
    Messages : 141
    Par défaut
    Je vais voir tout cela dès que possible

  5. #5
    Membre averti
    Homme Profil pro
    Enseignant en Activité Physique Adaptée
    Inscrit en
    Août 2021
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Enseignant en Activité Physique Adaptée
    Secteur : Santé

    Informations forums :
    Inscription : Août 2021
    Messages : 25
    Par défaut
    Je vois que zone est de type "string", peut-être que le problème vient de là ?

    Sur internet ils disent que c'est surement un problème de déclaration de variable ou d'objet. Peut-être faut-il déclarer le graphique ?

    Par ailleurs j'ai utilisé votre code pour créer une deuxième zone (zone2) qui sera mon deuxième jeu de données à afficher sur le graph et ça fonctionne très bien.

    Les deux plages sont bien identifiées, reste plus qu'à trouver comment les afficher dans le graph ^^"
    Nom : Capture d’écran 2022-09-29 164505.jpg
Affichages : 279
Taille : 5,3 Ko

    Pour info, quand je ne sélectionne qu'une seule colonne l'erreur n'est plus "incompatibilité de type" mais "variable objet ou variable bloc with non définie"
    Merci de votre aide en tout cas

  6. #6
    Membre expérimenté
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Avril 2022
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2022
    Messages : 141
    Par défaut
    Il y a 2 points à traiter :

    Citation "Je ne comprends pas :"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Left(zone, 2) = ", " Then zone = Mid(zone, 3)
    Etant donné que la chaîne de caractères ", A10, B10, ..., etc" commence par une virgule (par définition), il faut se débarrasser de la 1ère virgule.
    Comme les 2 premiers caractères de la chaîne sont la virgule et un espace, ce qui nous intéresse c'est tout ce qui commence àpd la 3è position; d'où l'utilisation de la fonction "MID".

    Citation : "la dernière ligne du code ne fonctionne pas"
    J'aurais besoin d'une copie anonymisée de votre fichier pour essayer de comprendre l'origine du problème.

Discussions similaires

  1. Réponses: 7
    Dernier message: 16/02/2023, 10h24
  2. Réponses: 9
    Dernier message: 07/12/2017, 20h19
  3. Réponses: 10
    Dernier message: 11/05/2014, 15h19
  4. [AC-2010] Choisir les colonnes à imprimer dans un etat
    Par Alialyn dans le forum IHM
    Réponses: 2
    Dernier message: 04/10/2011, 04h13
  5. Réponses: 1
    Dernier message: 27/04/2010, 11h15

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