Identifier des lettres et des chiffres dans une série de caractères

cell69

XLDnaute Nouveau
Bonjour,
Voici mon problème.
J'ai une série de codes dans une colonne, composés de chiffres et de lettres suivant les cas, dont le nombre varie de de 5 à 10 caractères.
J'ai besoin de créer une colonne d'agrégats à côté selon des critères assez pointus :
Exemple :
Tous les codes commençant par deux chiffres comme 35 ou autre, devront avoir tel agrégat dans la colonne adjacente.
Les codes commençant par deux lettres comme TW, ce sera tel agrégat.
Les codes commençant par deux chiffres puis une lettre, ce sera tel agrégat.
Et la cerise, les codes commençant tels chiffres et se finissant par telle lettre..
J'ai joint un petit tableau pour expliquer.

Voilà je vous remercie d'avance, perso je n'ai aucune base pour décortiquer une série de caractères dans excel, surtout pour faire la différence entre des chiffres et des lettres.

Merci
 

Pièces jointes

  • Test.xlsx
    10.1 KB · Affichages: 82
  • Test.xlsx
    10.1 KB · Affichages: 87
  • Test.xlsx
    10.1 KB · Affichages: 84

youky(BJ)

XLDnaute Barbatruc
Re : Identifier des lettres et des chiffres dans une série de caractères

Bonjour cell69,
Essaies ceci. Bien sur avec moi c'est avec macro
Bruno

Code:
Sub agregats()
For Each c In Range("B2:B" & [B65000].End(3).Row)
If Left(c, 2) = "TW" Then c.Offset(, 1) = "EX"
If Left(c, 2) = "85" Then c.Offset(, 1) = "PA"
If Left(c, 2) = "90" Then c.Offset(, 1) = "FAX"
If IsNumeric(Left(c, 2)) And Not IsNumeric(Mid(c, 3, 1)) Then c.Offset(, 1) = "AT"
Next
End Sub
 

piga25

XLDnaute Barbatruc
Re : Identifier des lettres et des chiffres dans une série de caractères

Bonjour cell69

Salut Youky, Pierrejean

pour ma part j'avais ceci et uniquement avec les fonctions excel, mais je vois que vos solutions sont tops
Juste pour le fun :
=SI(B3="";"";SI(GAUCHE(B3;2)="TW";"EX";SI(GAUCHE(B3;2)="85";"PA";SI(ET(GAUCHE(B3;2)="90";DROITE(B3;1)="A");"FAX";SI(ET(CODE(GAUCHE(B3;1))<58;CODE(DROITE(GAUCHE(B3;2);1))<58;CODE(DROITE(GAUCHE(B3;3);1))>57);"AT";"")))))
 

cell69

XLDnaute Nouveau
Re : Identifier des lettres et des chiffres dans une série de caractères

Bonjour,
Bon je me suis un peu arraché les cheveux, entre-temps le besoin a évolué et j'ai essayé de le simplifier parce que on s'en sortait plus.
Ci-dessous j'ai repris le code de youky, en essayant de l'ajuster de manière intuitive, sachant que je suis une quille en VBA, mais juste pour rendre le besoin compréhensible.
Il manquerait à ce code, deux lignes :
Une qui prendrait tous les codes qui ont deux lettres, et qui ne font pas partie des exceptions notées (TW, JP..etc) => agrégat : ZZ
Une qui prendrait tous les codes à deux chiffres et plus qui ne font pas partie des exceptions notées (00AF, 00R..etc) => agrégat : XX.
Sub agregats()
For Each c In Range("B2:B" & [B65000].End(3).Row)
If Left(c, 2) = "TW" Then c.Offset(, 1) = "TW"
If Left(c, 2) = "US" Then c.Offset(, 1) = "NA"
If Left(c, 2) = "CA" Then c.Offset(, 1) = "NA"
If Left(c, 2) = "JP" Then c.Offset(, 1) = "JP"
If Left(c, 2) = "HG" Then c.Offset(, 1) = "HG"
If Left(c, 2) = "DE" Then c.Offset(, 1) = "DE"
If Left(c, 2) = "CH" Then c.Offset(, 1) = "CH"
If Left(c, 4) = "00AF" Then c.Offset(, 1) = "00AF"
If Left(c, 4) = "00AP" Then c.Offset(, 1) = "00AP"
If Left(c, 4) = "00AL" Then c.Offset(, 1) = "00AL"
If Left(c, 4) = "00LU" Then c.Offset(, 1) = "00LU"
If Left(c, 4) = "00LY" Then c.Offset(, 1) = "00LY"
If Left(c, 3) = "00R" Then c.Offset(, 1) = "00R"
If Left(c, 3) = "00S" Then c.Offset(, 1) = "00S"
If Left(c, 3) = "00C" Then c.Offset(, 1) = "00C"
If Left(c, 3) = "00G" Then c.Offset(, 1) = "00G"
If IsNumeric(Left(c, 2)) And Not IsNumeric(Mid(c, 3, 1)) Then c.Offset(, 1) = "AT"
Next
End Sub

Un petit tableau à jour ci-joint.

@Piga25 : j'ai bien compris la logique de la formule avec les fonctions GAUCHE et DROITE, par contre je suis paumé sur le sens de la fonction CODE..
Je suis preneur en VBA ou fonction normale..

Merci à vous.
Cordialement
Cell69
 

Pièces jointes

  • Test2.xlsx
    12.2 KB · Affichages: 57
  • Test2.xlsx
    12.2 KB · Affichages: 70
  • Test2.xlsx
    12.2 KB · Affichages: 68

piga25

XLDnaute Barbatruc
Re : Identifier des lettres et des chiffres dans une série de caractères

Bonjour,

un essai avec ceci

VB:
Sub agregats()
 For Each c In Range("B2:B" & [B65000].End(3).Row)
 If IsNumeric(Left(c, 2)) And Not IsNumeric(Mid(c, 3, 1)) Then c.Offset(, 1) = "ZZ"
 If Left(c, 2) = "TW" Then c.Offset(, 1) = "TW"
 If Left(c, 2) = "US" Then c.Offset(, 1) = "US"
 If Left(c, 2) = "CA" Then c.Offset(, 1) = "CA"
 If Left(c, 2) = "JP" Then c.Offset(, 1) = "JP"
 If Left(c, 2) = "HG" Then c.Offset(, 1) = "HG"
 If Left(c, 2) = "DE" Then c.Offset(, 1) = "DE"
 If Left(c, 2) = "CH" Then c.Offset(, 1) = "CH"
 If Left(c, 4) = "00AF" Then c.Offset(, 1) = "00AF"
 If Left(c, 4) = "00AP" Then c.Offset(, 1) = "00AP"
 If Left(c, 4) = "00AL" Then c.Offset(, 1) = "00AL"
 If Left(c, 4) = "00LU" Then c.Offset(, 1) = "00LU"
 If Left(c, 4) = "00LY" Then c.Offset(, 1) = "00LY"
 If Left(c, 3) = "00R" Then c.Offset(, 1) = "00R"
 If Left(c, 3) = "00S" Then c.Offset(, 1) = "00S"
 If Left(c, 3) = "00C" Then c.Offset(, 1) = "00C"
 If Left(c, 3) = "00G" Then c.Offset(, 1) = "00G"
 If Left(c, 3) = "00D" Then c.Offset(, 1) = "00D"
 
 Next
 End Sub

Pour info la fonction CODE renvoie le numéro de code du premier caractère du texte. Le code renvoyé correspond au jeu de caractères utilisé par votre ordinateur.
 
Dernière édition:

youky(BJ)

XLDnaute Barbatruc
Re : Identifier des lettres et des chiffres dans une série de caractères

Bonjour à tous,
Piga, tu as oublié les XX alors je mets mon code qui est fait.
Bruno
Code:
Sub agregats()
 For Each c In Range("B2:B" & [B65000].End(3).Row)
 If c.Value = "" Then GoTo bas
 If Left(c, 2) = "TW" Then c.Offset(, 1) = "TW": GoTo bas
 If Left(c, 2) = "US" Then c.Offset(, 1) = "NA": GoTo bas
 If Left(c, 2) = "CA" Then c.Offset(, 1) = "NA": GoTo bas
 If Left(c, 2) = "JP" Then c.Offset(, 1) = "JP": GoTo bas
 If Left(c, 2) = "HG" Then c.Offset(, 1) = "HG": GoTo bas
 If Left(c, 2) = "DE" Then c.Offset(, 1) = "DE": GoTo bas
 If Left(c, 2) = "CH" Then c.Offset(, 1) = "CH": GoTo bas
 If Left(c, 4) = "00AF" Then c.Offset(, 1) = "00AF": GoTo bas
 If Left(c, 4) = "00AP" Then c.Offset(, 1) = "00AP": GoTo bas
 If Left(c, 4) = "00AL" Then c.Offset(, 1) = "00AL": GoTo bas
 If Left(c, 4) = "00LU" Then c.Offset(, 1) = "00LU": GoTo bas
 If Left(c, 4) = "00LY" Then c.Offset(, 1) = "00LY": GoTo bas
 If Left(c, 3) = "00R" Then c.Offset(, 1) = "00R": GoTo bas
 If Left(c, 3) = "00S" Then c.Offset(, 1) = "00S": GoTo bas
 If Left(c, 3) = "00C" Then c.Offset(, 1) = "00C": GoTo bas
 If Left(c, 3) = "00G" Then c.Offset(, 1) = "00G": GoTo bas
 If IsNumeric(Left(c, 2)) And Not IsNumeric(Mid(c, 3, 1)) Then c.Offset(, 1) = "AT": GoTo bas
 If Not IsNumeric(Left(c, 2)) Then c.Offset(, 1) = "ZZ"
 If IsNumeric(Left(c, 2)) And Left(c, 2) > 0 Then c.Offset(, 1) = "XX"
bas:
 Next
 End Sub
 

cell69

XLDnaute Nouveau
Re : Identifier des lettres et des chiffres dans une série de caractères

Bonjour,
Vous êtes bien réactifs :)
Par contre pour activer la macro ya une manip particulière?
J'ai copier/coller le code dans le tableur créer la macro (voir capture jointe).
Les codes sont dans B5 en fait et la celulle qui réceptionne l'agrégat en H, donc j'ai tapé =agregats(B5) dans H, mais j'ai un message comme quoi le nom n'est pas valide?
Merci
cell69
 

Pièces jointes

  • capture test.docx
    209.3 KB · Affichages: 66

youky(BJ)

XLDnaute Barbatruc
Re : Identifier des lettres et des chiffres dans une série de caractères

Aie Aie Aie !!!
cell69, je pense que tu fais une grosse confusion.
Mon voisin .... PierreJean ....que je salut
à écrit une macro qui est ce qui s'appelle une fonction.
Elle est appelée lorque tu mets exemple =agregat(B3) et éventuellement recalculée.

Par contre ma macro ne s'utilise pas ainsi. (pas de formules)
Il faut aller voir les macros (menu>Affichage>Macro>Afficher les macros > Exécuter )
La macro mets tout à jour et passe par toutes les lignes , elle doit être copiée en Module1
Si en VBA(Alt+F11) tu n'as pas encore de module faire Insertion>Module et copier ma macro dedans

Je pense mettre fait comprendre, il faut aussi un début à tout.
Voici un fichier avec le Module1 et la macro
Bruno
 

Pièces jointes

  • Test200.xlsm
    16.2 KB · Affichages: 67

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 105
Messages
2 085 350
Membres
102 870
dernier inscrit
Armisa