Microsoft 365 Remplacer des données sans ouvrir les documents

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:

Staple1600

XLDnaute Barbatruc
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.
 

DavidMM

XLDnaute Nouveau
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 ?
 

DavidMM

XLDnaute Nouveau
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

  • Planning Paris octobre 2022.xlsm
    34.8 KB · Affichages: 6

Staple1600

XLDnaute Barbatruc
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 ;)
 

Staple1600

XLDnaute Barbatruc
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
 

DavidMM

XLDnaute Nouveau
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
 

dysorthographie

XLDnaute Accro
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

  • DavidMM.zip
    214.5 KB · Affichages: 4
Dernière édition:

Staple1600

XLDnaute Barbatruc
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
 

Discussions similaires

Statistiques des forums

Discussions
312 228
Messages
2 086 421
Membres
103 205
dernier inscrit
zch