OVH Cloud OVH Cloud

Chemin UNC et Maps

2 réponses
Avatar
Snif
Bonjour à tous

J'ai environ 650 fichiers *.xl? dans une structure arborescente assez
complexe du réseau. Certains font référence à d'autres par le biais d'un
chemin en "p:\...", d'autre font la même chose mais par le chemin UNC de p:
(p: est un map de \\monServeur\.....").

Il faut maintenant que je passe tous ces fichiers sur un autre serveur
(\\monDeuxiemeServeur\.....). Pas de pbme pour ceux qui font référence à
"p:" car il suffit que je re-map "p:" sur "\\monDeuxiemeServeur\.....". Mais
pour ceux qui utilisent le chemin UNC du premier serveur, il faut que je les
modifie.
Le pbme est que je ne sais pas, parmi ces 650 fichiers, quels sont ceux qui
utilisent le chemin UNC... Il faut donc que je les ouvre les uns après les
autres pour vérifier les lien dans les formules et le chaines de caractères
utilisées dans les codes VBA ;-(650 fichiers ça risque d'être un peu
long...).

Je cherche donc un code VB qui me permettrait de repérer quels sont les
fichiers qui utilisent la chaine de caractère "\\monServeur".

Avez-vous un début de solution à me proposer ?

Je vous remercie d'avance

Snif

2 réponses

Avatar
Ange Ounis
Avez-vous un début de solution à me proposer ?


Le code de mise à jour d'un classeur pourrait être qqchose comme ça (en
supposant que tu utilises Excel 2000 ou + récent à cause des fonctions Split et
Join) :

'''''''''''''''''''
Sub essai()
Dim LeClasseur As String
LeClasseur = "D:LeDossierUnClasseur.xls"
CorrigeLeFichier LeClasseur
End Sub

Sub CorrigeLeFichier(Classeur As String)
Dim S, Arr, cell As Range, Wbk As Workbook, sht As Worksheet
Dim VBComp As Variant, VBComps As Variant

Set Wbk = Workbooks.Open(Classeur)

For Each sht In Wbk.Sheets
For Each cell In sht.UsedRange
If cell.HasFormula Then
Arr = Split(cell.Formula, "MonServeur")
If UBound(Arr) <> 0 Then
cell.Formula = Join(Arr, "P:")
End If
End If
Next cell
Next sht

Set VBComps = Wbk.VBProject.VBComponents
For Each VBComp In VBComps
With VBComp.CodeModule
If .CountOfLines > 0 Then
S = .Lines(1, .CountOfLines)
MsgBox S
Arr = Split(S, "MonServeur")
If UBound(Arr) <> 0 Then
S = Join(Arr, "P:")
End If
.DeleteLines 1, .CountOfLines
.AddFromString S
End If
End With
Next VBComp

Wbk.Close True

End Sub
'''''''''''''''''''

Reste, en fonction de l'organisation du classement de tes 650 fichiers dans la
"structure arborescente" dont tu parles, à écrire une procédure pour aller les
chercher un par un pour passer leur nom et chemin complet à la procédure proposée.

----------
Ange Ounis
----------

Bonjour à tous

J'ai environ 650 fichiers *.xl? dans une structure arborescente assez
complexe du réseau. Certains font référence à d'autres par le biais d'un
chemin en "p:...", d'autre font la même chose mais par le chemin UNC de p:
(p: est un map de monServeur.....").

Il faut maintenant que je passe tous ces fichiers sur un autre serveur
(monDeuxiemeServeur.....). Pas de pbme pour ceux qui font référence à
"p:" car il suffit que je re-map "p:" sur "monDeuxiemeServeur.....". Mais
pour ceux qui utilisent le chemin UNC du premier serveur, il faut que je les
modifie.
Le pbme est que je ne sais pas, parmi ces 650 fichiers, quels sont ceux qui
utilisent le chemin UNC... Il faut donc que je les ouvre les uns après les
autres pour vérifier les lien dans les formules et le chaines de caractères
utilisées dans les codes VBA ;-(650 fichiers ça risque d'être un peu
long...).

Je cherche donc un code VB qui me permettrait de repérer quels sont les
fichiers qui utilisent la chaine de caractère "monServeur".

Avez-vous un début de solution à me proposer ?

Je vous remercie d'avance

Snif




Avatar
Snif
Génial !

Merci Ange,

J'ai compilé sur le pbme, et j'ai écrit 2 procédures me permettant
d'exporter toutes les feuilles en SYLK et tous les modules de tous les
classeurs. J'ai pu donc faire de la recherche sur des fichiers txt avec
FIND. Je sais donc quels sont les fichiers à modifier.
Ta procédure va me permettre de les corriger automatiquement...

Merci encore

Snif
"Ange Ounis" a écrit dans le message news:

Avez-vous un début de solution à me proposer ?


Le code de mise à jour d'un classeur pourrait être qqchose comme ça (en
supposant que tu utilises Excel 2000 ou + récent à cause des fonctions
Split et

Join) :

'''''''''''''''''''
Sub essai()
Dim LeClasseur As String
LeClasseur = "D:LeDossierUnClasseur.xls"
CorrigeLeFichier LeClasseur
End Sub

Sub CorrigeLeFichier(Classeur As String)
Dim S, Arr, cell As Range, Wbk As Workbook, sht As Worksheet
Dim VBComp As Variant, VBComps As Variant

Set Wbk = Workbooks.Open(Classeur)

For Each sht In Wbk.Sheets
For Each cell In sht.UsedRange
If cell.HasFormula Then
Arr = Split(cell.Formula, "MonServeur")
If UBound(Arr) <> 0 Then
cell.Formula = Join(Arr, "P:")
End If
End If
Next cell
Next sht

Set VBComps = Wbk.VBProject.VBComponents
For Each VBComp In VBComps
With VBComp.CodeModule
If .CountOfLines > 0 Then
S = .Lines(1, .CountOfLines)
MsgBox S
Arr = Split(S, "MonServeur")
If UBound(Arr) <> 0 Then
S = Join(Arr, "P:")
End If
.DeleteLines 1, .CountOfLines
.AddFromString S
End If
End With
Next VBComp

Wbk.Close True

End Sub
'''''''''''''''''''

Reste, en fonction de l'organisation du classement de tes 650 fichiers
dans la

"structure arborescente" dont tu parles, à écrire une procédure pour aller
les

chercher un par un pour passer leur nom et chemin complet à la procédure
proposée.


----------
Ange Ounis
----------

Bonjour à tous

J'ai environ 650 fichiers *.xl? dans une structure arborescente assez
complexe du réseau. Certains font référence à d'autres par le biais d'un
chemin en "p:...", d'autre font la même chose mais par le chemin UNC de
p:


(p: est un map de monServeur.....").

Il faut maintenant que je passe tous ces fichiers sur un autre serveur
(monDeuxiemeServeur.....). Pas de pbme pour ceux qui font référence à
"p:" car il suffit que je re-map "p:" sur "monDeuxiemeServeur.....".
Mais


pour ceux qui utilisent le chemin UNC du premier serveur, il faut que je
les


modifie.
Le pbme est que je ne sais pas, parmi ces 650 fichiers, quels sont ceux
qui


utilisent le chemin UNC... Il faut donc que je les ouvre les uns après
les


autres pour vérifier les lien dans les formules et le chaines de
caractères


utilisées dans les codes VBA ;-(650 fichiers ça risque d'être un peu
long...).

Je cherche donc un code VB qui me permettrait de repérer quels sont les
fichiers qui utilisent la chaine de caractère "monServeur".

Avez-vous un début de solution à me proposer ?

Je vous remercie d'avance

Snif