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 :

Modifier la connexion de la source externe de mes TCD


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
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 28
    Par défaut Modifier la connexion de la source externe de mes TCD
    Bonjour à tous,

    Voilà, je tourne en rond depuis plusieurs heures sans trouver de solutions... Je viens donc ici pour tenter de trouver un sauveur !!!

    Mon problème est le suivant:
    J'ai un classeur Excel avec 1 TCD par feuille alimentée par des bases ACCESS différentes en fonction des feuilles (en tout 4 bases). Dans chaque base ACCESS, j'ai divisé mes données en plusieurs tables distinctes. Ce que je souhaite faire c'est modifier la connexion de mes TCD et non pas la source. En effet par exemple les 3 premières feuilles par exemple traitent de la casse logistique. Dans ma base ACCESS j'ai divisé ces données en différentes catégories (SEC, FRAIS, GEL) et j'ai ainsi créé 3 tables au sein de cette même base. Je souhaite mettre en réseau cette base et trouver un code qui me permettra de cliquer sur un bouton modifiant la connexion de mes TCD à la table SEC FRAIS OU GEL pour les différents utilisateurs ayant accès au réseau.

    Pour le moment j'ai enregistré une macro avec l'enregistreur qui me modifie la connexion mais celle ci est à mon avis incomplète et elle bug.

    Merci d'avance pour votre patience et le temps que vous m’accorderez.

    Mon code:


    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
    26
    27
    28
    29
    30
    31
    32
    Sub SEC()
    '
    ' SEC Macro
    '
     
    '
        With ActiveWorkbook.Connections("REPORT TEST1").OLEDBConnection
            .BackgroundQuery = True
            .CommandText = Array("REPORTING CASSE 2015 SEC")
            .CommandType = xlCmdTable
            .Connection = Array( _
            "OLEDB;Provider=Microsoft.ACE.OLEDB.12.0;Password="""";User ID=Admin;Data Source=T:\Itmaf\Appros-Flux\5-Reporting\REPORTING CDG\TEST\REPO" _
            , _
            "RT TEST.accdb;Mode=Share Deny Write;Extended Properties="""";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Dat" _
            , _
            "abase Password="""";Jet OLEDB:Engine Type=6;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global" _
            , _
            " Bulk Transactions=1;Jet OLEDB:New Database Password="""";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;" _
            , _
            "Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False;Jet OLEDB:Suppor" _
            , "t Complex Data=False")
            .RefreshOnFileOpen = False
            .SavePassword = False
            .SourceConnectionFile = _
            "C:\Users\fcany\Documents\Mes sources de données\REPORT TEST REPORTING CASSE 2015 SEC.odc"
            .ServerCredentialsMethod = xlCredentialsMethodIntegrated
            .AlwaysUseConnectionFile = False
            .ServerFillColor = False
            .ServerFontStyle = False
            .ServerNumberFormat = False
            .ServerTextColor = False
        End With

  2. #2
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 568
    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 568
    Par défaut
    Bonjour

    Il me paraitrait plus judicieux de créer des requêtes sur la table que de diviser une table en plusieurs tables : cela évitera la maintenance du découpage...

    Je n'ai pas bien saisi ce que tu cherches à faire et notamment s'il y avait un lien entre l'utilisateur et la source à laquelle il accède.

    Sauf erreur, si un classeur contient plusieurs TCD basés sur des tables ou vues différentes, il y a autant de connexions dans le classeur que de sources.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 28
    Par défaut
    D'abord merci de ta réponse.

    Je vais tenter d'être plus explicite. Alors en réalité je dois maintenir un reporting financier que je communique via Excel. Or le traitement de mes données se fait sur ACCESS. Je vise à minimiser l'utilisation d'Excel afin qu'il me serve uniquement à fournir mes TCD. De plus les bases étant lourde je cherche une solution pour alléger mes classeurs Excel. C'est pour cette raison que j'ai opté pour une division de ma base en 3 tables (SEC FRAIS GEL). Si il existe une meilleure solution je suis à l'écoute .

    Mon objectif est d'être capable via des boutons macro de trier mes données SEC FRAIS ou GEL. Je ne suis pas expert en VBA et je me disait que la solution de modification de la connexion était la plus simple. Je cherche alors une solution permettant de modifier ma connexion par un bouton afin de mettre à jour mes TCD pour n'importe quel utilisateurs d'un autre PC ayant accès au réseau ou se trouve la base ACCESS.

    N’hésite pas à me dire si il manque des informations dans ma demande.

  4. #4
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 568
    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 568
    Par défaut
    Bonjour

    Comme je le disais, une simple requête par catégorie (SEC, FRAIS, GEL) ou mieux une seule requête paramétrée où on choisit la catégorie, serait plus adapté qu"un découpage en plusieurs tables qu'il faut refaire à chaque évolution des données.

    Si les utilisateurs peuvent voir chacune des catégories dans le TCD, il vaut mieux pointer sur la table d'origine et mettre un segment catégorie dans Excel (segments à partir de 2010).

    Le TCD doit être basé sur la table ou requête sans rapatrier les données détaillées dans Excel.

    A noter que si plusieurs TCD utilisent la même source, il n'y aura qu'un cache dans le classeur Excel alors que dans le cas contraire il y en a autant que de sources, ce qui alourdit le classeur.

    Bidouiller les connexions ne me parait pas une bonne piste.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 28
    Par défaut
    Le découpage ne pose aucun problème dans la mesure ou une macro me permet de créer la table découpé sans aucunes manipulations. J'ai un code qui fonctionne mais fonctionnera t'il sur n'importe quel poste ...

    Voici mon code:

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    Sub Macro1()
    '
    ' Macro1 Macro
    '
     
    '
        With ActiveWorkbook.Connections("REPORT TEST1").OLEDBConnection
            .CommandText = Array("REPORTING CASSE 2015 SEC")
            .CommandType = xlCmdTable
            .Connection = Array( _
            "OLEDB;Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=T:\Itmaf\Appros-Flux\5-Reporting\REPORTING CDG\TEST\TEST REPORT.accd" _
            , _
            "b;Mode=Share Deny Write;Extended Properties="""";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Engine Type=6;J" _
            , _
            "et OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database" _
            , _
            " Password="""";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=Fals" _
            , _
            "e;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False;Jet OLEDB:Support Complex Data=False" _
            )
        End With
         ActiveWorkbook.RefreshAll
    End Sub
    Sub Macro2()
    '
    ' Macro2 Macro
    '
     
    '
        With ActiveWorkbook.Connections("REPORT TEST1").OLEDBConnection
            .CommandText = Array("REPORTING CASSE 2015 FRAIS")
            .CommandType = xlCmdTable
            .Connection = Array( _
            "OLEDB;Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=T:\Itmaf\Appros-Flux\5-Reporting\REPORTING CDG\TEST\TEST REPORT.accd" _
            , _
            "b;Mode=Share Deny Write;Extended Properties="""";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Engine Type=6;J" _
            , _
            "et OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database" _
            , _
            " Password="""";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=Fals" _
            , _
            "e;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False;Jet OLEDB:Support Complex Data=False" _
            )
        End With
         ActiveWorkbook.RefreshAll
    End Sub
    Sub Macro3()
    '
    ' Macro3 Macro
    '
     
    '
        With ActiveWorkbook.Connections("REPORT TEST1").OLEDBConnection
            .CommandText = Array("REPORTING CASSE 2015 NON ALIM")
            .CommandType = xlCmdTable
            .Connection = Array( _
            "OLEDB;Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=T:\Itmaf\Appros-Flux\5-Reporting\REPORTING CDG\TEST\TEST REPORT.accd" _
            , _
            "b;Mode=Share Deny Write;Extended Properties="""";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Engine Type=6;J" _
            , _
            "et OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database" _
            , _
            " Password="""";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=Fals" _
            , _
            "e;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False;Jet OLEDB:Support Complex Data=False" _
            )
        End With
         ActiveWorkbook.RefreshAll
    End Sub

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    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
    26
    27
     
    Sub test()
    Macro1 "T:\Itmaf\Appros-Flux\5-Reporting\REPORTING CDG\TEST\TEST REPORT.accd", "REPORTING CASSE 2015 SEC"
    End Sub
    Sub Macro1(DB As String, MyArray As String)
    '
    ' Macro1 Macro
    '
     
    '
        With ActiveWorkbook.Connections("REPORT TEST1").OLEDBConnection
            .CommandText = Array(MyArray)
            .CommandType = xlCmdTable
            .Connection = Array( _
            "OLEDB;Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=" &  db _
            , _
            "b;Mode=Share Deny Write;Extended Properties="""";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Engine Type=6;J" _
            , _
            "et OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database" _
            , _
            " Password="""";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=Fals" _
            , _
            "e;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False;Jet OLEDB:Support Complex Data=False" _
            )
        End With
         ActiveWorkbook.RefreshAll
    End Sub

Discussions similaires

  1. [XL-2003] VBA : Macro pour modifier source externe de plusieurs TCD
    Par McQwark dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/11/2013, 12h15
  2. Réponses: 3
    Dernier message: 30/05/2008, 14h35
  3. Comment modifier l'encodage des fichiers sources ?
    Par ChPr dans le forum NetBeans
    Réponses: 2
    Dernier message: 01/05/2007, 21h16
  4. modifier une connexion dans un lot dts
    Par zimdim dans le forum Langage SQL
    Réponses: 1
    Dernier message: 03/01/2006, 11h39
  5. Modifier une partie de la source
    Par Sékiltoyai dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 29/10/2004, 21h52

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