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

Signaler
Messages postés
15
Date d'inscription
vendredi 24 octobre 2008
Statut
Membre
Dernière intervention
28 octobre 2008
-
Messages postés
15
Date d'inscription
vendredi 24 octobre 2008
Statut
Membre
Dernière intervention
28 octobre 2008
-
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 :)

13 réponses

Messages postés
129
Date d'inscription
jeudi 28 octobre 2004
Statut
Membre
Dernière intervention
23 mai 2009

Bonjour, tu peux le faire comme ca
texte = Range("A1").Value
 occurence = Split(texte, ";")
MsgBox UBound(occurence)

Bon courage
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
36
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 <
Messages postés
15
Date d'inscription
vendredi 24 octobre 2008
Statut
Membre
Dernière intervention
28 octobre 2008

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
Messages postés
15
Date d'inscription
vendredi 24 octobre 2008
Statut
Membre
Dernière intervention
28 octobre 2008

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
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
36
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...
Messages postés
15
Date d'inscription
vendredi 24 octobre 2008
Statut
Membre
Dernière intervention
28 octobre 2008

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
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
25
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 !
Messages postés
577
Date d'inscription
vendredi 26 septembre 2008
Statut
Membre
Dernière intervention
20 novembre 2010
4
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
Messages postés
15
Date d'inscription
vendredi 24 octobre 2008
Statut
Membre
Dernière intervention
28 octobre 2008

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
Messages postés
577
Date d'inscription
vendredi 26 septembre 2008
Statut
Membre
Dernière intervention
20 novembre 2010
4
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
Messages postés
15
Date d'inscription
vendredi 24 octobre 2008
Statut
Membre
Dernière intervention
28 octobre 2008

Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
37
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 #   
Messages postés
15
Date d'inscription
vendredi 24 octobre 2008
Statut
Membre
Dernière intervention
28 octobre 2008

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.