"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
re
sinon encore plus simple
le trim est la au cas ou l'occurence a la fin n'y serait pas
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 toto = "RFE-A748E954125-A" MsgBox Trim(Replace(toto & " ", "-A ", ""))
ou meme
edit:
Code : Sélectionner tout - Visualiser dans une fenêtre à part MsgBox Replace(Replace(toto & "||", "-A||", ""), "||", "")
correction au cas ou il y aurait un espace a la fin
le replace qui englobe le premier est la au cas ou l'occurence a la fin n'y serait pas
Code : Sélectionner tout - Visualiser dans une fenêtre à part MsgBox Replace(Replace(Trim(toto) & "||", "-A||", ""), "||", "")
mes fichiers dans les contributions:
mail avec CDO en vba et mail avec CDO en vbs dans un HTA
survol des bouton dans userform
prendre un cliché d'un range
si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
et n'oublie pas de voter
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
bonjour Pierre Fauconnier
oui si il y a des espaces dans la chaine
le 2d exemple devrait fonctionner surtout ques caracteres temporaires sont rarement utilisés
mes fichiers dans les contributions:
mail avec CDO en vba et mail avec CDO en vbs dans un HTA
survol des bouton dans userform
prendre un cliché d'un range
si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
et n'oublie pas de voter
On ne tire pas des conclusions de codage du fait que certains caractères sont rarement utilisés. Il suffira que ces caractères soient utilisés une fois pour tout foutre par terre.
Si la règle est de supprimer "-A", "-B", "-C" lorsqu'il est en fin de chaîne, on ne peut que se baser sur cette règle pour écrire le code et sur aucune autre que l'on déduirait d'une liste d'exemple ou d'une non-utilisation supposée de caractères dans une chaîne. Sauf bien entendu si la règle énonce clairement cette impossibilité d'utilisation de certains caractères.
C'est pourquoi je préfère le formalisme des regex qui permet de déterminer les terminaisons envisagées. (L'astuce de Unparia devant être répétée pour chaque finale envisagée (-A, -B, ...)
L'avantage des regex, c'est que s'il s'avérait que finalement, on doive supprimer toutes les fins avec - + une majuscule, on n'aurait qu'à modifier le pattern de la regex pour y arriver...
"(-[A-C])$" deviendrait simplement "(-[A-Z])$" par exemple, et ce serait la seule modification à apporter au code (on pourrait d'ailleurs variabiliser ce pattern).
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
re
oui moi aussi perso je prefere de loin le regex dans ton exemple c'est categorique il ne peut pas y avoir d'erreur argument +fin de chaine "$"
c'est juste pour faire mes petites experiences avec les outils d'exel
mes fichiers dans les contributions:
mail avec CDO en vba et mail avec CDO en vbs dans un HTA
survol des bouton dans userform
prendre un cliché d'un range
si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
et n'oublie pas de voter
Bonjour,
Pour rester sur une ligne à partir de l'idée de Jacques :
On cumule les Replace...
En espérant qu'il n'y ait pas 37 caractères à éviter...
Ne fonctionne pas...
Cordialement,
Franck
Et sans passer par un objet Regex, en utilisant une chaine inversée, on peut avoir
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Sub TEst() Dim cell As Range For Each cell In Range("a1:a5") If StrReverse(cell.Value) Like "[A-C]-*" Then cell.Value = Left(cell.Value, Len(cell.Value) - 2) Next End Sub
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
Je m'étais arrêté au tout premier message et n'avais pas vu que la demande avait ensuite été modifiée pour inclure toute autre lettre également.
Voilà alors une autre manière
ou encore :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 toto = "RFE-A748954125-B" If Right(toto, 2) Like "-[A-Z]" Then toto = Left(toto, Len(toto) - 2) MsgBox toto
parmi d'autres (une floppée + 15) possibles
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 toto = "RFE-A748954125-B" If toto Like "*-[A-Z]" Then toto = Left(toto, Len(toto) - 2) MsgBox toto
Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .
****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...
Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.
Oui Jacques,
Ta seconde solution, je la donnais déjà au message 10, puis je ne sais pas pourquoi, je me suis dit qu'elle ne fonctionnait pas si on avait "-[A-C]" en milieu de chaine, alors qu'elle fonctionne très bien... ^^
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
bonjour,
une question importante (pour moi )
est ce qu'il faut supprimer toutes les fin dont le deuxième caractère de droite est "-" ? --> -A,-B,-C,...,-Z
@+JP
Caractéristiques (WEB) phpMyAdmin 4-74 , PHP 5-631 , Apache 2-427 , MySQL 5-719
Présentation NAS DS-3615xs + 20Go , DSM 6.1.6-15266 Up1 , 12 * WD 4To WD4000F9YZ (10 raid 6+ )+(2 raid 1+) , LinkSys comutateur-switch lgs528p-eu , Onduleur UPS 720W Power Boxx Lcd (4*UPS + 4*MOD)
Mes contributions (EXCEL) Form GRAPHIQUE: Gestion des boutons , Liste Onglet dynamique...GESTION de FILM
De toute manière via Like "*-[A-Z]" …
C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)
Oui Pierre
Les solutions ne manquent vraiment pas.
En voilà une autre encore
Je dois maintenant partir, mais suis certain de ce que l'utilisation de StrConv permettrait une accélération, bien qu'avec 3 ou 4 lignes de code en plus. Serait avantageux si le nombre de chaînes à traiter est très important.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 toto = "RFE-A748954125-V" Dim titi titi = Split(toto, "-") Select Case titi(UBound(titi)) Case "A" To "Z" ReDim Preserve titi(UBound(titi) - 1) End Select MsgBox Join(titi, "-")
Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .
****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...
Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.
Si la règle était celle-là, on pourrait effectivement faire simple avec If toto Like "*-?" Then...
Comme souvent, c'est une définition claire et reprenant de façon exhaustive les cas à traiter qui permet d'aller au plus court vers la bonne solution...
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
Salut,
Ne voulant pas rester sur un échec....
Les solutions ne manquent effectivement pas...
Je reprends l'idée de Jacques (unparia pour ceux qui ne fréquentent pas régulièrement le forum...) :
Résultat :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 Option Explicit Sub t() Debug.Print Verif_toto("RFE-A748954125", "A", "B", "C") Debug.Print Verif_toto("RFE-A748954125-A", "A", "B", "C") Debug.Print Verif_toto("RFE-A748954125-B", "A", "B", "C") Debug.Print Verif_toto("RFE-A748954125-C", "A", "B", "C") Debug.Print Verif_toto("RFE-A748954125-D", "A", "B", "C") Debug.Print Verif_toto("RFE-A748954125-", "A", "B", "C") End Sub Private Function Verif_toto(texto As String, a As String, b As String, c As String) As String Dim s As String s = texto If Right(s, 2) Like "-[" & a & "-" & c & "]" Then s = Left(s, Len(s) - 2) & Replace(Replace(Replace(s, "-" & a, "", Len(s) - 2), s, "-" & b, Len(s) - 2), "-" & c, "") End If Verif_toto = s End Function
Par contre, je voudrais bien une explication sur le :RFE-A748954125
RFE-A748954125
RFE-A748954125
RFE-A748954125
RFE-A748954125-D
RFE-A748954125-
qui donne 5 alors que le Start du Replace se situe après le 5...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 toto = "RFE-A748954125-A" Replace(toto, "-A", "", Len(toto) - 2)
Cordialement,
Franck
re
j'entrevois qu'une explication
C EST L INDEXATION
de la meme maniere que un element(i) dans un tableau et le ième+1 DU TABLEAU l'indexation commencant par zero pour le premier
je jure de rien mais en meme temps il y a une logique
car sinon start 1 vaudrais la premiere lettre de la chaine elle serait donc carrément zappée par la mecanique
mes fichiers dans les contributions:
mail avec CDO en vba et mail avec CDO en vbs dans un HTA
survol des bouton dans userform
prendre un cliché d'un range
si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
et n'oublie pas de voter
Replace(toto, "-A", "", Len(toto) - 2)
Len(toto) - 2 veut dire que la chaîne utilisée pour le REPLACE commence à partir de l'antépénultième caractère. Le résultat de ce REPLACE contiendra donc soit UN soit TROIS caractères selon que "-A" est trouvé dedans ou pas. Il suffit de coller ce résultat à la chaîne initiale tronquée des trois derniers caractères pour composer la chaîne résultante finale.
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
merci Pierre Fauconnier
mes fichiers dans les contributions:
mail avec CDO en vba et mail avec CDO en vbs dans un HTA
survol des bouton dans userform
prendre un cliché d'un range
si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
et n'oublie pas de voter
j'aurais personnellement tendance à faire ce à quoi je suis systématiquement enclin, c'est-à-dire ouvrir mon aide interne VBA à la rubrique Replace, Fonction
L'explication demandée y est exposée ici :
Amitiés à tousRemarques
La valeur renvoyée par la fonction Replace est une chaîne, une fois les substitutions effectuées, qui commence à la position spécifiée par l'argument start et se termine à la fin de la chaîne expression. Il ne s'agit pas d'une copie de la chaîne d'origine du début à la fin.
Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .
****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...
Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.
Je pense que beaucoup ne savent pas ceci
Il ne s'agit pas d'une copie de la chaîne d'origine du début à la fin.
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager