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 :

Mise à jour liaison


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Avril 2014
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Contrôleur de Gestion
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Avril 2014
    Messages : 45
    Par défaut
    Bonjour à tous,

    Je travaille sur 4 documents : ML1-bud, ML1_support, ML2_bud, et enfin ML2_support.
    Mes documents sont liés entre eux. Dans ML1_bud, il y a des formules appelant les trois autres fichiers...

    Avant cela, ML1_bud était uniquement lié au ML1_support (les formules sont toujours dans bud, jamais dans support. les fichiers supports sont des fichiers où l'on retrouve les paramètres).

    Pour mettre à jour les liaisons de manière automatique, j'avais créé une macro qui assurait la liaison entre _support et _bud.
    La macro avait pour but (je vous la met ci dessous) de mettre à jour les liaisons automatiquement (avec un bouton d'action) dès lors que les fichiers étaient déplacés vers un nouveau répertoire ou qu'ils étaient renommés.

    Seulemement, nouvelle difficulté, là ML1_support, ML2_bud et ML2_support sont les sources de formules dans une feuille du ML1_bud.
    Maintenant : ic, la mise à jour des liaisons, même manuelle, bug... Auriez-vous une idée d'où cela peut provenir ?
    Je n'ai pas modifié ma macro... je veux d'abord voir si cela est réalisable manuellement.

    Je ne suis pas sûre d'avoir été claire... Si vous avez des questions, n'hésitez pas.
    Vous remerciant de votre aide,

    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    Dim Nom_bud As String
    Dim Nom_support As String
     
    Nom_bud = ActiveWorkbook.Name 'récupère le nom du fichier bud
     
    'décompose le nom du fichier bud en plusieurs morceaux
    Dim str() As String
    Dim i As Integer
     
    str = Split(Nom_bud, "_")
    For i = 0 To UBound(str)
        'MsgBox Replace(str(i), ".xlsm", "")
    Next i
     
    'création du nom du fichier support à partir de la décomposition précédente
    Nom_support = str(0) & "_support.xlsm"
     
    'décomposition successive de la formule à remplacer
    Dim formule As String
    Dim strf() As String
    Dim j As Integer
     
    formule = Sheets("F&B").Range("C2").FormulaR1C1Local 'récupère la formule d'une cellule à remplacer
    strf = Split(formule, "]")
    For j = 0 To UBound(strf)
        'MsgBox Replace(strf(j), "", "")
    Next j
     
    Dim formule_corrige As String 'rajoute la parenthèse de fin
    formule_corrige = strf(0) & "]"
     
    Dim strfc() As String ' enlever le ' avant le :C/
    Dim k As Integer
     
    strfc = Split(formule_corrige, "'")
    For k = 0 To UBound(strfc)
        'MsgBox Replace(strfc(k), ".xlsm]", "")
    Next k
     
    Dim formule_a_remplacer As String 'détermine la chaine de caractère à remplacer
    formule_a_remplacer = strfc(1)
     
    'détermine la chaine de caractère qui remplace
    Dim remplace As String
     
    remplace = "[" & Nom_support & "]"
     
    ' vérifie avec l'utilisateur les remplacements
    If MsgBox("Le texte à remplacer est : " & Chr(10) & formule_a_remplacer & Chr(10) _
    & "Le texte qui remplace est :" & Chr(10) & remplace & Chr(10) & Chr(10) _
    & "Veuillez confirmer sur OK ou ANNULER.", vbOKCancel, "REMPLACE") = vbOK Then
     
        'recherche les valeurs dans le classeur et remplace
     
       Dim feuil As Worksheet
     
        For Each feuil In ThisWorkbook.Worksheets
            feuil.Activate
             If feuil.Name = "SYNTHESIS P&L GROUP" Then
                'Call liaison_synthese_groupe
            Else
                feuil.Cells.Replace What:=formule_a_remplacer, Replacement:=remplace
            End If
        Next feuil
     
        MsgBox ("La liaison des formules a été réalisée avec succès.")
        End If
    Else
        MsgBox ("Vous avez annuler le changement des formules.")
    End If
     
    End Sub
     
    Sub Mettre_a_jour_liaison()
     
    Call DeproFeuilles
     
    Call Liaison
     
    Call ProtegeFeuilles
     
    Call Masque_commandes_bud
     
    End Sub
    Y a-t-il une bonne âme pour m'aider svp ?

    Cdlt

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Bonjour, bonjour !

    Comme c'est visuel, il y a juste à comparer une liaison manuelle correcte avec une créée par code …

    __________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

  3. #3
    Membre averti
    Femme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Avril 2014
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Contrôleur de Gestion
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Avril 2014
    Messages : 45
    Par défaut
    Bonjour
    D'abord, merci de votre réponse.
    En fait, même quand je fais une mise à jour des liaisons manuelles, ça ne fonctionne pas.
    Excel me demande d'ouvrir le fichier X fois (correspondant aux nombres de liaisons à mettre à jour) alors qu'il est déjà ouvert.
    Le ic : dans certaines de mes formules je fais référence parfois à 3 fichiers différents...
    Est-ce de là que viendrais le problème ?
    Quand j'ai une seule référence par formule, je n'ai pas ce souci.

    Avant de faire une macro pour la mise à jour de ces liaisons, je voudrais pouvoir le réaliser en manuel.
    Mais cela ne fonctionne pas...

    Cdlt

Discussions similaires

  1. [XL-2007] Mise à jour liaisons entre 2 classeurs
    Par XceSs dans le forum Excel
    Réponses: 3
    Dernier message: 07/10/2010, 04h19
  2. [AC-2003] Ouverture Excel : mise à jour liaison impossible
    Par yael44 dans le forum VBA Access
    Réponses: 1
    Dernier message: 29/07/2010, 13h20
  3. [Toutes versions] VBA Fenetre Mise à jour.Liaisons avec autre classeur
    Par vivi4561 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/09/2009, 10h30
  4. Mise à jour liaisons Word
    Par Nelieru dans le forum Word
    Réponses: 8
    Dernier message: 18/06/2008, 13h18
  5. Mise à jour liaison de fichier
    Par melodyyy dans le forum Général VBA
    Réponses: 7
    Dernier message: 25/11/2006, 13h48

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