Petite macro Excel

Bonjour à tous et merci pour ce forum et ceux qui y participent pour aider les autres comme moi nul en developpement et surtout en excel et VBA...

J'ai essayé plusieurs fois sans succès de réaliser une petite fonction permettant d'isoler et de compter le nombre de mots compris dans une phrase et repercuter le résultat dans des cellules a part. Exemple :

phrase "je vais je suis je vais"

=> résultat :

je = 3

vais = 2

suis =1

Quelqu'un aurait il une petite fonction pour m'aider ?

D'avance je vous remercie.

Seb

Bonjour,

Une piste avec un dictionnaire !

Le résultat de l'appel de la fonction "Compter()" par la Sub "Test()" est inscrit dans la fenêtre d'exécution (Ctrl+G).

Pour l'utilisation dans le classeur, tu entres la formule =Compter(A1) où A1 contient le texte ensuite, il te faut sélectionner la cellule contenant la formule ainsi que les cellules de deux lignes sur plusieurs colonnes (tableau en horizontal) puis valider par Ctrl+Maj+Entrée. Il te faut sélectionner suffisamment de cellules, les excedentes contiendront #N/A il te suffira de modifier le tableau. Si tu veux le résultat en vertical, il faut changer les dimensions du tableau dans la fonction :

Sub Test()

    Dim Tbl() As Variant
    Dim Chaine As String
    Dim I As Long

    Chaine = "je vais je suis je vais"

    Tbl = Compter(Chaine)

    'dans la fenêtre d'exécution (Ctrl+G)
    For I = 1 To UBound(Tbl, 2)

        Debug.Print "nombre de mot : "; Tbl(2, I); " ---> "; Tbl(1, I)

    Next I

End Sub

Function Compter(Chaine As String) As Variant()

    Dim Dico As Object
    Dim Tablo() As Variant
    Dim Cle As Variant
    Dim Tbl As Variant
    Dim I As Long

    Set Dico = CreateObject("Scripting.Dictionary")

    Tbl = Split(Chaine, " ")

    For I = 0 To UBound(Tbl)

        Dico(Tbl(I)) = Dico(Tbl(I)) + 1

    Next

    I = 0

    For Each Cle In Dico.Keys

        I = I + 1: ReDim Preserve Tablo(1 To 2, 1 To I)
        Tablo(1, I) = Dico(Cle): Tablo(2, I) = Cle

    Next Cle

    Compter = Tablo

End Function

Bonjour,

Inutile de se dévaloriser, l'important est de progresser et pour le faire rien de mieux que d'apprendre, cet excellent site se le veut.

J'ai cherché sur internet cette fonction :

Function Number_of_Words(Text_String As String) As Integer
'Function counts the number of words in a string
'by looking at each character and seeing whether it is a space or not
Number_of_Words = 0
Dim String_Length As Integer
Dim Current_Character As Integer

String_Length = Len(Text_String)

For Current_Character = 1 To String_Length

If (Mid(Text_String, Current_Character, 1)) = " " Then
    Number_of_Words = Number_of_Words + 1
End If

Next Current_Character
End Function

Elle s'utilise ainsi :

=Number_of_Words("je vais je suis je vais")

Est-ce que tu penses que c'est un bon début ?

Merci a vous deux d'avoir pris le temps de me répondre.

Je vous avoue etre un peu perdu...j'ai fait un test et a part compter le nombre de mot dans la phrase, rien ne s'affiche comme je veux...

Je vous transmets ce qui apparait et comment je souhaiterai que ca s'affiche.

J'ai l'impression davoir un souci avec excel.

Encore milles merci

capture capture2

Bonjour,

Quand un classeur contient des macros, il faut l'enregistrer en .xlsm et non en .xlsx c'est pour cette raison que tu as le message !

Voici un classeur exemple avec la fonction perso. Cette dernière doit être validée en matricielle puisqu'elle retourne un tableau :

Vraiment merci beaucoup Theze !!!!

Ca fonctionne parfaitement, je vais pouvoir avancer

Theze,

Je souhaiterai agrandir le tableau contenant la zone de resultat pour un texte plus grand, celui-ci s'arrete à la cellule AR.

J'ai essayé d'étendre le resultat aux cellules suivantes en inserant la fonction compter mais celles-ci me renvoient en mot "1" et en quantité "1" alors qu'il y a d'autres mots à afficher.

Peux-tu stp me dire comment je dois procéder pour éténdre la zone de resultat apres la cellule AR ?

D'avance je te remercie une nouvelle fois.

Seb

Voici la façon de procéder pour que ça fonctionne :

  • tu colles ton texte en colonne A
  • tu entres en colonne B face au texte la fonction "=Compter(A2)" en faisant référence à la colonne A (ici, A2)
  • tu sélectionnes la cellule en colonne B où se trouve la formule puis tu glisses d'une ligne vers le haut en maintenant le bouton gauche de la souris enfoncé pour sélectionner les deux lignes puis tu glisses vers la droite pour le nombre de colonnes voulues (voir plus bas pour explication de la fonction ("=NombreMots()")
  • tu laisses ce tableau sélectionné et tu cliques dans la barre de formule et tu valides en matricielle en enfonçant les touches Ctrl+Maj+Entrée
Les mots doivent s'inscrire dans la ligne du dessus et leur nombre dans la ligne du dessous

Je t'ai fais une fonction pour pouvoir connaître le nombre de mots uniques et jusqu'à quelle colonne tu doit sélectionner. Cette fonction doit aussi être validée en matricielle puisqu'elle retourne le nombre de mots unique et le nom de la colonne donc, tu colles la formule dans une cellule en faisant référence au texte en colonne A puis tu sélectionnes la cellule d'à coté, retour dans la barre de formule et validation en matricielle.

J'ai aussi fais la petite fonction "NBMots()" de contrôle qui te donne le nombre total de mots dans le texte, cette dernière n'est pas matricielle.

Je te poste à nouveau le classeur avec ces fonctions :

Theze !!!

C'est bien expliqué et parfaitement clair.

Mille fois merci !!!!

Bonjour,

Content de t'avoir aidé

Theze,

J'ai bien reussi a réaliser l'analyse grace à tes fonctions, et j'ai bien les mots du texte qui sont comptabilisés.

Tu aurais une petite fonction permettant de compter le nombre de fois qu'un mot est présent à partir d'un autre texte ?

Exemple :

Texte intial : "je suis parti je suis resté je suis parti je suis resté"

-> Resultat des fonctions utilisées : "je"=4 "suis"=4 "parti"=2....

Autre texte : "je reste tu pars je pense donc je parle"

-> Resultat nouvelle fonction comptabilisation a partir du resultat de la presmière focntion : "je"=2 "suis"=0 "parti"=0...

j'ai essayé avec la fonction "compter" "trouve" mais les chiffres qui ressortent m'affichent des nombres complétement délirants du genre "je"=5676 fois...

J'éspère quje suis clair...

Merci encore pour ton aide

Cest bon Theze j'ai trouvé un moyen de le faire sans fonction.

Pas la peine de prendre en compte mon dernier message.

Merci.

Cest bon Theze j'ai trouvé un moyen de le faire sans fonction.

Bonjour sebteex,

Pourrais-tu partager ta solution ?

Merci

Rechercher des sujets similaires à "petite macro"