Batch sur excel pour remplacer sur plusie

yahi -  
 yahi -
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.

7 réponses

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Bonjour,
    Pour être bien précis, qu'appelles tu "libellé"?
    si il ya un changement sur un libelle...
    0
  2. yahi
     
    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
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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
    2. yahi
       
      voila le meme libe je veux le remplacer dans tous les xls existant dans le dossier
      0
    3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Il se trouve ou ce libellé?????
      Toujours à la même place? Même cellule?
      Si oui laquelle?
      0
    4. yahi
       
      dans des cellule #
      0
    5. yahi
       
      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
  3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    !!!! 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
  4. yahi
     
    merci pour la reponse hhhhhhhhhhhhhh mais je ne connais pas le vba

    si si possible tu me decris les etapes

    desole
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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
    2. yahi
       
      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
    3. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Bonjour,
      En fin de compte vous avez combien de cellule a modifier??????
      0
    4. yahi
       
      n eme je ne sais pas??
      et c'est ca le but de ce batch
      remplacer ainsi garder la meme structure
      0
    5. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Re,
      J'ai mal pose la question.
      Vous avez combien de cellule a modifier par feuille excel ???
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Bonjour,
    Je reviendrais répondre sur ce sujet lorsque celui-ci sera exposé de manière claire et définitive.
    0
  7. yahi
     
    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
  8. yahi
     
    il me dit qu il ya un brobleme With Workbooks(strFileName & ".xls")
    -1