Suppression de texte AVANT un autre texte

Bonjour,

J'ai un souci dans excel que j'aimerais résoudre soit par formules (le plus simple vu que ça doit servir pour d'autres utilisateurs) soit par VBA (je leur ferai une petite macro où ils n'auront qu'à cliquer sur le bouton).

J'ai une base de donnée qui génère tout un tas de commentaires qui s'exportent dans un fichier excel (en plus d'autres données). Tous ces commentaires se retrouvent regroupés dans une seule cellule, associés aux commentaires que les utilisateurs viennent ajouter.

Je dois épurer les commentaires "génériques" et ne garder que les commentaires utilisateurs (toujours dans une seule cellule). Tous ces commentaires ont comme particularité qu'ils commencent par une date + heure (que ce soit générique ou pas) et, s'ils sont génériques, se terminent par "CAB" suivi d'un espace et d'une ou plusieurs séries de chiffres entre parenthèses, séparés par des virgules. Il y a 3 phrases-types générées de façon génériques, sauf que la date + heure varient évidemment, et qu'il faut également les éliminer. Je sais extraire ce qui vient après CAB, tout ce qui vient avant, mais je ne sais pas remonter à "la première date avant "CAB". Ca démarre toujours à la première date du texte, donc impossible de sélectionner et supprimer la portion de texte qui m'intéresse.

Voici un exemple de texte que l'on retrouve dans une cellule :

17/03/2021 15:29:39 OT153684
Sortie définitive pour CAB (26527,26526,26525,26524,26522)
12/03/2021 10:43:35 SMB44590
sortie pour tests de stabilité
12/03/2021 10:43:35 SMB44590
Sortie définitive pour CAB (26521)
12/03/2021 10:43:35 SMB44590
Sortie temporaire pour CAB (26521) avec prélèvement de volume de 500 µL
12/03/2021 10:42:20 SMB44590
Sortie définitive pour CAB (26518)
12/03/2021 10:42:13 SMB44590
Sortie temporaire pour CAB (26518)
12/03/2021 10:40:57 SMB44590
Retour de sortie temporaire pour CAB (26518)
12/03/2021 10:40:43 SMB44590
Sortie temporaire pour CAB (26518)
11/03/2021 11:16:08 SMB44590
demo

Et voilà ce qui devrait rester après passage de la formule :

12/03/2021 10:43:35 SMB44590
sortie pour tests de stabilité

Auriez-vous des idées? (Dans certains cas, la cellule peut ne pas avoir de contenu du tout, ou ne pas avoir de contenu "CAB".

Un tout grand merci d'avoir pris la peine de me lire et merci d'avance à ceux qui pourront m'aider

Bonne soirée

Bonsoir,

n'y a t il pas une erreur dans votre demande ? Au vu de l'exemple le résultat ne devrait il pas être :

12/03/2021 10:43:35 SMB44590
sortie pour tests de stabilité
11/03/2021 11:16:08 SMB44590
demo

En effet il y a deux données sans CAB

Si l'on s'arrête au premier "sans CAB" alors voici un code VBA :

Sub Epure()
    Dim Valeur As String, Tablo, I
    ' on attribue la valeur de la cellule à Valeur
    Valeur = Range("A1").Value
    ' si la valeur est différente de rien
    If Valeur <> "" Then
        ' on attribue à Tablo les différentes lignes de la cellule, je part du principe qu'il y a un retour à la ligne entre les lignes
        Tablo = Split(Valeur, Chr(10))
        ' on boucle sur les données de ce tableau en allant de deux lignes en deux lignes en commençant
        ' à la deuxième ligne de la valeur de la cellule qui correspond à l'index 1 du Tablo qui lui commence à 0
        For I = 1 To UBound(Tablo) + 1 Step 2
            ' si on ne trouve pas la donnée "CAB" dans la ligne testée
            If Not Tablo(I) Like "*CAB*" Then
                ' on inscrit la donnée épurée dans la cellule "d'à côté" qui correspond aux index du tableau Tablo
                ' I-1 et I
                Range("A1").Offset(, 1) = Tablo(I - 1) & Chr(10) & Tablo(I)
                ' on a trouvé la donnée recherchée, on sort de la boucle
                Exit For
            End If
        ' sinon on passe à la donnée suivante
        Next I
    End If
End Sub

Le fichier de mise en application du code :

5epurer.xlsm (17.03 Ko)

Il reste à gérer l'assignation de la cellule A1 dans le code.

@ bientôt

LouReeD

Re bonsoir,

une version, toujours en VBA donc .xlsM, mais "simplifiée" par le fait de l'utilisation d'une fonction personnalisée, le code est pratiquement le même :

Function Epure(Cel As Range)
    Dim Valeur As String, Tablo, I
    ' on attribue la valeur de la cellule à Valeur
    Valeur = Cel.Value
    ' si la valeur est différente de rien
    If Valeur <> "" Then
        ' on attribue à Tablo les différentes lignes de la cellule, je part du principe qu'il y a un retour à la ligne entre les lignes
        Tablo = Split(Valeur, Chr(10))
        ' on boucle sur les données de ce tableau en allant de deux lignes en deux lignes en commençant
        ' à la deuxième ligne de la valeur de la cellule qui correspond à l'index 1 du Tablo qui lui commence à 0
        For I = 1 To UBound(Tablo) + 1 Step 2
            ' si on ne trouve pas la donnée "CAB" dans la ligne testée
            If Not Tablo(I) Like "*CAB*" Then
                ' on inscrit la donnée épurée dans la cellule "d'à côté" qui correspond aux index du tableau Tablo
                ' I-1 et I
                Epure = Tablo(I - 1) & Chr(10) & Tablo(I)
                ' on a trouvé la donnée recherchée, on sort de la boucle
                Exit Function
            End If
        ' sinon on passe à la donnée suivante
        Next I
    End If
    Epure = "N/A"
End Function

Ceci permet d'intégrer la référence de la cellule plus simplement.

Le fichier :

12epurer.xlsm (17.91 Ko)

@ bientôt

LouReeD

Bonjour,

En effet, je n'avais pas vu la 2eme ligne sans CAB cachée parmi les autres.

Merci beaucoup

bonne journée

Bonsoir,

merci pour ce retour et vos remerciements !

@ bientôt

LouReeD

Rechercher des sujets similaires à "suppression texte"