Creation d'une macro excel modifiant des carateres

Signaler
Messages postés
6
Date d'inscription
mardi 12 décembre 2000
Statut
Membre
Dernière intervention
5 juin 2008
-
Messages postés
6
Date d'inscription
mardi 12 décembre 2000
Statut
Membre
Dernière intervention
5 juin 2008
-
Bonjour,

Je dois créer une macro-commande sur Excel permettant de modifier des caractères automatiquement mais je ne sais pas comment.

Par exemple j'ai ce document:

PMO|29||33937998401008|3|060930255001|déversoir en tète de stat|A2||||||||||||
PMO|31||33937998401008|3|060930255001|Entrée Station |A3||||||||||||
PMO|32||33937998401008|3|060930255001|sortie station |A4||||||||||||
PMO|41||33937998401008|3|060930255001|boues produites avant tra|A6||||||||||||
PMO|5||33937998401008|3|060930255001|Graisses évacuées sans tr|A9||||||||||||
PMO|6||33937998401008|3|060930255001|Sable produit évacué|A10||||||||||||
PMO|7||33937998401008|3|060930255001|Refus dégrillage produit |A11||||||||||||

Il faut que je change A2 en S2, A3 en S3 et ca pour plusieurs documents. Ces caractères sont toujours placer au même endroit. <?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>






 






Par exemple :






 







 






PMO|29||33937998401008|3|060930255001|déversoir en tète de stat|S2||||||||||||
PMO|31||33937998401008|3|060930255001|Entrée Station |S3||||||||||||
PMO|32||33937998401008|3|060930255001|sortie station |S4||||||||||||
PMO|41||33937998401008|3|060930255001|boues produites avant tra|S6||||||||||||
PMO|5||33937998401008|3|060930255001|Graisses évacuées sans tr|S9||||||||||||
PMO|6||33937998401008|3|060930255001|Sable produit évacué|S10||||||||||||
PMO|7||33937998401008|3|060930255001|Refus dégrillage produit |S11||||||||||||






 








Ce sont des fichiers texte (.txt) au format Sandre, ils s'ouvrent avec un logiciel de traitement de texte.

Merci de votre aide.






 







 







 







 







 







 







 







 







 







 







 







 







 







 







 

9 réponses

Messages postés
443
Date d'inscription
mardi 27 mars 2007
Statut
Membre
Dernière intervention
1 mars 2011
2
Salut,
C'est pas très clair mais bon pour un lundi matin on peut essayer ça :
mémorise une macro et exécute Remplacer   "|A2|" par "|S2|"
Normalement cela devrait le faire

Cliquer "Réponse Acceptée" Partageons Notre Savoir & Nos Acquis - JML<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
Messages postés
6
Date d'inscription
mardi 12 décembre 2000
Statut
Membre
Dernière intervention
5 juin 2008

Je l'ai deja fait mais ca me met plein d'erreur.
En faite il faudrai que des que j'ouvre le document je clique sur un bouton ou la macro est associé et que ca me modifier tout les caracteres.
Messages postés
443
Date d'inscription
mardi 27 mars 2007
Statut
Membre
Dernière intervention
1 mars 2011
2
Quel type d'erreurs ?

Tu peux même rêver d'une macro qui s'exécute automatiquement à l'ouverture du fichier ... Voir les possibilité dans le module 
   "ThisWorkbook" 
   Sub Workbook_Open()
Cliquer "Réponse Acceptée"Partageons Notre Savoir & Nos Acquis - JML<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
Messages postés
6
Date d'inscription
mardi 12 décembre 2000
Statut
Membre
Dernière intervention
5 juin 2008

En enregistrant la macro cela ma donner:

Sub Macro1()
' Macro1 Macro
' Macro enregistrée le 27/05/2008 par STAGINFO



    ActiveCell.Replace What:="A3", Replacement:="S1", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Cells.Find(What:="A3", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
        xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
        , SearchFormat:=False).Activate
       
    ActiveCell.Replace What:="A4", Replacement:="S2", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Cells.Find(What:="A4", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
        xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
        , SearchFormat:=False).Activate
           
    ActiveCell.Replace What:="A2", Replacement:="S16", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Cells.Find(What:="A2", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
        xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
        , SearchFormat:=False).Activate
                         
    ActiveCell.Replace What:="A6", Replacement:="S4", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Cells.Find(What:="A6", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
        xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
        , SearchFormat:=False).Activate
        
    ActiveCell.Replace What:="A5", Replacement:="S3", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
     Cells.Find(What:="A5", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
        xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
        , SearchFormat:=False).Activate
       
End Sub

Mais ca ne fesait rien quand je l'executer donc je supprimer la deuxieme ligne de chaque instruction ce qui ma donner:

Sub Macro1()
' Macro1 Macro
' Macro enregistrée le 23/05/2008 par STAGINFO



    ActiveCell.Replace What:="A3", Replacement:="S1", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False




    ActiveCell.Replace What:="A2", Replacement:="S16", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
   
    ActiveCell.Replace What:="A4", Replacement:="S2", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
       
    ActiveCell.Replace What:="A6", Replacement:="S4", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False




    ActiveCell.Replace What:="A5", Replacement:="S3", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False




End Sub

La ca modifier quelquel chose mais pas le programme entier, et il faut que je selectionne la ligne a changer.
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
41
salut,

voici le code en VB6 mais tu n'as rien à changer....
(NB : fait une copie de ton fichier avant de tester ;)

Private Sub Command3_Click()
    Dim aFile() As String
    Dim i%, j%
    Const sFILE As String = "D:\VB_Temp\test.txt"
    
    aFile = GetColumnsFromFile(sFILE, "|")
    
    For i = 0 To UBound(aFile)
        aFile(i, 7) = "S" & Right$(aFile(i, 7), Len(aFile(i, 7)) - 1)
    Next i
    
    Call SetColumnsToFile(aFile, sFILE, "|")
End Sub

'  
http://www.codyx.org/snippet_recuperer-contenu-fichier-sous-forme-tableau-multidimensionnel-apres_508.aspx
Private Function GetColumnsFromFile(ByVal sPath As String, Optional ByVal sSepar As String = ";") As String()
    Dim FF As Integer, sBuffer As String, aLines() As String, aCols() As String, i As Long,
j As Long, aRes()
As String
    FF = FreeFile: i = 0: j = 0
    
    On Error Resume Next
    Open sPath For Input As #FF
        sBuffer = Input(LOF(FF), #FF)
    Close #FF
    If Not (Err.Number = 0) Then Exit Function
    
    aLines = Split(sBuffer, vbNewLine)
    For i = 0 To UBound(aLines)
        aCols = Split(aLines(i), sSepar)
        If i = 0 Then ReDim aRes(UBound(aLines), UBound(aCols))
        For j = 0 To UBound(aCols)
            aRes(i, j) = aCols(j)
        Next j
    Next i
    
    GetColumnsFromFile = aRes
    Erase aLines: Erase aCols: Erase aRes
End Function

Private Sub SetColumnsToFile(ByRef saArr() As String, ByVal sPath As String, Optional ByVal sSepar As String = ";")
    Dim i As Integer, j As Integer, s As String, FF As Integer
    FF = FreeFile
    Open sPath For Output As #FF
        For i = 0 To UBound(saArr)
            s = vbNullString
            For j = 0 To UBound(saArr, 2)
                s = s & saArr(i, j) & sSepar
            Next j
            Print #FF, Left$(s, Len(s) - Len(sSepar))
        Next i
    Close #FF
End Sub

++
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Messages postés
443
Date d'inscription
mardi 27 mars 2007
Statut
Membre
Dernière intervention
1 mars 2011
2
Imagine
Une feuille "Correspondance" ou tu gères les correspondances:
     A     B
1  A3  S16
2  A5  S12
3   etc

3 variables qui feraient la ronde dans une boucle
ValCherche , ValRemplace, I  , NbLg

' Une boucle
   NbLg= Nombre de lignes à traiter
   For I= 1 to NbLg
     ValCherche = Sheets("Correspondance").Cells(I, 1)
     ValRemplace = Sheets("Correspondance").Cells(I, 2)
     ActiveCell.Replace What:=ValCherche, Replacement:=ValRemplace,  _
          LookAt:=xlPart,   SearchOrder:=xlByRows, MatchCase:=False, _
          SearchFormat:=False,   ReplaceFormat:=False 
   Next I

Cliquer "Réponse Acceptée"
Partageons Notre Savoir & Nos Acquis - JML
Messages postés
6
Date d'inscription
mardi 12 décembre 2000
Statut
Membre
Dernière intervention
5 juin 2008

Et j'en fait quoi de ce code? je le met ou? il faut que je change quelque chose dedans?
Messages postés
443
Date d'inscription
mardi 27 mars 2007
Statut
Membre
Dernière intervention
1 mars 2011
2
Ce qui serait bien, c'est que tu y mettes un peu les formes !!! On prends du temps et de la peine pour donner un coup de main ... Alors relis mes posts précédents - si c'est a moi que s'adresse ta question - et tu trouveras la réponse


Je sors
Messages postés
6
Date d'inscription
mardi 12 décembre 2000
Statut
Membre
Dernière intervention
5 juin 2008

Non je parler du code de PCPT, mais dans les deux cas je comprend pas votre code, je ne sais pa quoi changer