OVH Cloud OVH Cloud

ChangeLink / UdapeLink / SourcesLink

1 réponse
Avatar
RV
Bonjour à tous,

Je vais essayer d'être clair dans mes explications de demande d'aide.
J'ai 2 classeurs A et B presque identiques. Mon travail consiste à mettre à
jour un tableau, qui évolue ou dévolue en nombre et contenu de lignes (par
macro), dans le classeur A.
Ce tableau comporte plusieurs noms de plage de cellules. En fin de journée,
le tableau mis à jour, je recopie ce tableau dans le classeur B ( par un
simple copier coller par macro), mais le nom des plages ne suit pas .
Je me suis donc servi de ChangeLink et/ou de .......udapelink.... =
.....sourceslink pour que le classeur B puisse récupérer ces liaisons et se
retrouver autonome, mais sans grand succès. Car le problème est que les
autres feuilles du classeur B, qui font aussi appel à ces noms de plages,
ne reconnaissent pas ces noms une fois intégrés.
Comment faire donc, pour que les noms de plage de cellules suivent le
tableau, s'intrègrent et soient reconnus dans le classeur B.
J'espère ne pas avoie été trop confus dans cette demande d'aide.
Merci.
Cordialement

RV

1 réponse

Avatar
PMO
Bonjour,

Dans la mesure où j'ai bien compris voici 2 approches.
ATTENTION faites l'essai sur des copies de vos classeurs.

APPROCHE 1
Recopie toute une feuille du classeur A dans le classeur B
'**********
Option Explicit
Const CHEMIN As String = "c:b.xls" 'changer le chemin
'_______________________________
Sub PMO_CopieFeuille()
Dim Wsource As Workbook
Dim W As Workbook
Set Wsource = ThisWorkbook
On Error Resume Next
Set W = GetObject(CHEMIN)
If W Is Nothing Then
MsgBox "Le classeur " & CHEMIN & " est introuvable."
Exit Sub
End If
W.Windows(1).Visible = True
'--- Changer le n° ou le nom de Wsource.Sheets(1)----
Wsource.Sheets(1).Copy before:=W.Sheets(1)
Set W = Nothing
End Sub
'**********

APPROCHE 2
1) Récupère tous les noms du classeur où tourne la macro
2) Ouvre le classeur B.xls (adaptez la constante CHEMIN à votre usage)
3) Vérifie si les feuilles référencées dans les noms du classeur source
sont existantes dans le classeur B de destination.
4) Si oui, recrée les noms dans le classeur B (ATTENTION écrasement des noms
synonymes si préexistants)
'**********
Option Explicit
Const CHEMIN As String = "c:b.xls" 'changer le chemin
Type structName
Name As String
Refers As String
ReferSheet As String
End Type
'_______________________________
Sub PMO_ExportNames()
Dim N As Name
Dim T() As structName
Dim A$
Dim i&
Dim x%
Dim S As Worksheet
Dim W As Workbook
Dim bool As Boolean
ReDim T(1 To ThisWorkbook.Names.Count)
For Each N In ThisWorkbook.Names
i& = i& + 1
T(i&).Name = N.Name
T(i&).Refers = N.RefersTo
A$ = T(i&).Refers
x% = InStr(1, A$, "!")
If x% > 0 Then
T(i&).ReferSheet = Mid(A$, 2, x% - 2)
End If
Next N
On Error Resume Next
Set W = GetObject(CHEMIN)
If W Is Nothing Then
MsgBox "Le classeur " & CHEMIN & " est introuvable."
Exit Sub
End If
On Error GoTo Erreur
Application.ScreenUpdating = False
W.Windows(1).Visible = True
For i& = 1 To UBound(T)
bool = False
For Each S In W.Sheets
If T(i&).ReferSheet = "" Then bool = True
If S.Name = T(i&).ReferSheet Then bool = True
If bool Then Exit For
Next S
If Not bool Then
MsgBox "La feuille " & T(i&).ReferSheet & _
" n'existe pas dans le classeur " & W.Name & ""
Error 9
End If
Next i&
For i& = 1 To UBound(T)
W.Names.Add T(i&).Name, T(i&).Refers
Next i&
Erreur:
Application.ScreenUpdating = True
Set W = Nothing
End Sub
'**********

Cordialement.

--
PMO
Patrick Morange



Bonjour à tous,

Je vais essayer d'être clair dans mes explications de demande d'aide.
J'ai 2 classeurs A et B presque identiques. Mon travail consiste à mettre à
jour un tableau, qui évolue ou dévolue en nombre et contenu de lignes (par
macro), dans le classeur A.
Ce tableau comporte plusieurs noms de plage de cellules. En fin de journée,
le tableau mis à jour, je recopie ce tableau dans le classeur B ( par un
simple copier coller par macro), mais le nom des plages ne suit pas .
Je me suis donc servi de ChangeLink et/ou de .......udapelink.... =
......sourceslink pour que le classeur B puisse récupérer ces liaisons et se
retrouver autonome, mais sans grand succès. Car le problème est que les
autres feuilles du classeur B, qui font aussi appel à ces noms de plages,
ne reconnaissent pas ces noms une fois intégrés.
Comment faire donc, pour que les noms de plage de cellules suivent le
tableau, s'intrègrent et soient reconnus dans le classeur B.
J'espère ne pas avoie été trop confus dans cette demande d'aide.
Merci.
Cordialement

RV