Batch sur excel pour remplacer sur plusie

Fermé
yahi - 12 oct. 2011 à 16:42
 yahi - 14 oct. 2011 à 10:53
Bonjour,
salut mes amis
j'ai un probleme et j espere bien que vos m aider.
je travaille chaque jours des fichiers excel et si il ya un changement sur un libelle je dois le faire manuellement et pour tous les fichiers excel!!!!!!!!!!! voir 85 fichier
c'est un peu penible.

un batch qui cherche le libelle et le remplace sur tous les fichiers xls dans un repertoires (les fichiers ont toujous la suntax suivante 20111012.




A voir également:

7 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
13 oct. 2011 à 12:53
Bonjour,
Pour être bien précis, qu'appelles tu "libellé"?
si il ya un changement sur un libelle...
0
bonjour
un libelle est le contenu de la case
donc chaque fichier xls comporte une seule feuille et tous ils ont la même structure. et je les regroupe dans un seule dossier


merci pour votre reponse
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
13 oct. 2011 à 13:14
Toujours dans un souci de précision :
un libelle est le contenu de la case
case = cellule?
Laquelle?
Toujours la même?
N'importe laquelle?
0
voila le meme libe je veux le remplacer dans tous les xls existant dans le dossier
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
13 oct. 2011 à 13:33
Il se trouve ou ce libellé?????
Toujours à la même place? Même cellule?
Si oui laquelle?
0
dans des cellule #
0
en plus ce batch doit les chercher et remplacer dans des cellules et place # .

je vais explique mieux
j'ai 100 fichier xls comporte plusieurs donnee .maintenant je veux remplacer un nom (paris) par (londres) dans 100 xls voila au lieu d 'ouvrir les 100 feuille et corriger par (chercher puis remplacer) je veux automatiquement les corriger en une seule fois.
merci de votre collaboration
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
13 oct. 2011 à 14:01
!!!! tous les classeurs excel dans le même répertoire !!!
Le fichier qui te permet ce que tu souhaites

Le code VBA :
Sub ModifierLibelle()
'Sources pour le choix du répertoire
'et la boucle sur ses fichiers
    'http://silkyroad.developpez.com/VBA/ListView/#LII-I
    'http://www.developpez.net/forums/d270516/autres-langages/general-visual-basic-6-vbscript/vbscript/vos-contributions-vbscript/faq-utiliser-boite-dialogue-selection-repertoire/
Dim oShell As Object, strFileName As Object
Dim oFolder As Object
Dim oFolderItem As Object
Dim OldLibelle As String, NewLibelle As String, NomClasseur As String
Dim Trouve As Range

Application.ScreenUpdating = False
NomClasseur = Left(ThisWorkbook.Name, Len(ThisWorkbook.Name) - 4)
OldLibelle = Sheets(1).Range("D5").Value
NewLibelle = Sheets(1).Range("D6").Value
If OldLibelle = "" Or NewLibelle = "" Then
    MsgBox "Saisie obligatoire en D5 et D6"
    Exit Sub
End If

Set oShell = CreateObject("Shell.Application")
Set oFolder = oShell.BrowseForFolder(&H0&, "Choisir un répertoire", &H1&, "c:\")
If oFolder Is Nothing Then
    MsgBox "Abandon opérateur", vbCritical, "Annulation"
Else
    For Each strFileName In oFolder.Items
        If oFolder.GetDetailsOf(strFileName, 2) = "Feuille de calcul Microsoft Excel" And strFileName <> NomClasseur Then
            Workbooks.Open oFolder.ParentFolder.ParseName(oFolder.Title).Path & "\" & strFileName
            With Workbooks(strFileName & ".xls")
                With ActiveSheet
                    Set Trouve = .Cells.Find(OldLibelle)
                        If Trouve Is Nothing Then
                        Else
                            Trouve.Value = NewLibelle
                        End If
                    Set Trouve = Nothing
                End With
                .Save
                .Close
            End With
        End If
    Next
End If
Application.ScreenUpdating = True
End Sub
0
merci pour la reponse hhhhhhhhhhhhhh mais je ne connais pas le vba

si si possible tu me decris les etapes

desole
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
13 oct. 2011 à 14:22
Si si possible ;-))
Code commenté :
Sub ModifierLibelle()
'Sources pour le choix du répertoire
'et la boucle sur ses fichiers
    'http://silkyroad.developpez.com/VBA/ListView/#LII-I
    'http://www.developpez.net/forums/d270516/autres-langages/general-visual-basic-6-vbscript/vbscript/vos-contributions-vbscript/faq-utiliser-boite-dialogue-selection-repertoire/

'déclaration des variables
Dim oShell As Object, strFileName As Object
Dim oFolder As Object
Dim oFolderItem As Object
Dim OldLibelle As String, NewLibelle As String, NomClasseur As String
Dim Trouve As Range

'empêche le rafraichissement de l'écran pour gagner en rapidité
Application.ScreenUpdating = False
'remplissage des variables :
    'NomClasseur = comme son nom l'indique... le nom de ce classeur
    'OldLibelle = comme son nom l'indique, l'ancien libellé (à remplacer)
    'NewLibelle = comme son nom l'indique... le nouveau libellé
NomClasseur = Left(ThisWorkbook.Name, Len(ThisWorkbook.Name) - 4)
'on a inscrit l'ancien libellé en D5
OldLibelle = Sheets(1).Range("D5").Value
'on a inscrit le nouveau libellé en D6
NewLibelle = Sheets(1).Range("D6").Value
'test si les libellés (ancien et nouveau) sont bien remplis
If OldLibelle = "" Or NewLibelle = "" Then
    'sinon, message à l'utilisateur
    MsgBox "Saisie obligatoire en D5 et D6"
    'et on ne fait plus rien, on sort de la procédure
    Exit Sub
End If

'Ici, partie technique consistant à ouvrir une fenêtre
Set oShell = CreateObject("Shell.Application")
'permettant le choix du répertoire ou se situent les fichiers excel
Set oFolder = oShell.BrowseForFolder(&H0&, "Choisir un répertoire", &H1&, "c:\")
'en cas d'annulation par l'utilisateur
If oFolder Is Nothing Then
    'message d'abandon
    MsgBox "Abandon opérateur", vbCritical, "Annulation"
Else
    'boucle sur tous les fichiers du répertoire
    'ne tiens pas compte de l'extension donc sur TOUS les fichiers
    For Each strFileName In oFolder.Items
        'test si :
            '1- le fichier est bien un fichier Excel
            'oFolder.GetDetailsOf(strFileName, 2) = "Feuille de calcul Microsoft Excel"
            '2- le fichier n'est pas celui qui contient la macro (le mien, ce classeur ci)
            'And strFileName <> NomClasseur
        If oFolder.GetDetailsOf(strFileName, 2) = "Feuille de calcul Microsoft Excel" And strFileName <> NomClasseur Then
            'si c'est tout bon, on ouvre le classeur
            Workbooks.Open oFolder.ParentFolder.ParseName(oFolder.Title).Path & "\" & strFileName
            'début du bloc "dans le classeur qu'on vient d'ouvrir"
            With Workbooks(strFileName & ".xls")
                'bloc dans la feuille active (en même temps, il n'y a qu'une feuille par classeur...)
                With ActiveSheet
                    'on cherche dans toutes les cellules l'ancien libellé
                    Set Trouve = .Cells.Find(OldLibelle)
                        's'il ne s'y trouve pas on fait rien
                        If Trouve Is Nothing Then
                        Else
                            's'il s'y trouve on remplace par le nouveau libellé dans la cellule
                            '(Trouve = cellule ou on l'a trouvé)
                            Trouve.Value = NewLibelle
                        End If
                    Set Trouve = Nothing
                'fin du bloc feuille
                End With
                'on enregistre les modifs
                .Save
                'on ferme
                .Close
            'fin du bloc classeur
            End With
        End If
    Next
End If
'on rétablit le rafraichissement d'écran
Application.ScreenUpdating = True
End Sub
0
bonjour j ai essaye mais ca marche pas
je vais mieux expliquer
voila j'ai 100 feuille execl sur un dossier
pour chaque feuille :
date heure chaine marque libelle (intersection g4)
francois
malak
cesar

tous les feuilles sont remplis par ces libelles qui sont differentes
ce que je veux c (est un batch qui permet de changer ''cesar"" par ""shakira""
dans tous ces 100 feuilles xls

merci pour votre entiere collaboratiob
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
13 oct. 2011 à 18:36
Bonjour,
En fin de compte vous avez combien de cellule a modifier??????
0
n eme je ne sais pas??
et c'est ca le but de ce batch
remplacer ainsi garder la meme structure
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
13 oct. 2011 à 18:48
Re,
J'ai mal pose la question.
Vous avez combien de cellule a modifier par feuille excel ???
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
14 oct. 2011 à 08:38
Bonjour,
Je reviendrais répondre sur ce sujet lorsque celui-ci sera exposé de manière claire et définitive.
0
voila j'ai 80 fichier xls tous ont cette structure :
date-chaine-agent-heure-libelle(g4)
---------------------------------jack
---------------------------------fera
----------------------------------nadal
----------------------------------shakira

ces libelles se repete dans ces 80 xls et par suite lorsque je veux remplacer ''fera'' par ''fraca'' je dois ouvrir les 80 xls et faire la modif (rechercher-remplacer)
et c'est pénible pour moi.

donc ce que je veux c'est un macro qui permet de remplacer dans ces 80 xls en même temps les fichiers xls sont stocke dans le même dossier.
0
il me dit qu il ya un brobleme With Workbooks(strFileName & ".xls")
-1