Creation d'une macro excel modifiant des carateres

babyshaq11 Messages postés 6 Date d'inscription mardi 12 décembre 2000 Statut Membre Dernière intervention 5 juin 2008 - 2 juin 2008 à 09:52
babyshaq11 Messages postés 6 Date d'inscription mardi 12 décembre 2000 Statut Membre Dernière intervention 5 juin 2008 - 2 juin 2008 à 14:07
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

JM247L Messages postés 443 Date d'inscription mardi 27 mars 2007 Statut Membre Dernière intervention 1 mars 2011 2
2 juin 2008 à 10:09
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" /??>
0
babyshaq11 Messages postés 6 Date d'inscription mardi 12 décembre 2000 Statut Membre Dernière intervention 5 juin 2008
2 juin 2008 à 10:16
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.
0
JM247L Messages postés 443 Date d'inscription mardi 27 mars 2007 Statut Membre Dernière intervention 1 mars 2011 2
2 juin 2008 à 10:27
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" /??>
0
babyshaq11 Messages postés 6 Date d'inscription mardi 12 décembre 2000 Statut Membre Dernière intervention 5 juin 2008
2 juin 2008 à 10:36
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.
0

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

Posez votre question
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
2 juin 2008 à 11:25
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
0
JM247L Messages postés 443 Date d'inscription mardi 27 mars 2007 Statut Membre Dernière intervention 1 mars 2011 2
2 juin 2008 à 11:45
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
0
babyshaq11 Messages postés 6 Date d'inscription mardi 12 décembre 2000 Statut Membre Dernière intervention 5 juin 2008
2 juin 2008 à 11:49
Et j'en fait quoi de ce code? je le met ou? il faut que je change quelque chose dedans?
0
JM247L Messages postés 443 Date d'inscription mardi 27 mars 2007 Statut Membre Dernière intervention 1 mars 2011 2
2 juin 2008 à 12:01
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
0
babyshaq11 Messages postés 6 Date d'inscription mardi 12 décembre 2000 Statut Membre Dernière intervention 5 juin 2008
2 juin 2008 à 14:07
Non je parler du code de PCPT, mais dans les deux cas je comprend pas votre code, je ne sais pa quoi changer
0
Rejoignez-nous