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
demoEn 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 SubLe fichier de mise en application du code :
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 FunctionCeci permet d'intégrer la référence de la cellule plus simplement.
Le fichier :
@ 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