Compter le nombre d'occurence d'un caractere dans une cellule

jbb0306 Messages postés 15 Date d'inscription vendredi 24 octobre 2008 Statut Membre Dernière intervention 28 octobre 2008 - 24 oct. 2008 à 19:23
jbb0306 Messages postés 15 Date d'inscription vendredi 24 octobre 2008 Statut Membre Dernière intervention 28 octobre 2008 - 24 oct. 2008 à 23:10
Bonjour,
Je débute sous VBA et je souhaiterai ouvrir un fichier texte avec séparateur ';' sous excel.
Il faudrait que j'arrive à compter le nombre d'occurrence du caractère ';' dans la cellule A1 afin de me pouvoir faire un convertir de toute la colonne A en utilisant le caractere ';' comme separateur.

Merci d'avance pour votre aide :)
A voir également:

13 réponses

alosamoelle Messages postés 129 Date d'inscription jeudi 28 octobre 2004 Statut Membre Dernière intervention 23 mai 2009 1
24 oct. 2008 à 19:38
Bonjour, tu peux le faire comme ca
texte = Range("A1").Value
 occurence = Split(texte, ";")
MsgBox UBound(occurence)

Bon courage
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
24 oct. 2008 à 20:16
salut,

et sans doute que, après avoir chercher sur SPLIT, tu n'auras même plus besoin de ton calcul ;)

à noter (puisque

[../auteur/ALOSAMOELLE/369402.aspx alosamoelle]

ne l'a pas précisé ni déclaré) que split renvoit un tableau

sinon pour compter :


'    COMPTER LE NOMBRE
D'OCCURRENCE D'UNE CHAINE DANS UNE AUTRE
'    http://www.codyx.org/snippet_compter-nombre-occurrence-chaine-dans-autre_158.aspx#468
'    Posté par [ Renfield ] le 20/05/2006
<hr />





Public Function Count(ByRef vsInput As String, ByRef vsPattern As String, Optional ByVal veCompare As
VbCompareMethod = vbBinaryCompare)

As
Integer




Dim i As
Long
    i = InStr(1, vsInput, vsPattern,
veCompare)
    Do While i
        Count = Count
+ 1
        i = InStr(i + 1, vsInput, vsPattern,
veCompare)


    Loop
End
Function












++


Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp <
0
jbb0306 Messages postés 15 Date d'inscription vendredi 24 octobre 2008 Statut Membre Dernière intervention 28 octobre 2008
24 oct. 2008 à 21:07
Merci beaucoup pour votre réactivite ;)

J'arrive donc maintenant a récuperer le nombre de ';' qui correspond au nombre de colonne.
Maintenant, ce que je souhaite, c'est convertir les donnes de la colonne A en 7 colone (avec le ; comme separateur).
Je pensais utiliser le "morceau" de programme suivant obtenu avec l'enregistreur de macro :

Sub convert()

Columns("A:A").Select
Application.CutCopyMode = False
Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo _
:=Array(Array(1, 2), Array(2, 2), Array(3, 2), Array(4, 2), Array(5, 2), Array(6, 2), Array(7, 2), Array(8, 2)), TrailingMinusNumbers:=True

End Sub


en remplacant la partie du code avec les Array par une boucle allant de 1 au nombre de ";"

c'est à dire quelquechose du genre :

Sub compt()


texte = Range("A1").Value
occurence = Split(texte, ";")
a = UBound(occurence)


Columns("A:A").Select
Application.CutCopyMode = False
Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo _
:For i 1 To a
Array(Array(i, 2),
Next
Array(i+1, 2))

, TrailingMinusNumbers:=True

End Sub

Mais cela ne fonctionne pas :(

Pouvez vous m'aidez?

Merci,
jbb
0
jbb0306 Messages postés 15 Date d'inscription vendredi 24 octobre 2008 Statut Membre Dernière intervention 28 octobre 2008
24 oct. 2008 à 21:08
désolé pour la mise en forme de mon précédent message, je comprend pas pourquoi il n'y a pas de retour à la ligne
0

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

Posez votre question
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
24 oct. 2008 à 21:17
relis mon précédent message :


split renvoit un tableau




ps : si tu valides déjà une réponse, il y aura moins de lecteurs...
0
jbb0306 Messages postés 15 Date d'inscription vendredi 24 octobre 2008 Statut Membre Dernière intervention 28 octobre 2008
24 oct. 2008 à 21:20
Ok
split renvoie un tableau, c'est pour cela que j'ai stocké la valeur (a = UBound(occurence) )
pour ensuite la réutilisée, mais je ne parvient pas a faire ce que je veux
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
24 oct. 2008 à 21:34
Bonsoir,

Il me semble que :
- tu as obtenu la réponse à ta question, telle qu'elle était posée...
- tu poses maintenant une nouvelle question ===>> nouvelle question ? discussion distincte, s'il te plait !
0
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 4
24 oct. 2008 à 21:43
Bonjour jbb0306



Sur la forme : je sais qu'il est impoli de s'immiscer dans une conversation, mais mon manque d'éducation est notoire et a fait, en son temps, le désespoir de ma famille et de mes professeurs 

Sur le fond : pour éclater le contenu de la cellule A1 en n colonnes, la boucle proposée par PCPT est bien adaptée :

Public Function Count(ByRef vsInput As String, ByRef vsPattern As String, Optional ByVal veCompare As VbCompareMethod = vbBinaryCompare) As Integer

Dim i As Long, j As Long
    i = InStr(1, vsInput, vsPattern, veCompare)
    j = 1
    Do While i
        Count = Count + 1
        Cells(1, Count).Value = Mid(vsInput, j, i - j)
        j = i + 1
        i = InStr(i + 1, vsInput & vsPattern , vsPattern, veCompare)

    Loop
    Count = Count - 1 ' ma boucle fait un cycle de plus que celle de PCPT
End Function

Cordialement
0
jbb0306 Messages postés 15 Date d'inscription vendredi 24 octobre 2008 Statut Membre Dernière intervention 28 octobre 2008
24 oct. 2008 à 22:11
Merci orohena,
le pb c'est que je ne connais pas VBA et je ne sais pas comment appeler cette fonction tout en disant que je veut que toutes les lignes de la colonne A soient eclatées sur les colonnes A1:Ax avec x le nombre de separateur.

Merci d'avance,

jbb0306
0
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 4
24 oct. 2008 à 22:37
jbb0306,


Je suis disposé à te répondre, mais pour cela tu devras créer une nouvelle discussion. Relis les messages de PCPT et jfmmarques, stp.

Cordialement
0
jbb0306 Messages postés 15 Date d'inscription vendredi 24 octobre 2008 Statut Membre Dernière intervention 28 octobre 2008
24 oct. 2008 à 22:48
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
24 oct. 2008 à 23:01
Ou j'ai pas tout compris à la question, mais pourquoi faire une telle usine à gaz pour ouvrir un fichier avec séparateur ; (fichier csv) alors qu'Excel sait très bien le faire tout seul.

Si tu dois le faire par le code utilise la fonction WorkBook.open

voir ce message d'hier : http://www.vbfrance.com/forum/sujet-OUVERTURE-FICHIER-CSV_1218561.aspx

---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #   
0
jbb0306 Messages postés 15 Date d'inscription vendredi 24 octobre 2008 Statut Membre Dernière intervention 28 octobre 2008
24 oct. 2008 à 23:10
effectivement,
avec cette methode j'arive a ouvrir un fichier texte avec separateur ';' mais le pb c'est que j'ai des colonnes avec des chiffre et certaines cellules commencent par des 0 que je dois garder, ce qui n'est pas le cas lorsque j'utilise cette méthode.
En utilisant Données--> convertir depuis excel, il est possible de preciser qu'il faut lire les données au format texte, ce qui permet de garder les 0 a gauche.
0
Rejoignez-nous