Extraire chaine de caractères
Résolu/Fermé
moseca
Messages postés
32
Date d'inscription
samedi 19 avril 2014
Statut
Membre
Dernière intervention
17 mai 2022
-
17 mai 2014 à 04:08
Raymond PENTIER Messages postés 58731 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 23 novembre 2024 - 19 mai 2014 à 23:45
Raymond PENTIER Messages postés 58731 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 23 novembre 2024 - 19 mai 2014 à 23:45
A voir également:
- Extraire chaine de caractères
- Extraire une video youtube - Guide
- Caractères ascii - Guide
- Chaine tnt gratuite sur mobile - Guide
- Caractères spéciaux clavier azerty - Guide
- Extraire son video - Guide
7 réponses
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
17 mai 2014 à 22:51
17 mai 2014 à 22:51
Bonjour
En me basant sur la présentation de ton lien #2 à 5:12
cette macro utilise les relations régulières et écrit les Nombres en ent^te de ligne et les groupes de lettres en ent^te de colonnes de tableau
la macro est paramétrée pour permettre l'usage de plusieurs recherches
La maquette de W
https://www.cjoint.com/?3ErwUdD1Etx
En espérant une réponse (bonne ou mauvaise)....
En me basant sur la présentation de ton lien #2 à 5:12
cette macro utilise les relations régulières et écrit les Nombres en ent^te de ligne et les groupes de lettres en ent^te de colonnes de tableau
la macro est paramétrée pour permettre l'usage de plusieurs recherches
Option Explicit
Sub test()
decouper_chiffres_lettres Range("B1").Value, "C4"
End Sub
Sub decouper_chiffres_lettres(Texto, restitution)
Dim Reg As Object
Dim Extraction As Object, Digit As Object
Dim T_chiffres, Idx As Byte, T_pos, T_lettres, Depart As Byte
Application.ScreenUpdating = False
Set Reg = CreateObject("vbscript.regexp")
Reg.Global = True
Reg.Pattern = "(\d?\d)"
Texto = Range("B1")
Set Extraction = Reg.Execute(Texto)
ReDim T_chiffres(Extraction.Count - 1)
ReDim T_pos(Extraction.Count - 1)
For Each Digit In Extraction
T_pos(Idx) = Digit.Firstindex + 1
T_chiffres(Idx) = Digit.Value
Idx = Idx + 1
Next
ReDim T_lettres(UBound(T_pos))
For Idx = 0 To UBound(T_pos) - 1
Depart = T_pos(Idx) + Len(T_chiffres(Idx))
T_lettres(Idx) = Mid(Texto, T_pos(Idx) + Len(T_chiffres(Idx)), T_pos(Idx + 1) - Depart)
Next
T_lettres(Idx) = Right(Texto, Len(Texto) - T_pos(Idx) - 1)
Range(restitution).Offset(1, 0).Resize(Extraction.Count, 1) = Application.Transpose(T_chiffres)
Range(restitution).Offset(0, 1).Resize(1, UBound(T_pos) + 1) = T_lettres
End Sub
La maquette de W
https://www.cjoint.com/?3ErwUdD1Etx
En espérant une réponse (bonne ou mauvaise)....
Raymond PENTIER
Messages postés
58731
Date d'inscription
lundi 13 août 2007
Statut
Contributeur
Dernière intervention
23 novembre 2024
17 244
17 mai 2014 à 04:52
17 mai 2014 à 04:52
ça ne semble pas facile ! envoie toujours le fichier ; ça peut aider ...
moseca
Messages postés
32
Date d'inscription
samedi 19 avril 2014
Statut
Membre
Dernière intervention
17 mai 2022
17 mai 2014 à 05:12
17 mai 2014 à 05:12
VOILA LE LIEN. MERCI
https://www.cjoint.com/?DErflB7ZKt1
https://www.cjoint.com/?DErflB7ZKt1
Raymond PENTIER
Messages postés
58731
Date d'inscription
lundi 13 août 2007
Statut
Contributeur
Dernière intervention
23 novembre 2024
17 244
17 mai 2014 à 05:37
17 mai 2014 à 05:37
Puisque le nombre-test varie de 1 à 15, il faudrait toujours saisir 2 chiffres, et remplacer 1ABC2BCD3CDA par 01ABC02BCD03CDA
Et dans la feuille Excel, à la place des nombres 1, 2, 3, 4, 11 des cellules A5:A9, il faudrait mettre les textes '01, '02, '03, '04, '11 ...
et tout marchera alors très bien !
Et dans la feuille Excel, à la place des nombres 1, 2, 3, 4, 11 des cellules A5:A9, il faudrait mettre les textes '01, '02, '03, '04, '11 ...
et tout marchera alors très bien !
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
ccm81
Messages postés
10903
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
19 novembre 2024
2 427
17 mai 2014 à 12:11
17 mai 2014 à 12:11
Bonjour
Comme dit Raymond (salut à toi), difficile sans changer le format de tes saisies, sinon, il y a des solutions via une macro
https://www.cjoint.com/?3ErmjY42Q1w
Cdlmnt
Comme dit Raymond (salut à toi), difficile sans changer le format de tes saisies, sinon, il y a des solutions via une macro
https://www.cjoint.com/?3ErmjY42Q1w
Cdlmnt
moseca
Messages postés
32
Date d'inscription
samedi 19 avril 2014
Statut
Membre
Dernière intervention
17 mai 2022
17 mai 2014 à 16:10
17 mai 2014 à 16:10
Salut! Je pense que ca marche par macro, je te remercie!!
Bonjour,
J'ai une autre question. J'ai un fichier de base que les autres usagers doivent utiliser comme modèle. Mais je ne veux pas qu'il altère le fichier. Alors, je veux que quand un usager clique sur sauver il apparaît un interface pour lui demande de sauvegarder sous....Il peut alors sauver les changement dans la version renommée. Donc le fichier initial ne sera pas altéré car personne ne peut le sauver avec des changements.
Comment faire ça? MERCI ENCORE
J'ai une autre question. J'ai un fichier de base que les autres usagers doivent utiliser comme modèle. Mais je ne veux pas qu'il altère le fichier. Alors, je veux que quand un usager clique sur sauver il apparaît un interface pour lui demande de sauvegarder sous....Il peut alors sauver les changement dans la version renommée. Donc le fichier initial ne sera pas altéré car personne ne peut le sauver avec des changements.
Comment faire ça? MERCI ENCORE
Raymond PENTIER
Messages postés
58731
Date d'inscription
lundi 13 août 2007
Statut
Contributeur
Dernière intervention
23 novembre 2024
17 244
19 mai 2014 à 23:45
19 mai 2014 à 23:45
C'est simple : tu ne communiques le fichier modèle à personne ; tu fournis chaque fois une copie avec le nom qui te convient ...
tontong
Messages postés
2567
Date d'inscription
mercredi 3 février 2010
Statut
Membre
Dernière intervention
20 novembre 2024
1 059
17 mai 2014 à 12:23
17 mai 2014 à 12:23
Bonjour à tous,
Comme les nombres vont de 1 à 15 le chiffre des dizaines est 1 ou rien.
En C4 on vérifie si B1 contient 1EBT sans contenir 11EBT ce qui donne:
=SI(ET(ESTERREUR(TROUVE(CONCATENER($A5;1;C$4);$B$1;1));ESTNUM(TROUVE(CONCATENER($A5;C$4);$B$1;1)));$A$1;0)
On peut alléger:
=SI(ET(ESTERREUR(TROUVE($A5&1&C$4;$B$1;1));ESTNUM(TROUVE($A5&C$4;$B$1;1)));$A$1;0)
Comme les nombres vont de 1 à 15 le chiffre des dizaines est 1 ou rien.
En C4 on vérifie si B1 contient 1EBT sans contenir 11EBT ce qui donne:
=SI(ET(ESTERREUR(TROUVE(CONCATENER($A5;1;C$4);$B$1;1));ESTNUM(TROUVE(CONCATENER($A5;C$4);$B$1;1)));$A$1;0)
On peut alléger:
=SI(ET(ESTERREUR(TROUVE($A5&1&C$4;$B$1;1));ESTNUM(TROUVE($A5&C$4;$B$1;1)));$A$1;0)
moseca
Messages postés
32
Date d'inscription
samedi 19 avril 2014
Statut
Membre
Dernière intervention
17 mai 2022
17 mai 2014 à 16:10
17 mai 2014 à 16:10
Oui je comprend mais je ne peux contrôler la saisie, mais je pense que la macro fournie par ccm81 marche. merci!
18 mai 2014 à 05:16
Je vous remercie!! C'est génial.
18 mai 2014 à 07:51
dans la macro, enlever la ligne
Texto = Range("B1")
erreur de précipitation: vu l'heure de réponse, envie d'aller au dodo....
18 mai 2014 à 15:56