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 :

Détruire une connexion excel en VBA qui refuse de disparaitre complètement [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2018
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Philippines

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2018
    Messages : 73
    Par défaut Détruire une connexion excel en VBA qui refuse de disparaitre complètement
    Bonjour, (code en fin de texte)

    J'ai un probleme pour detruire des connexions Excel apres chargement des données dans mon classeur maitre dans des feuilles distinctes.
    Les fichiers sources sont des CSV dont j'ai réaliser le chargement par l'enregistreur de macro.

    je voudrais :
    1 - charger les sources dans des feuilles distinctes (ça fonctionne)
    2 - les renommer immédiatement les feuilles (ça fonctionne)
    3 - éliminer les connexions pour les rendre disponibles ( LA EST LE PROBLEME, en suivant pas à pas je vois bien que ma boucle fonctionne mais il n'y a aucune déconnection effective !!!!)
    4 - faire mes traitements
    5 - detruire mes feuilles

    Quand je relance mon traitement, Excel me dis des le premier fichier que la connexion est déjà existante ???

    Si je regarde la fenetre statut je vois bien les 2 connexions
    Si j'ouvre le pop up des connexion existante .... il n'y a rien

    Pouvez vous me dire où se trouve mon erreur ?

    D'avance merci

    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
    70
    71
    Sub Transport()
    Dim Num_Feuille                 As String
    Dim cn                          As WorkbookConnection
    ' ============================================================== chargement des données sources
    '--------------------------------------------------------------- chargement Fournisseur
        ActiveWorkbook.Queries.Add Name:="request_sql_15", Formula:= _
            "let" & Chr(13) & "" & Chr(10) & "    Source = Csv.Document(File.Contents(""E:\OneDrive\Mister-gadgets\000000 Developpement\Fichiers source\Fichiers import site\request_sql_15.csv""),[Delimiter="";"", Columns=5, Encoding=1252, QuoteStyle=QuoteStyle.None])," & Chr(13) & "" & Chr(10) & "    #""En-têtes promus"" = Table.PromoteHeaders(Source, [PromoteAllScalars=true])," & Chr(13) & "" & Chr(10) & "    #""Type modifié"" = Table.TransformColumnTypes(#""E" & _
            "n-têtes promus"",{{""id_supplier"", Int64.Type}, {""name"", type text}, {""date_add"", type datetime}, {""date_upd"", type datetime}, {""active"", Int64.Type}})" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & "    #""Type modifié"""
        ActiveWorkbook.Worksheets.Add
        With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
            "OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=request_sql_15;Extended Properties=""""" _
            , Destination:=Range("$A$1")).QueryTable
            .CommandType = xlCmdSql
            .CommandText = Array("SELECT * FROM [request_sql_15]")
            .RowNumbers = False
            .FillAdjacentFormulas = False
            .PreserveFormatting = True
            .RefreshOnFileOpen = False
            .BackgroundQuery = True
            .RefreshStyle = xlInsertDeleteCells
            .SavePassword = False
            .SaveData = True
            .AdjustColumnWidth = True
            .RefreshPeriod = 0
            .PreserveColumnInfo = True
            .ListObject.DisplayName = "request_sql_15"
            .Refresh BackgroundQuery:=False
        End With
    '-------------------------------------------------------------- affectation nom feuille
        Num_Feuille = ActiveSheet.Name
        Sheets(Num_Feuille).Name = "Fournisseur"
    '-----------------------------------------------------------------Transporteur
        ActiveWorkbook.Queries.Add Name:="request_sql_16", Formula:= _
            "let" & Chr(13) & "" & Chr(10) & "    Source = Csv.Document(File.Contents(""E:\OneDrive\Mister-gadgets\000000 Developpement\Fichiers source\Fichiers import site\request_sql_16.csv""),[Delimiter="";"", Columns=25, Encoding=1252, QuoteStyle=QuoteStyle.None])," & Chr(13) & "" & Chr(10) & "    #""En-têtes promus"" = Table.PromoteHeaders(Source, [PromoteAllScalars=true])," & Chr(13) & "" & Chr(10) & "    #""Type modifié"" = Table.TransformColumnTypes(#""" & _
            "En-têtes promus"",{{""id_carrier"", Int64.Type}, {""id_reference"", Int64.Type}, {""id_tax_rules_group"", Int64.Type}, {""name"", type text}, {""url"", type text}, {""active"", Int64.Type}, {""deleted"", Int64.Type}, {""shipping_handling"", Int64.Type}, {""range_behavior"", Int64.Type}, {""is_module"", Int64.Type}, {""is_free"", Int64.Type}, {""shipping_external"", " & _
            "Int64.Type}, {""need_range"", Int64.Type}, {""external_module_name"", type text}, {""shipping_method"", Int64.Type}, {""position"", Int64.Type}, {""max_width"", Int64.Type}, {""max_height"", Int64.Type}, {""max_depth"", Int64.Type}, {""max_weight"", type text}, {""grade"", Int64.Type}, {""date_import"", type datetime}, {""id_shop"", Int64.Type}, {""id_lang"", Int64." & _
            "Type}, {""delay"", type text}})" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & "    #""Type modifié"""
        ActiveWorkbook.Worksheets.Add
        With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
            "OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=request_sql_16;Extended Properties=""""" _
            , Destination:=Range("$A$1")).QueryTable
            .CommandType = xlCmdSql
            .CommandText = Array("SELECT * FROM [request_sql_16]")
            .RowNumbers = False
            .FillAdjacentFormulas = False
            .PreserveFormatting = True
            .RefreshOnFileOpen = False
            .BackgroundQuery = True
            .RefreshStyle = xlInsertDeleteCells
            .SavePassword = False
            .SaveData = True
            .AdjustColumnWidth = True
            .RefreshPeriod = 0
            .PreserveColumnInfo = True
            .ListObject.DisplayName = "request_sql_16"
            .Refresh BackgroundQuery:=False
        End With
    '-------------------------------------------------------------- affectation nom feuille
        Num_Feuille = ActiveSheet.Name
        Sheets(Num_Feuille).Name = "Transporteur"
    '----------------------------------------------------------------- destruction des connexions
        For Each cn In ActiveWorkbook.Connections
           cn.Delete
        Next cn
    '==============================================Traitement
    '----------------------------------------------------------------- destruction des feuilles de travail
        Sheets(F_Fournisseur).Select
        ActiveWindow.SelectedSheets.Delete
        Sheets(F_Transporteur).Select
        ActiveWindow.SelectedSheets.Delete
    End Sub

  2. #2
    Membre émérite Avatar de Alex020181
    Homme Profil pro
    Prestataire informatique développeur d'application Excel, Access, VBA
    Inscrit en
    Juin 2012
    Messages
    601
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Prestataire informatique développeur d'application Excel, Access, VBA

    Informations forums :
    Inscription : Juin 2012
    Messages : 601
    Par défaut
    et avec ste cn = nothing ?

  3. #3
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2018
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Philippines

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2018
    Messages : 73
    Par défaut
    Citation Envoyé par Alex020181 Voir le message
    et avec ste cn = nothing ?
    Désolé mais je ne comprends pas
    j ai remplacer cn.Delete par cn = nothing et j'ai une erreur de compilation "utilisation in correct de l'objet"

    J ai rajouté un SET cn = nothing la compliation passe mais pas de changement meme resultats les connexions existent toujours

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut

    Ceci?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      Do While ThisWorkbook.Queries.Count > 0
        ThisWorkbook.Queries(1).Delete
      Loop



    Set cn = Nothing est utile pour vider la variable objet en VBA, mais ça n'impacte pas l'objet lui-même. c'est juste une vidange de la mémoire qui n'a aucune incidence sur le classeur et ses objets.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  5. #5
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2018
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Philippines

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2018
    Messages : 73
    Par défaut
    Citation Envoyé par Pierre Fauconnier Voir le message
    [...]
    désolé de repondre tardivement mais je n'étais pas disponible.

    Comme toujours MERCI PIERRE tu es toujours d'une grande aide et la reponse semble tellement évidente.

    Je suppose que c'est valable qu'elle que soit la connexion ou le type de fichier, car j'ai des csv mais aussi des xml a gérer les uns apres les autres et des limitations de mémoires disponibles donc je dois faire le nettoyages en cours de route.

    Anecdote ça me rajeunit, quand j'étais programmeur il y a +30 ans sur un mini ordinateur Wang 2000 en basic et que je développais une appli pour des ordi de bureau en réseau sur le wang avec une partition de 24 k et que j'ai du charger en overlay les morceaux de programmes et les données , oui les p'tit jeunots 24k de memoire disponible et moi en tant que developpeur j'avais droit a 28 k lollll

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par Michel-philippines Voir le message
    [...]
    Je suppose que c'est valable qu'elle que soit la connexion ou le type de fichier, car j'ai des csv mais aussi des xml a gérer les uns apres les autres et des limitations de mémoires disponibles donc je dois faire le nettoyages en cours de route.[...]
    Oui, ça fonctionne pour les connexions du classeur, le type de données auxquelles on se connecte n'entre pas en ligne de compte ici.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  7. #7
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2018
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Philippines

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2018
    Messages : 73
    Par défaut MERCI A TOUS
    Merci beaucoup

  8. #8
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 575
    Par défaut
    Bonjour Michel et bonjour Pierre,

    Il pourrait être judicieux de rechercher la connexion à supprimer au cas où il y en aurait plusieurs !
    Name:="request_sql_15"

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut Thumb

    Au point 3 de la question initiale, Michel demande de supprimer les connexions, pas une connexion particulière, c'est pourquoi j'ai proposé une boucle (que je viens de modifier dans ma réponse)
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  10. #10
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 575
    Par défaut
    C'est vrai tu as raison.

  11. #11
    Membre émérite
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 913
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 913
    Par défaut
    Bonjour,
    Quel est l'avantage de Connexion.Delete sur Connexion.Close ?

  12. #12
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    Connection.Close ferme une connexion ouverte, mais laisse la connexion disponible pour un Refresh.

    Connection.Delete supprime la connexion, ne laissant que les données récupérées au dernier Refresh. Ca permet de transmettre le classeur sans connexions, et donc sans laisser de traces de cette connexion (notamment le mot de passe éventuel, la chaine de connexion, etc...)
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  13. #13
    Membre émérite
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 913
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 913
    Par défaut
    OK, merci.
    Alors donc, on peut taper Delete sans Close ?

  14. #14
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Les deux ne sont pas liés. Delete supprime la connexion qui est un élément de la collection des connexions. Close ferme le canal entre Excel et les données externes.

    Dans une connexion de classeur, la connexion est ouverte le temps du Refresh. Donc dans le code donné initialement, la connexion est fermée au moment de sa suppression, puisque la mise à jour en arrière plan est désactivée. Le code attend donc la fin de mise à jour puis ferme la connexion avant que celle-ci soit supprimée par Delete. On n'est pas ici dans le cas d'une connexion de type ADODB gérée par le code, et dans ce cas, la connexion adodb ne serait pas présente dans la collection des connexions du classeur et on ne saurait donc pas lui appliquer la méthode Delete...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  15. #15
    Membre émérite
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 913
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 913
    Par défaut
    Merci, en effet c'était bien une expérience sur ADODB qui me faisait poser la question.
    Si ça s'appliquait ça aurait été dommage de le louper, bon raté.

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

Discussions similaires

  1. Ouvrir une Connexion SQL depuis VBA Excel
    Par manufer dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 22/06/2017, 12h06
  2. [XL-2010] créer une connexion excel vers Sybase via une requête sous VBA
    Par Freudsw dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 01/10/2015, 17h12
  3. Comment protéger une feuille excel en vba avec des paramètres?
    Par Subkill dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 27/03/2007, 17h21
  4. Comment protéger une feuille excel en vba avec des paramètres?
    Par Subkill dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 27/03/2007, 17h20
  5. Réponses: 9
    Dernier message: 19/02/2007, 20h33

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