Forum Clubic

Cherche logiciel pour chaine de caractères - supprimer les chaines avant "hello"

Bonjour,

Je ne suis pas programmeur !

J’ai eu un virus dans un tableau excel qui m’a mis :

Avant : (ok)
Dioni Frédérique
Dupont Georges

Après : (pas ok)
elgpozhelloDioniFrédérique
gfdgsfgsdfghelloDupontGeorges

Il y a environ 2000 contacts

Comment je fais pour remettre comme avant ?
J’ai cherché des logiciels mais je ne peux supprimer que hello !

Il faudrait que je trouve un logiciel qui supprime tout ce qui se trouve avant "hello"

Merci d’avance à celui qui me sauvera ! ! ! (heu… ps : je suis pas programmeur)

Bonjour, bienvenue sur les forums de Clubic :slight_smile:

Je te prierai de mettre le langage informatique dans le titre, tel que requis par la charte du forum programmation - pour une meilleure compréhension les uns des autres.

A lire :
http://www.clubic.com/forum/charte-du-foru…on-t306797.html

Pour éditer:
Suffit de cliquer sur ce bouton, dans ton message : http://www.clubic.com/forum/style_images/persoclubic/editer.gif

Merci et bon courage pour ton problème :jap:

En VBA (Visual Basic for Applications) tu peux faire un programme qui :
pour chaque cellule, recherche la position de la chaîne “hello” (qu’on va nommer [/b]pos[/b]), supprime tous les caractères situés entre la position 0 (le début de la chaîne) et la position ([/b]pos[/b] + 5). Ensuite faudra régler le problème des espaces qui ont été supprimés.


Option Explicit

' sub modulaire pour permettre l'utilisation de celle ci
' pour n'importe quelle colonne et feuille
' A noter que le problème d'espace ne peut être rêglé sans connaitre
' la chaine au préalable ...
Sub reformat_cells(ByVal string_to_search As String, ByVal feuille As String, ByVal column As String, ByVal sz_col_start As String, ByVal sz_col_end As String)
Dim col_start As Integer
Dim col_end As Integer
Dim counter As Integer
Dim curcell As Range
Dim newcell As Range
Dim sz_curCel As String
Dim sz_searchstringpos As Integer
Dim sz_searchstringlen As Integer
Dim sz_newstring As String

    col_start = Int(Val(sz_col_start))
    col_end = Int(Val(sz_col_end))
    For counter = col_start To col_end
        ' A1:A10 par exemple
        sz_curCel = column & counter ' & ":" & column & sz_col_end
        Set curcell = Worksheets(feuille).Range(sz_curCel)
        ' une chaine existe (strcomp est la plus rapide des fonctions de comparaison en VB)
        If StrComp(curcell.Text, vbNullString, vbTextCompare) <> 0 Then
            sz_searchstringpos = InStr(curcell.Text, string_to_search)
            sz_searchstringpos = sz_searchstringpos + Len(string_to_search) - 1
            If sz_searchstringpos Then
                sz_searchstringlen = Len(curcell.Text)
                sz_searchstringlen = sz_searchstringlen
                sz_newstring = Right(curcell.Text, sz_searchstringlen - sz_searchstringpos) ' Mid(curcell.Text, sz_searchstringpos, sz_searchstringlen - sz_searchstringpos)
                curcell.Value = sz_newstring
            End If
        End If
        
    Next counter

End Sub

' sub à éxécuter
Sub ask_for_format_cells()
Dim feuille As String
Dim column As String
Dim col_start As String
Dim col_end As String

    feuille = Application.InputBox("Saisissez la feuille de reformattage", "Feuille de reformatage")
    column = Application.InputBox("Saisissez la colonne de reformattage", "Colone de reformatage")
    col_start = Application.InputBox("Saisissez la ligne de départ de reformattage", "Ligne de départ")
    col_end = Application.InputBox("Saisissez la ligne de fin de reformattage", "Ligne de fin")
    Call reformat_cells("hello", feuille, column, col_start, col_end)
    
End Sub

Salut,

Avec programme comme “Sed pour Windows” et une simple petite ligne de commande, tu devrais déjà t’éviter un max de boulot :


[jp@MDK tmpfs]$ cat file.txt

elgpozhelloDioniFrédérique;12 chemin des Plaines;31000;Toulouse
gfdgsfgsdfghelloDupontGeorges;3 Avenue Belles;13140;Marseille

[jp@MDK tmpfs]$ [b]sed -i.bak -e 's/.*hello//;s/^[[:upper:]][[:lower:]]*/& /' file.txt[/b]

[jp@MDK tmpfs]$ cat file.txt

Dioni Frédérique;12 chemin des Plaines;31000;Toulouse
Dupont Georges;3 Avenue Belles;13140;Marseille

[jp@MDK tmpfs]$ 

L’option “-i.bak” c’est pour faire une sauvegarde de ton fichier original qui sera renommé en "file.txt.bak (oKaZou…)

:wink:

Sed est effectivement très puissant mais ne servira à rien pour une feuille excel qui contient des structures de données et non des données brutes.

Euh… même en exportant au format "CSV" pour traiter le fichier ?

Sauf dans ce cas.

Ben je ne l’entendais pas autrement :wink:

tu peux faire directement en excel :

  • insérer une colonne juste avant celle concernée
  • y copier la formule :
=STXT(LC(1);CHERCHE("hello";LC(1))+5;100)
  • copier puis collage valeurs sur la colonne d’origine

Pour ce qui est de l’espace entre nom et prenom, c’est plus compliqué, je crois que là il faudra passer par le VBA, au minimum par une macro

Merci pour la formule excel malheureusement elle me retourne une erreur !
J’ai mis dans la colonne A la formule et dans la colonne B ma liste de noms…

je t’ai donné la formule en reference L1C1 et tu sois etre en A1

essaie


=STXT(B1;CHERCHE("hello";B1)+5;100)

ou alors Outils->options->Général->cocher style de référence L1C1

Je te remercie beaucoup !

Grace à toi j’ai réussi à tout remettre !

C puissant la programmation !

Un grand bravo à tes performances !

Merciiiiiiiiii !!!!!!!!