Microsoft 365 Remplacer des données sans ouvrir les documents

  • Initiateur de la discussion Initiateur de la discussion DavidMM
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

DavidMM

XLDnaute Nouveau
Bonjour,

Y a t il une solution pour remplacer des données sur plusieurs feuilles sans les ouvrir ?

Par exemple changer sur 200 fichiers Excel differentes sans les ouvrir le mot "Porte" par "Issue de secours"

Merci
 
Dernière édition:
Re

Un exemple issu de mes archives
Ici on traite des classeurs *.xlsx
Ici on remplace Chien par Chat et Table par Chaise
Code:
Sub test_replace()
Dim Chemin$, fn$, ws As Worksheet, tablo
Chemin = "C:\Users\STAPLE\Documents\TEST_REPLACE\" 'Changer ici
tablo = Array(Array("Chien", "Chat"), Array("Table", "Chaise"))
fn = Dir(Chemin & "*.xlsx")
Application.ScreenUpdating = False
Do While fn <> ""
    With Workbooks.Open(Chemin & fn)
        For Each ws In .Worksheets
            For Each el In tablo
                ws.Cells.Replace el(0), el(1), xlPart, , True
            Next
        Next
        .Close True
    End With
    fn = Dir
Loop
End Sub
NB: je viens de faire le test sur 5 classeurs
Le remplacement est bien effectué.

A voir/adapter et tester dans ta configuration.


Sinon voir du côté de ADO.
 
Re

Un exemple issu de mes archives
Ici on traite des classeurs *.xlsx
Ici on remplace Chien par Chat et Table par Chaise
Code:
Sub test_replace()
Dim Chemin$, fn$, ws As Worksheet, tablo
Chemin = "C:\Users\STAPLE\Documents\TEST_REPLACE\" 'Changer ici
tablo = Array(Array("Chien", "Chat"), Array("Table", "Chaise"))
fn = Dir(Chemin & "*.xlsx")
Application.ScreenUpdating = False
Do While fn <> ""
    With Workbooks.Open(Chemin & fn)
        For Each ws In .Worksheets
            For Each el In tablo
                ws.Cells.Replace el(0), el(1), xlPart, , True
            Next
        Next
        .Close True
    End With
    fn = Dir
Loop
End Sub
NB: je viens de faire le test sur 5 classeurs
Le remplacement est bien effectué.

A voir/adapter et tester dans ta configuration.


Sinon voir du côté de ADO.
Comment l'incorporer ?
 
Bonsoir,
Avec ado c'est possible si la structure des onglets le permet !

Les fichiers sont dans le même répertoire ?
Les onglets sont connus ?
Et où il faudrait un exemplaire anonymisé!
Fichier dans le même répertoire.
Il y a qu un seul onglet par fichier.

Par exemple, je veux changer
"Securité2" par Sécurité pompier 2"
"Gardien 2 Paris 75 013" par Gardien Alex Paris 75 013"
"Stagiaire 5" par "Agent info Corinne"
"
 

Pièces jointes

Bonsoir @dysorthographie

Y a de l'echo...
Staple à dit:
(message#3)
Sinon voir du côté de ADO.
Staple à dit:
(message#6)
Il faudrait un exemple anonymisé


Et dans le message#7
Bonsoir,
Avec ado c'est possible si la structure des onglets le permet !

Les fichiers sont dans le même répertoire ?
Les onglets sont connus ?
Et où il faudrait un exemplaire anonymisé!

J'ai encore du tombé dans la Twilight Zone 😉
 
RE,

Si on reprends mon exemple, cela donnerait ceci
Pour tester, il faut mettre le bon chemin vers le dossier (la ligne en rouge dans la macro)
MODE OPERATOIRE
Pour insérer la macro​
Dans un classeur vierge, faire ALT+F11​
puis Insertion/Module​
Coller dans ce module la macro​
Puis retourner dans Excel en faisant de nouveau ALT+F11​
Enfin faire Affichage/Macro/Afficher les macros​
Et exécuter la macro test_replace_II
Enrichi (BBcode):
Sub test_replace_II()
Dim Chemin$, fn$, ws As Worksheet, tablo
Chemin = "C:\Users\STAPLE\Documents\TEST_REPLACE\" 'Changer ici
tablo = Array(Array("Securité2", "Sécurité pompier 2"), Array("Gardien 2 Paris 75 013", "Gardien Alex Paris 75 013"), Array("Stagiaire 5", "Agent info Corinne"))
fn = Dir(Chemin & "*.xlsm")
Application.ScreenUpdating = False
Do While fn <> ""
    With Workbooks.Open(Chemin & fn)
            For Each el In tablo
                Sheets(1).Cells.Replace el(0), el(1), xlPart, , True
            Next
        .Close True
    End With
    fn = Dir
Loop
End Sub
NB: Test OK sur mon PC
 
Staple1600, il ne manque pas quelque chose à ce mode operatoire ?

Pour insérer la macro
Dans un classeur vierge, faire ALT+F11
puis Insertion/Module
Coller dans ce module la macro
Puis retourner dans Excel en faisant de nouveau ALT+F11
Enfin faire Affichage/Macro/Afficher les macros
Et exécuter la macro test_replace_II
 
Bonjour,
j'ai créé un fichier DavidMM.xlsm qui contient la macro!

j'ais fais des copies du fichier d'exemple dans le Zip pour faire un teste; mais il faudra à terme placier DavidMM.xlsm dans le même répertoire que les fichier à traiter ou donner le chemin du répertoire a traite dans la macro!
Code:
F = Dir(RépertoireAtraiter & "\*.Xlsm")

avec un onglet qui contient les Nom à modifier!

Edit:
je pensai requêter en liaison externe entre les 2 fichier mais il s'emblerais que ce ne sois plus possible! du moins sans aller bricoler je ne sais quoi je ne sais où!

VB:
Sub DavidMM()
Dim F As String, Cn As Object
F = Dir(ThisWorkbook.Path & "\*.Xlsm")
Set Cn = CreateObject("AdoDb.connection")
With Cn
    .Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;HDR=YES;"""
        While F <> ""
            If F <> ThisWorkbook.Name Then
                Maj ThisWorkbook.Path & "\" & F
            End If
        F = Dir
        DoEvents
        Wend
    .Close
End With
End Sub
Sub Maj(Fichier As String)
Dim Cn As Object
Dim Sql As String
Set Cn = CreateObject("AdoDb.connection")
Cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Fichier & ";Extended Properties=""Excel 12.0;HDR=YES;"""
With Sheets("Remplace").Range("A1").CurrentRegion
    For i = 2 To .Rows.Count
        Sql = "UPDATE  [Feuil1$]  " & _
         " SET [NOM] = '" & Replace(.Cells(i, "B"), "'", "''") & "'" & _
         " Where [NOM]= '" & Replace(.Cells(i, "A"), "'", "''") & "'"
    Cn.Execute Sql
    Next
End With
Cn.Close
End Sub
 

Pièces jointes

Dernière édition:
Staple1600, il ne manque pas quelque chose à ce mode operatoire ?

Pour insérer la macro
Dans un classeur vierge, faire ALT+F11
puis Insertion/Module
Coller dans ce module la macro
Puis retourner dans Excel en faisant de nouveau ALT+F11
Enfin faire Affichage/Macro/Afficher les macros
Et exécuter la macro test_replace_II
Re,

Tu penses qu'il manque quoi ?

Pendant que tu me réponds, je regarde et teste la macro de @dysorthographie
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
7
Affichages
98
Réponses
8
Affichages
179
Réponses
3
Affichages
185
Retour