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 :

Dans un TCD, savoir si une cellule est une donnée ou un sous-total [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Homme Profil pro
    Formateur et développeur bureautique
    Inscrit en
    Mars 2007
    Messages
    1 590
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Formateur et développeur bureautique
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 590
    Par défaut Dans un TCD, savoir si une cellule est une donnée ou un sous-total
    Bonjour tout le monde

    J'ai déjà une macro qui exécute tout un traitement à partir d'un double-clic sur une cellule d'un Tableau Croisé Dynamique.

    Seulement maintenant, je voudrais que mon traitement soit différent suivant si on double-clique sur une cellule de valeur ou sur une cellule d'un sous-total (ou d'un total).

    Dans mon TCD, je peux avoir plusieurs champs en ligne (ainsi que plusieurs champs en colonne).
    Je n'ai qu'un champ dans mes valeurs.

    Sous 2010, Excel affiche gentiment les valeurs sur un fond blanc. Quand il s'agit d'un sous-total en ligne, les nombres affichés sont en gras. Quand il s'agit d'un sous-total en colonne, les nombres sont affichés sur un fond gris. Le total général en colonne est lui en gras sur fond bleu (assez bizarrement le total général en ligne n'a pas de format particulier).

    Je voudrais donc pouvoir détecter en VBA si la cellule sur laquelle je fais un double-clic est une valeur ou si elle est un sous-total ou un total.

    Merci d'avance à ceux qui prendront le temps de me répondre.

    Bonne journée

    Pierre

  2. #2
    Membre très actif Avatar de XLRATOR
    Homme Profil pro
    Comptable Analyste
    Inscrit en
    Août 2012
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Comptable Analyste
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2012
    Messages : 226
    Par défaut
    Bonjour Pierre,
    Vous pouvez par exemple boucler sur les cellules de la plage qui vous concerne en recupérant leurs valeurs puis les comparer à une chaine de caractére que vous allez spécifier vous même.
    Dans un TCD les Cellules des Sous-Totaux sont bien distinguées par leur valeurs & la chaine de caractéres qui spécifie le nom du calcul qu'elles efféctuent.
    A l'exemple de ce code qui compare la valeur de chaque cellule de la plage B1:B80 à la chaine de caractéres "*Sous-Total", Vers la fin vous aurez "Ici Ya Sous-Total" ou "Ici Yapa Sous-Total" dans la colonne F, selon le contenu de la cellule du TCD.
    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
    'Pour un TCD de 81 Lignes
    Dim rng As Range, i As Byte
    Set Rng1 = Range("B4:B80") 'Ici Je metterai à la place de A et 80 les reférence qui me conviennent
    Application.ScreenUpdating = False
    For Each rng In Rng1.Cells
    i = rng.Count
        If rng.Value Like "*Sous-Total" Then
        Do
        i = i + 1
        'Vôtre Expréssion si Vrai
        rng.Offset(0, 4).Value = "Ici ya Sous-Total" 'C'est juste un éssai
        Loop Until i = 80
        Else
        i = rng.Count
        Do
        i = i + 1
        'Vôtre Expréssion si Faux
         rng.Offset(0, 4).Value = "Ici YaPa Sous-Total" 'C'est juste un éssai
        Loop Until i = 80
        End If
    Next
    Set Rng1 = Nothing
    Application.ScreenUpdating = True
    L'inconvénient de cette boucle c'est que si le nombre de lignes dépasse les 1000, son éxécution risque de prendre énormément temps voir 5 minutes, je dirait donc qu'il peut y a avoir un bien meilleur code, on verra

    Cordialement.

    Karim
    Entre la canne à pèche et le poisson c'est certainement la canne que je choisirais, puis apprendrais à m'en servir.
    Si on vous souffle une solution au complet c'est que vous n'auriez rien compris du problème.
    Consultez la , de forte chances que votre problème y figure et c'est plus vite que de poser une question et en attendre la réponse.
    FAQ Excel: http://excel.developpez.com/faq/

  3. #3
    Membre Expert
    Homme Profil pro
    Formateur et développeur bureautique
    Inscrit en
    Mars 2007
    Messages
    1 590
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Formateur et développeur bureautique
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 590
    Par défaut
    Merci bien de ce début de réponse.

    Mais comme je suis déjà au milieu d'un traitement qui arrive à s'exécuter quasi-instantannément, je cherche une solution qui puisse m'indiquer très rapidement si la cellule est un sous-total (ou un total) ou bien une valeur.

    Quelqu'un a une autre idée ?

    Pierre

  4. #4
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    Seulement maintenant, je voudrais que mon traitement soit différent suivant si on double-clique sur une cellule de valeur ou sur une cellule d'un sous-total (ou d'un total).
    il s'agit d'une cellule ciblée, donc pas besoin de boucler normalement, une piste : tu peux tenter d'exploiter la chose suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If IsNumeric(Target) = True Then ' voir aussi si vides etc...
    '    voir les différentes propriété Value, formula et text de l'objet range dans l'aide VBA...
        If Val(ActiveCell.Formula) = ActiveCell.Value Then MsgBox "Cellule de données" Else MsgBox "contient une formule"
    End If
    End Sub
    PS : c'est un pirouette, je n'ai pas testé toutes les situations

    Cordialement,

    Ps : si le côté technique de la réponse = OK ou pas => pensez à cliquer sur les pouces et quand question résolue à la taguer résolue, et chaque action vous rapporte des points

    Didier

  5. #5
    Membre Expert
    Homme Profil pro
    Formateur et développeur bureautique
    Inscrit en
    Mars 2007
    Messages
    1 590
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Formateur et développeur bureautique
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 590
    Par défaut
    Merci Ormonth d'avoir répondu.
    Effectivement il s'agit d'une cellule ciblée, ce n'est pas la peine de faire une boucle.

    Par contre, je viens d'essayer ce code, mais cela ne fonctionne pas.

    Que l'on soit sur une cellule de sous-total ou de valeur dans le TCD, cela donne la même réponse.
    Mais cela est compréhensible, puisque aucune cellule d'un TCD ne contient de formule.

    Je n'ai toujours pas de piste me permettant de trouver la réponse à ma question.

    Bonne journée

    Pierre

  6. #6
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 574
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 574
    Par défaut
    Bonjour

    Dans nombre de cas on peut se référer au libellé de la 1ère colonne ou la première ligne pour les totaux.

    Dans nombre de cas, la structure permet aussi d'identifier visuellement les sous-totaux, donc il doit être possible de trouver des repères.

    Compte tenu des 1000 et 1 façon de présenter un TCD, il faut partir de ta présentation...

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/04/2015, 11h17
  2. [XL-2007] Savoir si une cellule est une formule ou une valeur
    Par Syvolc dans le forum Excel
    Réponses: 3
    Dernier message: 23/06/2014, 14h50
  3. [XL-2002] Macro de comparaison d'une cellule d'une feuille avec une cellule d'une autre feuille.
    Par steelydan dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/09/2010, 12h59
  4. Lancement d'une macro lorsuqe une cellule est renseignée...
    Par rsoul dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 28/10/2008, 10h57
  5. Réponses: 23
    Dernier message: 01/08/2008, 13h35

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