OVH Cloud OVH Cloud

PMO

1 réponse
Avatar
RV
Bonjour PMO,

Merci pour cette réponse, je m'en vais l'essayer tout de suite et voir
comment je peux l'adapter à mes besoins...
Car en fait je travaille sur le classeur A et ceux sont mes collègues qui
font l'import du tableau sur leur classeur (B).

Vous dites ...

1) Récupère tous les noms du classeur où tourne la macro ...

et je souhaite l'inverse, qu'elles sont les choses à modifier ( votre code
dépasse mes compétences).

Merci.
Cordialement

RV


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


"RV" a écrit :

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

Je viens juste de m'apercevoir de l'existence de votre fil
n'étant pas constamment branché sur le MPFE.
Il est préferable, pour vos réponses, de rester dans le même
fil (en l'occurence celui du 28/06/05) car j'en suis averti par
une notification du MPFE alors que là... c'est par hasard
que je vous retrouve.

Depuis le temps, avez-vous réussi à obtenir ce que vous vouliez ?
Sinon faites moi signe (dans un des 2 fils).

Cordialement.
---
PMO
Patrick Morange



Bonjour PMO,

Merci pour cette réponse, je m'en vais l'essayer tout de suite et voir
comment je peux l'adapter à mes besoins...
Car en fait je travaille sur le classeur A et ceux sont mes collègues qui
font l'import du tableau sur leur classeur (B).

Vous dites ...

1) Récupère tous les noms du classeur où tourne la macro ...

et je souhaite l'inverse, qu'elles sont les choses à modifier ( votre code
dépasse mes compétences).

Merci.
Cordialement

RV


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