Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

supprimer une partie d'une chaine de caractères

  • Initiateur de la discussion Initiateur de la discussion pascal21
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

pascal21

XLDnaute Barbatruc
bonsoir à tous
je saisie des données dans une cellule dont certaines infos dont je n'ai plus besoin après quelques jours
ces données se trouvent en face une date
date colonne A
données de la colonne B à la colonne N
donc je souhaiterais supprimer certains mots et pas d'autres après une periode de 8 jours
en pièces jointes un classeur tout simple avec ce que je souhaiterais obtenir
le format de départ est toujours le même
merci pour votre aide
 

Pièces jointes

Re : supprimer une partie d'une chaine de caractères

Bonsoir Pascal,

Pour visualiser les CAR(160) je les ai remplacés par #. Résultat :

Code:
CLIENT RDV#à dijon 
5h00#Christophe##Fred 1#journée
Quelle logique permet de déterminer ce qui doit être supprimé 😕

A+
 
Re : supprimer une partie d'une chaine de caractères

Bonsoir Pascal, Job75

Sauf erreur, avant c'est plutôt ainsi (CAR(160) remplacés par #) :
CLIENT RDV#à dijon
5h00 Christophe #Fred 1 journée

Après :
CLIENT dijon
1 journée

Job75 à dit:
Quelle logique permet de déterminer ce qui doit ête supprimé

-> rechercher, l'expression : "RDV#à " et sauvegarder tout ce qu'il y avant dans une variable
-> tester le 10ème caractère en partant de la fin, si c'est un chiffre, le rajouter dans la variable à la suite (1)
-> tester le 9ème caractère en partant de la fin, si c'est un chiffre, le rajouter dans la variable à la suite
-> rajouter dans la variable à la fin le mot "journée" (2)

Dans l'optique évidement où le nombre de journée est inférieur ou égale à 99

J'ai pas trop la tête à faire du VBA ce soir, tu t'en charge Job75?


(1) MaVariable = MaVariable & 10ème caractères
(2) MaVariable = MaVariable & " journée(s)"

Bonne soirée à tous

Edition : oups! J'ai oublié de récupérer le nom de la ville! Sur ce point je sèche!
 
Dernière édition:
Re : supprimer une partie d'une chaine de caractères

Bonsoir Excel-lent 🙂

Tu as raison, alors avant d'aller dormir cette fonction macro :

Code:
Function ALLEGE$(txt$)
Dim p1%, p2%, p3%
p1 = InStr(txt, "RDV")
p2 = InStr(txt, vbLf) 'position du saut de ligne
For p3 = Len(txt) To 1 Step -1 'position du dernier chiffre
  If IsNumeric(Mid(txt, p3, 1)) Then Exit For
Next
For p3 = p3 To 1 Step -1 'position du début du nombre
  If Not IsNumeric(Mid(txt, p3, 1)) Then p3 = p3 + 1: Exit For
Next
ALLEGE = Left(txt, p1 - 1) & Mid(txt, p1 + 5, p2 - p1 - 4) & Mid(txt, p3)
ALLEGE = Application.Trim(ALLEGE) 'SUPPRESPACE
End Function
Il faut qu'il y ait toujours :

- les 3 lettres RDV puis la ville 5 caractères après le R

- puis le saut de ligne

- enfin un nombre dans la dernière partie.

Les caractères de code 160 ne sont d'aucune utilité.

Fichier joint.

A+
 

Pièces jointes

Dernière édition:
Re : supprimer une partie d'une chaine de caractères

bonjour à tous
job
le code fonctionne même avec la ville ayant un nom composé
les caractère(160) me servent à extraire les mots pour une autre macro le jour de la saisie jusqu'à aujourdhui() -2 (délai à voir en fonction de l'utilisation)en fait
comme je n'ai pas ton savoir sur excel je me suis débrouillé avec une formule avec txt gauche substitue cherche que j'ai trouvé sur le net d'où les car(160)
c'est pas joli mais après quelques réglages ça marche!!
par contre la configuration de mon classeur (tu ne pouvais pas le voir dans l'exemple donné) ne me permet pas de rajouter des lignes supplémentaires pour réduire le contenu de la cellule
ce que j'aurais voulu (désiré) ce que la réduction se fasse dans la cellule même à aujourdhui()- 8 (pour le délai je ne suis encore pas fixé faut que je vois à l'usage)
il me vient une idée il y a peut être un autre caractère du genre de cr(160) qui pourrais servir de balise pour que la macro sache où se trouve les mots à supprimer
 
Re : supprimer une partie d'une chaine de caractères

Bonjour Pascal, le forum,

ce que j'aurais voulu (désiré) ce que la réduction se fasse dans la cellule même à aujourdhui()- 8

La macro Workbook_Open (dans ThisWorkbook) étudie les dates en colonne A :

Code:
Private Sub Workbook_Open()
Dim dat As Range, cel As Range
Feuil1.Activate 'CodeName de la feuille
On Error Resume Next 'si pas de cellules
For Each dat In [A:A].SpecialCells(xlCellTypeConstants, 1)
  If Date > dat + 7 Then
    For Each cel In dat.EntireRow.SpecialCells(xlCellTypeConstants, 2)
      cel = ALLEGE(cel.Text)
    Next
  End If
Next
End Sub
Fichier (2).

A+
 

Pièces jointes

Re : supprimer une partie d'une chaine de caractères

Re,

Juste un petit test sur "RDV" pour éviter que les cellules déjà allégées soient toujours recalculées :

Code:
Private Sub Workbook_Open()
Dim dat As Range, cel As Range, flag As Boolean
Feuil1.Activate 'CodeName de la feuille
On Error Resume Next 'si pas de cellules
For Each dat In [A:A].SpecialCells(xlCellTypeConstants, 1)
  If Date > dat + 7 Then
    For Each cel In dat.EntireRow.SpecialCells(xlCellTypeConstants, 2)
      If InStr(cel, "RDV") Then cel = ALLEGE(cel.Text): flag = True
    Next
  End If
Next
If Not flag Then Me.Saved = True 'évite l'invite à la fermeture
End Sub
Noter aussi le Me.Saved = True.

Fichier (3).

A+
 

Pièces jointes

Re : supprimer une partie d'une chaine de caractères

Re,

il me vient une idée il y a peut être un autre caractère du genre de cr(160) qui pourrais servir de balise pour que la macro sache où se trouve les mots à supprimer

Les CAR(160) suffisent amplement...

Il suffit de les utiliser pour encadrer les textes à supprimer, comme ceci :

Code:
CLIENT#RDV à#Dijon 
#5h00 Christophe Fred#1 journée
Alors la fonction macro ALLEGE doit s'écrire :

Code:
Function ALLEGE$(txt$)
Dim p1%, p2%
1 p1 = InStr(txt, Chr(160)) 'position du 1er
If p1 Then
  p2 = InStr(p1 + 1, txt, Chr(160)) 'position du 2ème
  txt = Application.Replace(txt, p1, p2 - p1 + 1, " ") 'fonction REMPLACER
  GoTo 1
End If
ALLEGE = Application.Trim(txt) 'SUPPRESPACE
End Function
Nota 1 : les Chr(160) doivent être en nombre pair.

Nota 2 : pas de s à Chalon, mes excuses aux Chalonnais 🙂

Fichier joint.

A+
 

Pièces jointes

Re : supprimer une partie d'une chaine de caractères

Re,

Une solution pour le fun, encore que...

Elle consiste à stocker le texte final dans le message de saisie d'une validation de données.

C'est évidemment plus lourd puisqu'il faut le créer pour chaque cellule.

Nota : on pourrait aussi stocker dans un commentaire.

Fichier joint, voir la fonction ALLEGE qui est très simple.

A+
 

Pièces jointes

Re : supprimer une partie d'une chaine de caractères

pfffff!!!! très simple très simple toi même lol!!!
si s'était simple de s'alléger je le saurais et je ne ferais pas 100kg 😉
dans un commentaire trop tard j'ai plus de place
en fait je stock déjà dans un commentaire le reste des infos nécessaires pour le chantier (machine, rue,responsable chantier,obs. etc....)j'ai utilisé pour ça une macro de JB fort pratique qui permet de saisir dans un commentaire depuis un usf et là ou je suis content de moi, j'ai adapté tout seul) comme un gros lol!!!
pour le fun je vais regarder aussi dans le travail que tu m'a fais
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
386
Réponses
1
Affichages
325
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…