Code VBA pour supprime une partie de texte
DrigoNL
-
ccm81 Messages postés 10909 Date d'inscription Statut Membre Dernière intervention -
ccm81 Messages postés 10909 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai dans la colonne A des noms avec (ou sans) tire et suivis d'un tiret et d'une version (deux chiffres. deux chiffres).
Est-il possible de supprimer "- est la version (les derniers chiffres)" ou "les 6 premiers caractères en partant de de droite à gauche"(en une seule fois) dans une partie de texte contenu dans les cellules d'une colonne ?
Exemple : 3% Pn/h-01.01, A&K-CYCLADES-01.03, XENON-0D-20.00, ADELE, etc.
Je souhaiterai obtenir 3% Pn/h, A&K-CYCLADES, XENON-0D, ADELE, etc
PS: je souhaite l'avoir en code VBA car en formule je l'ai déjà, c'est : "SIERREUR(GAUCHE(A2;TROUVE("-";A2;NBCAR(A2)-5)-1);A2)"
J'ai dans la colonne A des noms avec (ou sans) tire et suivis d'un tiret et d'une version (deux chiffres. deux chiffres).
Est-il possible de supprimer "- est la version (les derniers chiffres)" ou "les 6 premiers caractères en partant de de droite à gauche"(en une seule fois) dans une partie de texte contenu dans les cellules d'une colonne ?
Exemple : 3% Pn/h-01.01, A&K-CYCLADES-01.03, XENON-0D-20.00, ADELE, etc.
Je souhaiterai obtenir 3% Pn/h, A&K-CYCLADES, XENON-0D, ADELE, etc
PS: je souhaite l'avoir en code VBA car en formule je l'ai déjà, c'est : "SIERREUR(GAUCHE(A2;TROUVE("-";A2;NBCAR(A2)-5)-1);A2)"
A voir également:
- Code VBA pour supprime une partie de texte
- Code ascii - Guide
- Recuperer message whatsapp supprimé - Guide
- Message supprimé whatsapp - Guide
- Impossible de supprimer une page word - Guide
- Code de déverrouillage oublié - Guide
5 réponses
Bonjour
Poue éliminer les n=6 dernies caractères de la chaine s
n = 6
s = Left(s, Len(s) - n)
Cdlmnt
Poue éliminer les n=6 dernies caractères de la chaine s
n = 6
s = Left(s, Len(s) - n)
Cdlmnt
Peut être ceci (ce que j'ai compris)
Cdlmnt
Public Function Nettoie(s As String, n As Long) As String
Dim ss As String, r As Long
n = 6
ss = StrReverse(s)
r = InStr(1, ss, "-")
If r <> 0 And r = n Then s = Left(s, Len(s) - n)
Nettoie = s
End Function
Cdlmnt
Bonjour à tous,
autre proposition :
eric
autre proposition :
Sub suppVersion() Dim datas, lig As Long, tmp1, tmp2 Dim i As Long datas = [A2].Resize(Cells(Rows.Count, 1).End(xlUp).Row - 1).Value For lig = 1 To UBound(datas) tmp1 = Split(datas(lig, 1), ",") For i = 0 To UBound(tmp1) tmp2 = Split(tmp1(i), "-") If tmp2(UBound(tmp2)) Like "##.##" Then ReDim Preserve tmp2(UBound(tmp2) - 1) tmp1(i) = Join(tmp2, "-") Next i datas(lig, 1) = Join(tmp1, ",") Next lig [A2].Resize(UBound(datas)) = datas End Sub
eric
Bonjour Eriiic,
Merci pour le code, le souci est que j'ai une erreur à la ligne suivante :
" datas(lig, 1) = Join(tmp1, ",")
Pourquoi il y a une virgule?? Parce que mes données sont en colonnes non separées par de virgule. C'est qui veut dire :
Je te joint le fichier excel suivant (voir la colonne B) : http://www.cjoint.com/c/FAzjavU1ZZj
colonne B
3% Pn/h-01.01
A&K-CYCLADES-01.03
XENON-0D-20.00
ADELE
.
.
.
.
etc.
Cordialement.
Merci pour le code, le souci est que j'ai une erreur à la ligne suivante :
" datas(lig, 1) = Join(tmp1, ",")
Pourquoi il y a une virgule?? Parce que mes données sont en colonnes non separées par de virgule. C'est qui veut dire :
Je te joint le fichier excel suivant (voir la colonne B) : http://www.cjoint.com/c/FAzjavU1ZZj
colonne B
3% Pn/h-01.01
A&K-CYCLADES-01.03
XENON-0D-20.00
ADELE
.
.
.
.
etc.
Cordialement.
Bonjour,
avec ton explication j'avais compris que tu en avais plusieurs dans une cellule séparés par des ",".
Mais qui peut le plus peut le moins, et pas d'erreur chez moi.
https://www.cjoint.com/c/FAzjCn8nSzl
J'ai mis aussi la fonction de ccm81 qui est ok
eric
avec ton explication j'avais compris que tu en avais plusieurs dans une cellule séparés par des ",".
Mais qui peut le plus peut le moins, et pas d'erreur chez moi.
https://www.cjoint.com/c/FAzjCn8nSzl
J'ai mis aussi la fonction de ccm81 qui est ok
eric
Ré,
Quand j'essaie d'adapter le code avec mon fichier original, il me met une erreur dans la fonction "UBound" comme erreur de compilation : Tableau attendu.
Workbooks(nomcible).Activate
Workbooks(nomcible).Sheets("CNPE").Select
datas = Sheets("CNPE").Cells(Columns(2).Cells.Count, 3).End(xlUp).Row '[B3].Resize(Cells(Rows.Count, 1).End(xlUp).Row - 1).Value
For lig1 = 3 To UBound(datas)
tmp1 = Split(datas(lig, 1), ",")
For i = 0 To UBound(tmp1)
tmp2 = Split(tmp1(i), "-")
If tmp2(UBound(tmp2)) Like "##.##" Then
ReDim Preserve tmp2(UBound(tmp2) - 1)
tmp1(i) = Join(tmp2, "-")
Next i
datas(lig1, 1) = Join(tmp1, ",")
Next lig1
[B3].Resize(Bond(datas)) = datas
Cdlt.
Quand j'essaie d'adapter le code avec mon fichier original, il me met une erreur dans la fonction "UBound" comme erreur de compilation : Tableau attendu.
Workbooks(nomcible).Activate
Workbooks(nomcible).Sheets("CNPE").Select
datas = Sheets("CNPE").Cells(Columns(2).Cells.Count, 3).End(xlUp).Row '[B3].Resize(Cells(Rows.Count, 1).End(xlUp).Row - 1).Value
For lig1 = 3 To UBound(datas)
tmp1 = Split(datas(lig, 1), ",")
For i = 0 To UBound(tmp1)
tmp2 = Split(tmp1(i), "-")
If tmp2(UBound(tmp2)) Like "##.##" Then
ReDim Preserve tmp2(UBound(tmp2) - 1)
tmp1(i) = Join(tmp2, "-")
Next i
datas(lig1, 1) = Join(tmp1, ",")
Next lig1
[B3].Resize(Bond(datas)) = datas
Cdlt.
Ré, je n'ai pas changé grande chose : juste active ma feuille ma feuille feuille et donnée au variable datas = la taille de mes données.
<Workbooks(nomcible).Activate >
<Workbooks(nomcible).Sheets("CNPE").Select >
<datas = Sheets("CNPE").Cells(Columns(2).Cells.Count, 3).End(xlUp).Row> '[B3].Resize(Cells(Rows.Count, 1).End(xlUp).Row - 1).Value
<For lig = 3 To UBound(datas) >
<tmp1 = Split(datas(lig, 1), ",")>
<For i = 0 To UBound(tmp1) >
<tmp2 = Split(tmp1(i), "-") >
<If tmp2(UBound(tmp2)) Like "##.##" Then >
<ReDim Preserve tmp2(UBound(tmp2) - 1)>
<tmp1(i) = Join(tmp2, "-")>
<Next i >
<datas(lig, 1) = Join(tmp1, ",") >
<Next lig >
<[B3].Resize(Bond(datas)) = datas>
>
<Workbooks(nomcible).Activate >
<Workbooks(nomcible).Sheets("CNPE").Select >
<datas = Sheets("CNPE").Cells(Columns(2).Cells.Count, 3).End(xlUp).Row> '[B3].Resize(Cells(Rows.Count, 1).End(xlUp).Row - 1).Value
<For lig = 3 To UBound(datas) >
<tmp1 = Split(datas(lig, 1), ",")>
<For i = 0 To UBound(tmp1) >
<tmp2 = Split(tmp1(i), "-") >
<If tmp2(UBound(tmp2)) Like "##.##" Then >
<ReDim Preserve tmp2(UBound(tmp2) - 1)>
<tmp1(i) = Join(tmp2, "-")>
<Next i >
<datas(lig, 1) = Join(tmp1, ",") >
<Next lig >
<[B3].Resize(Bond(datas)) = datas>
>
Bonjour
Je ne vois pas où est le problème
http://www.cjoint.com/c/FAzmOENgAqI
RQ. La proposition d'eric (salut à toi au passage) doit être un peu plus rapide que la mienne.
Cdlmnt
Je ne vois pas où est le problème
http://www.cjoint.com/c/FAzmOENgAqI
RQ. La proposition d'eric (salut à toi au passage) doit être un peu plus rapide que la mienne.
Cdlmnt
Bonjour ccm81,
Je souhaiterai adapter le code avec mon fichier original. Il est trop lourd parce qu'il a déjà pas mal de code derrière. Je vous explique un peu : l'idée était décroiser deux fichiersafin de créer un troisème. A la fin de ce dernier, il faut supprimer les versions.
le code d'Eric, c'est la fonction Ubound qui pose un problème car il ne trouve pas le tableau attendu. 1ier problème erreur :
<code></For lig = 1 To UBound(datas) >
Le 2iè est que si je crée un nouveau module : il me met une erreur sur la ligne <code></code ReDim Preserve tmp2(UBound(tmp2) - 1>
Je souhaiterai adapter le code avec mon fichier original. Il est trop lourd parce qu'il a déjà pas mal de code derrière. Je vous explique un peu : l'idée était décroiser deux fichiersafin de créer un troisème. A la fin de ce dernier, il faut supprimer les versions.
le code d'Eric, c'est la fonction Ubound qui pose un problème car il ne trouve pas le tableau attendu. 1ier problème erreur :
<code></For lig = 1 To UBound(datas) >
Le 2iè est que si je crée un nouveau module : il me met une erreur sur la ligne <code></code ReDim Preserve tmp2(UBound(tmp2) - 1>
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Merci pour ta réponse, le problème est qu'il faut supprimé les 6 derners caractères comportant "-01.03" car j'ai d'autres chaines caractères qui ne l'ont pas.
Exemple : il l' a :XENON-0D-20.00 par contre celle ci non ADELE.
Cdlmnt.