Code VBA pour copier des feuilles de calcul contenant des plages nommées de la source au classeur de destination
-
28-10-2019 - |
Question
J'ai 2 classeurs. Un classeur source et un classeur de destination. Ils sont complètement les mêmes, sauf pour 1 feuille de calcul qui a le même nom dans les deux mais différentes données (les deux contiennent environ 30 feuilles). Ce que je voulais, c'était copier le reste des feuilles de travail identiques du classeur source au classeur de destination, laissant cette feuille de calcul qui s'engage dans les données.
Fondamentalement, les feuilles de calcul identiques présentes dans le classeur de destination doivent être remplacées par celles du classeur source. Les feuilles de calcul contiennent des formules et des gammes nommées. J'ai réussi à rédiger le code VBA pour copier les feuilles de calcul. Mais puisque les gammes nommées ont une portée du classeur. Les gammes nommées se réfèrent toujours aux emplacements dans les classeurs source. J'ai donc 2 gammes nommées avec le même nom. Quelque chose comme:
'The one already present in the destination workbook (from the worksheet which was replaced)
Name=VaccStart , Refers To =Sheet2!$A$2
'The one due to the copied worksheet.
Name=VaccStart , Refers To =[C:\Users\.....\Source.xls]Sheet2!$A$2
Je veux que les gammes nommées se réfèrent au classeur de destination et non au classeur source lorsque je les copie. Étant donné que toutes les feuilles des deux classeurs sont les mêmes et que je les remplace.
La solution
Un moyen facile de contourner la création de liens par inadver
Capture d'écran pour XL2010
- EDIT .... Liens
- «Changer la source» et choisissez le fichier actuel comme nouvelle source
Autres conseils
Cela modifiera les plages nommées pour supprimer la référence de fichier externe:
Sub ResetNamedRanges()
Dim nm As Name
Dim sRefersTo As String
Dim iLeft As Integer
Dim iRight As Integer
For Each nm In ActiveWorkbook.Names
sRefersTo = nm.RefersTo
iLeft = InStr(sRefersTo, "[")
iRight = InStr(sRefersTo, "]")
If iLeft > 1 And iRight > 0 Then
sRefersTo = Left$(sRefersTo, iLeft - 1) & Mid$(sRefersTo, iRight + 1)
nm.RefersTo = sRefersTo
End If
Next nm
End Sub