XL 2016 Rompre les liens avec les requêtes et autres liens

  • Initiateur de la discussion Initiateur de la discussion ZZ59264
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

ZZ59264

XLDnaute Occasionnel
Bonjour à tous,

Suite au code fourni par Job75 que je salue au passage, pourriez vous regarder le code proposé car en l'utilisant les liens avec mes requêtes est toujours présent et il y a également un lien créer avec le fichier source :

VB:
Sub Creer_Fichiers_Classes()
Dim F As Worksheet, classe$, P As Range, i As Variant, s, chemin$, c As Range, w As Worksheet, o As Object, nom As Name, sup As Boolean
'---préparation---
Set F = Feuil1 'CodeName
classe = F.DrawingObjects(Application.Caller).Text 'les boutons doivent avoir des noms différents
Set P = F.ListObjects(1).Range 'tableau structuré
i = Application.Match(classe, P.Columns(3), 0) 'EQUIV
If IsError(i) Then MsgBox classe & " non trouvée !", 48: Exit Sub
Set P = P(i, 1).Resize(Application.CountIf(P.Columns(3), classe), P.Columns.Count)
If Application.CountIf(P.Columns(5), "OK") <> P.Rows.Count Then MsgBox "Il faut que tous les onglets de " & classe & " soient validés par OK...": Exit Sub
'---création des dossiers s'ils n'existent pas---
s = Split(P(1, 4), "\")
chemin = s(0) & "\" 'lecteur
For i = 1 To UBound(s)
    chemin = chemin & s(i) & "\"
    If Dir(chemin, vbDirectory) = "" Then MkDir chemin
Next i
'---création des fichiers---
Application.ScreenUpdating = False
Application.DisplayAlerts = False 'si un fichier a déjà été créé
For Each c In P.Columns(1).Cells
    Set w = ThisWorkbook.Sheets(CStr(c))
    w.Visible = xlSheetVisible 'si la feuille est masquée
    Application.EnableEvents = False 'désactive les évènements
    If c(1, 2) <> c(0, 2) Then 'compare avec le nom de fichier au-dessus
        w.Copy 'crée un nouveau document
    Else
        w.Copy After:=ActiveSheet 'ajoute la feuille copiée
    End If
    Application.EnableEvents = True 'réactive les évènements
    For Each o In ActiveSheet.PivotTables 'TCD
        With o.TableRange2
            s = .Value 'mémorise les valeurs
            .ClearContents 'efface le TCD
            .Value = s 'restitue les valeurs
        End With
    Next o
    For Each o In ActiveSheet.ListObjects 'tableaux structurés
        o.Unlist 'convertit en plage
    Next o
    Range(w.UsedRange.Address) = w.UsedRange.Value 'supprime les formules
    If c(1, 2) <> c(2, 2) Then 'compare avec le nom de fichier au-dessous
    
On Error Resume Next
 For Each nom In ActiveWorkbook.Names
      If PréfixeFeuille(nom.Name) <> PréfixeFeuille(Mid$(nom.RefersTo, 2)) Then nom.Delete
 Next nom
 On Error GoTo 0
    
    
        Sheets(1).Select '1ère feuille
        ActiveWorkbook.SaveAs chemin & c(1, 2), 51 'enregistre avec l'extension .xlsx
        ActiveWorkbook.Close False 'ferme le document
    End If
Next c
End Sub

Merci d'avance,

Cordialement,
 
RE

Effectivement j'ai vais mal vu le lien entre la requête et l'onglet caché

A partir du moment où le TCD est basé sur une requête (et non sur le tableau structuré affiché à ses côtés) , le déplacer n'en change pas la source : c'est son cache.

Il faudrait baser le TCD sur le tableau structuré issu de la requête et non sur la requête, et déconnecter celui-ci comme expliqué plus haut.

Mais tout cela parait inutilement compliqué d'autant que la requête ne sert strictement à rien ici car elle ne fait que dupliquer le tableau de l'onglet BASE TCD REQUETE...
 
Dernière édition:
Bonsoir Job75,

Merci pour votre retour,

N'ayant pas Excel 2019 et que le problème se pose à moi, je vais faire des recherches sur le net pour trouver comment supprimer la création de ces liaisons : j'ai trouvé cette macro qui supprime les liaisons mais je ne serais pas l'adapter à mon code VBA :

VB:
Sub SupprimerLiaisons()
Dim Liaisons As Variant
Liaisons = ActiveWorkbook.LinkSources(Type:=xlLinkTypeExcelLinks)
If IsEmpty(Liaisons) = True Then Exit Sub
For LiaisonsTrouvee = 1 To UBound(Liaisons)
ActiveWorkbook.BreakLink _
    Name:=Liaisons(LiaisonsTrouvee), _
    Type:=xlLinkTypeExcelLinks
Next LiaisonsTrouvee
End Sub

Cordialement,
 
RE

Effectivement j'ai vais mal vu le lien entre la requête et l'onglet caché

A partir du moment où le TCD est basé sur une requête (et non sur le tableau structuré affiché à ses côtés) , le déplacer n'en change pas la source : c'est son cache.

Il faudrait baser le TCD sur le tableau structuré issu de la requête et non sur la requête, et déconnecter celui-ci comme expliqué plus haut.

Mais tout cela parait inutilement compliqué...
J'avoue c'est compliqué mais en fait c'est pour éviter qu'on est accès a mon fichier de travail personnel,

Le plus simple aurait été de le laisser en accès pour tous, et effectivement ce serait bien plus simple !

Il ne me manque plus que la suppression de ces liaisons et ce sera bon, je vas tenter de chercher une solution avec la procédure 'BreakLink" adapté au code proposé par Job75,

Par ailleurs la solution de suppression de la connexion requête proposée est parfaite et réponds a mes attentes 🙂

Cordialement,
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
XL 2021 VBA excel
Réponses
4
Affichages
45
  • Question Question
Microsoft 365 Export données
Réponses
4
Affichages
482
Réponses
3
Affichages
569
Retour