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

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,
 

chris

XLDnaute Barbatruc
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:

ZZ59264

XLDnaute Occasionnel
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,
 

ZZ59264

XLDnaute Occasionnel
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,
 

Discussions similaires

Réponses
4
Affichages
426

Statistiques des forums

Discussions
314 705
Messages
2 112 067
Membres
111 410
dernier inscrit
yomeiome