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 :

TCD - SourceData dans un Range ?


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
    Mars 2006
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 50
    Par défaut TCD - SourceData dans un Range ?
    Bonjour,

    J'ai un tableau croisé dynamique déjà défini.

    Mon problème se porte sur la manière d'envoyer la plage de données du TCD vers un objet Range.

    Sachant que le format de SourceData est Feuil1!L1C1:L13C5 j'ai écrit
    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 Test()
        Dim strSource As String
        Dim strFeuille As String
        Dim strPlage As String
        Dim sh As Worksheet
        Dim rng As Range
     
        strSource = ActiveSheet.PivotTables("TCD").SourceData
        strFeuille = Left(strSource, InStr(strSource, "!") - 1)
        strPlage = Right(strSource, Len(strSource) - InStr(strSource, "!"))
        Set sh = ActiveWorkbook.Worksheets(strFeuille)
        Set rng = sh.Range(strPlage)
    ...
    End Sub
    Bien entendu l'objet Range n'accepte pas la référence.
    J'ai essayé avec Evaluate mais le pb est le même...

    Comment peut-on transformer la référence L1C1:L13C5 en A1:E13 ?

    Par avance merci de l'aide que vous m'apporterez
    Seb

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Par défaut
    bonsoir

    Tu peux utiliser

    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
    Sub SourceTCD_Ref_xlA1()
        Dim Pvt As PivotTable
        Dim Cible As String
     
        'Définit le premier TCD de la feuille active.
        Set Pvt = ActiveSheet.PivotTables(1)
     
        Cible = Replace(Pvt.SourceData, "L", "R")
     
        MsgBox Replace(Application.ConvertFormula( _
                    Formula:=Cible, _
                    fromReferenceStyle:=xlR1C1, _
                    toReferenceStyle:=xlA1, _
                    toAbsolute:=xlAbsolute), _
                    "[" & ThisWorkbook.Name & "]", "")
    End Sub

    bonne soirée
    michel

  3. #3
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 50
    Par défaut ConvertFormula... La solution !
    Extra Michel, c'est exactement ce qu'il me fallait

    J'ai à peine modifié le code pour éviter les remplacements superflus sur le nom de la feuille. Ce qui donne dans mon cas
    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
    Sub MaJ_LibelleTCD()
        Dim strSource As String, strFeuille As String, strPlage As String
        Dim sh As Worksheet, rng As Range
     
        strSource = Worksheets("TCD").PivotTables("TCD").SourceData
     
        strFeuille = Left(strSource, InStr(strSource, "!") - 1)
     
        strPlage = Replace(Right(strSource, Len(strSource) - _
                        InStr(strSource, "!")), "L", "R")
     
        strSource = Application.ConvertFormula(Formula:=strFeuille & "!" & _
                        strPlage, fromReferenceStyle:=xlR1C1, _
                        toReferenceStyle:=xlA1, toAbsolute:=xlAbsolute)
     
        strPlage = Right(strSource, Len(strSource) - InStr(strSource, "!"))
     
        Set sh = ActiveWorkbook.Worksheets(strFeuille)
        Set rng = sh.Range(strPlage)
    ...
    End Sub
    Encore merci...

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

Discussions similaires

  1. Mettre une variable dans un range
    Par guismoman33 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 05/11/2007, 14h05
  2. [VBA-E] écrire dans un range de cellules excel depuis VBA
    Par pro64 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 19/03/2007, 17h22
  3. Boucle dans un range d'adresse IP
    Par yamino dans le forum Delphi
    Réponses: 6
    Dernier message: 22/11/2006, 09h09
  4. Y a-t-il eu des changements dans les rangs du forum ?
    Par pepper18 dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 1
    Dernier message: 12/06/2006, 15h52

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