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 :

Liaison automatique après création d'un workbooks en VBA


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 37
    Par défaut Liaison automatique après création d'un workbooks en VBA
    Bonjour,

    Je suis actuellement en train de développer un programme qui récupère des données et les range dans un onglet "bdd". Ensuite dans un autre onglet, j'ai un tableau dynamique(crée via l'assistant et non en vba) qui se source sur cet onglet "bdd" et qui trie les informations en fonction de différents critères.

    À la fin de mon programme j'enregistre sous un autre nom ce fichier et le sauvegarde dans un répertoire différent.

    Le seul soucis c'est que mon tableau dynamique vient ce sourcer sur les données du fichier d'origines(celui sur lequel je lance macro) et non sur le nouveau fichier générés.
    J'ai lu cette article mais le "trick" ne marche pas... : https://stackoverflow.com/questions/...e-old-workbook

    Est-ce qu'il existe un paramètre en vba lors de la sauvegarde ou de la copie des onglets qui me permettrait d'éviter ce problème de source de données ?

    Dans l'attente de vous lire,
    Solown.

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Bonjour,

    Possible que la source du TCD, dans ton code, contient tout le chemin du fichier.
    Si c'est le cas, laisse seulement le nom de la feuille source et sa plage.

    Autrement, une fois la copie du fichier faite, tu vas dans l'onglet Donées, puis Modifier les liens, puis tu cliques Rompre la liaison.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 37
    Par défaut
    Bonjour parmi et merci de ta réponse

    Actuellement mon TCD est présent sur un fichier "matrice" qui sert de modèle pour ranger les données(données qui changent chaque jour et qui rend l'utilisation de la macro quotidienne).

    À la fin de cette macro codé en vba, je découpe les onglets de ce fichier matrice pour les coller dans un nouveau workbook comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wbContrat.Worksheets(Array("Prev_Agents", "Prod", "Invision")).Copy wbRegion.Sheets(1)
    J'ai bien pensé à le supprimer manuellement mais :
    1. Cette macro est destiné à des personnes très loin du monde de l'informatique, je doute que le fait de devoir supprimer les liens manuellement chaque jour soit très pratique
    2. Sur le fichier contenant le TDC, le bouton modifier les liens est grisé

    Nom : Capture.PNG
Affichages : 172
Taille : 3,7 Ko

    Le seul endroit ou je peux avoir un impact sur la source des données est dans l'onglet Analyse(générée par la présence du TDC)> Changer la source des données > Tableau/Plage qui pointent vers le fichier matrice.

    J'ai bien essayer d'appliquer cette méthode mais en vain :
    http://excel-malin.com/codes-sources...iaisons-excel/

    Je n'arrive pas à le faire en vba

  4. #4
    Membre éclairé
    Homme Profil pro
    contrôle de gestion - data management
    Inscrit en
    Mai 2018
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : contrôle de gestion - data management
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2018
    Messages : 33
    Par défaut
    Bonsoir, ceci à adapter (provient de l'enregistreur) pour changer la source du TCD sur le nouveau workbook :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Source = "repertoire\[nomFichier.xlsm]onglet!C1:C2"
    wsNew.PivotTables("NomTcd").ChangePivotCache _
    wbNew.PivotCaches.Create(xlDatabase, Source, Version:=6)
    A+

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    et si tu enregistres avant d'établir la source du TCD ?
    eric

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 37
    Par défaut
    Merci vincent_merle pour ta réponse, néanmoins, vu que je le TCD n'est pas généré avec le code mais crée avec l'assistant dans le fichier matrice, je ne sais pas si je pourrais changer la source du nouveau tableau en vba. Je ne suis pas au travail avant lundi mais j'espère que ta solution marchera.

  7. #7
    Membre éclairé
    Homme Profil pro
    contrôle de gestion - data management
    Inscrit en
    Mai 2018
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : contrôle de gestion - data management
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2018
    Messages : 33
    Par défaut
    Bonjour, oui ça devrait fonctionner.
    Dans ta procédure VBA, Il faut enregistrer le nouveau classeur qui est généré au préalable afin qu'il ait un chemin d'accès et le référencer (dans mon exemple j'ai nommé ce nouveau classeur "wbNew") :

    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 changeSource()
     
    Dim wbNew As Workbook
    Dim wsNewTcd, wsNewSource As Worksheet
     
    Set wbNew = ???????? 'wbNew : référence au classeur qui est crée
    Set wsNewTcd = wbNew.Worksheets("tcd")
    Set wsNewSource = wbNew.Worksheets("sourceTcd")
     
    Source = wbNew.Path & "\[" & wbNew.Name & "]" & wsNewSource.Name & "!C1:C2" 'notation R1C1 : C1 correspond à colonne 1 et C2 à colonne 2
    wsNewTcd.PivotTables("NomTcd").ChangePivotCache _
    wbNew.PivotCaches.Create(xlDatabase, Source)
     
    End Sub

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 37
    Par défaut
    Bonjour vicnent_merle.

    Je viens de tester ce matin, ça marche parfaitement.

    Bravo à toi et merci pour l'extrait de code et les explications, c'était super clair et ça fonctionne.

    Sujet résolue.

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 02/03/2017, 17h30
  2. Réponses: 5
    Dernier message: 01/12/2011, 12h03
  3. Réponses: 3
    Dernier message: 18/11/2005, 13h37

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