[Catégorie modifiée VB6 -> VBA] splitter une colonne contenant caractères chiffr

cs_Pedro77 Messages postés 7 Date d'inscription jeudi 5 mai 2011 Statut Membre Dernière intervention 23 août 2013 - 5 mai 2011 à 14:10
Phalalis Messages postés 83 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 19 février 2012 - 11 mai 2011 à 14:18
Bonjour Mesdames, et Messieurs,

j'aurai besoin de votre aide, j'ai cherché sur votre forum, mais en tant que gros débutant, j'y comprends rien..

J'ai une colonne sur un tableur excel remplie de caractères lettres et chiffres à la suite, j'aurais aimé partagé ce code en plusieurs partie dans d'autres colonnes.

ex :
colonne que j'ai colonnes que je voudrai
10"HP35 10" HP 35
HP39 ? HP 39
6"EA21 6" EA 21

en fait il faudrait pouvoir dire 1ère colonne du 1er chiffre jusqu'à " inclus, deuxième colonne de la 1ère lettre jusquà 1er chiffre exclus, 3ème colonne jusqu'à fin


Question : Avant toute chose, est -il possible que VBA distingue les chiffres et les lettres ?

merci de votre aide et de votre compréhension pour un débutant ! ;)

8 réponses

Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
5 mai 2011 à 14:23
Bonjour,

Oui, VBA distingue très bien les chiffres et les lettres, il suffit de le lui dire.

Pour ton problème, je ne vois pas d'autre moyen que d'utiliser les fonctions Instr(), Mid$() et aussi de tester le code ASCII du caractère trouvé pour voir si c'est un chiffre ou non (Asc(0)=48 (de tête) et ainsi de suite... jusqu'à 9.)


Calade
0
cs_Pedro77 Messages postés 7 Date d'inscription jeudi 5 mai 2011 Statut Membre Dernière intervention 23 août 2013
5 mai 2011 à 16:53
ok... merci ça aurait pu m'être utile si ça avait pas été du chinois pour moi
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
5 mai 2011 à 16:56
C'est pas du chinois mais du VB6.
regarde chacun de ces termes dans l'aide en ligne et tu comprendras mieux.

Ensuite essaye de pondre du code et si tu as des problèmes reviens nous voir dans un autre post.


Calade
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 344
5 mai 2011 à 17:37
Bonjour,

Histoire de t'aider un peu...
voici un code qui te montre comment lire les cellules et tester pour chaque caracteres s'il s'agit d'un chiffre ou d'un apostrophe ou encore de texte...

Sub decoup()

' definition de la plage de cellule à traiter
Dim MaPlage As Range
Set MaPlage = Range("A1:A10")

'Boucle pour parcourir cellule plage de Maplage
For Each cell In MaPlage
    Valcell = cell.Value
    
    'boucle pour lire chaque caractere de la cellule
    For C = 1 To Len(Valcell)
        Caractere = Mid(Valcell, C, 1)
        ' Récupère le code ASCII du caractere
        codeAsci_Caractere = Asc(Caractere)
        
        ' test si le caractere est un chiffre, un " ou autre (texte)
        ' Le code ASCII du " est 34 en décimal.
        ' Le chiffres sont entre 48 et 57
        ' Le reste.. c'est du texte ou des caractères spéciaux.
        Select Case codeAsci_Caractere
        Case 48 To 58
            Debug.Print "ceci est un nombre"
        Case 34
            Debug.Print "ceci est un apostrophe "
        Case Else
            Debug.Print "ceci est du texte"
        End Select
        
    Next ' fin de la boucle C
Next ' Fin de la boucle Cell

End Sub


Pour ce qui est des valeurs ASCII des caractères, regardes sur le net : ( TABLE ASCII )

Ensuite, à toi d'adapter le code pour qu'il fasse ce dont tu as besoin. C'est à dire, copier les valeurs dans les colonnes.

Cordialement,
Jordane,
______________________________________________________
Règles du forum à lire avant de poster une question : ICI
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Pedro77 Messages postés 7 Date d'inscription jeudi 5 mai 2011 Statut Membre Dernière intervention 23 août 2013
6 mai 2011 à 13:39
Salut !

tout d'abord merci beaucoup pour votre aide! je commence à tatonner dans mon code, mais j'ai du mal pour quelques trucs :

  ' Le code ASCII du " est 34 en décimal.
        ' Le chiffres sont entre 48 et 57
        ' Le reste.. c'est du texte ou des caractères spéciaux.
        Select Case codeAsci_caractere
        
        Case 48 To 58: cell.Offset(0, 1) = Mid(cell, 1, InStr(1, cell, "'", vbTextMethod))              



en fait j'ai repris le code écrit par Jordane + donc une ligne pour prendre du 1er chiffre trouvé jusqu'au caractère guillemet (un apostrophe marchait pas...)
mais j'aurai plutot aimé du 1er chiffre jusqu'à soit le guillemet soit la 1ere lettre rencontrée, et là avec le code ascII je bloque, je sais pas cmt écrire le truc...
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
7 mai 2011 à 07:47
A mon avis, il vaut mieux passer par une fonction du style:

MyFonction(Byval Mystring as string) as string

Dans cette fonction tu regarderas caractère par caractère et au 1er trouvé qui t'intéresse tu renvoeis le début de la chaîne, si c'est ce qui t'intéresse.



Calade
0
cs_Pedro77 Messages postés 7 Date d'inscription jeudi 5 mai 2011 Statut Membre Dernière intervention 23 août 2013
11 mai 2011 à 13:13
Ok, merci à tous pour votre boulot !

j'ai essayé quelques trucs, ça n'a pas marché exactement comme je le voulais, mais ça m'a remis un peu sur VBA. la prochaine avec un truc vachement plus simple, je ferais une ptite macro histoire de me la péter ! ;)


Cdt, see you !
0
Phalalis Messages postés 83 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 19 février 2012 1
11 mai 2011 à 14:18
Bonjour,

Je vais peut être dire une bêtise mais si tu parcoure caractère par caractère tu peut utilisé
If IsNumeric(Variable) then
'Instruction
End if
pour tester si c'est un chiffre...Si ca l'est pas c'est que ta une lettre.

Après c'est sur qu'avec le code Ascii ta pas de souci mais t obligé de traiter tout les cas...
0
Rejoignez-nous