Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1494 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Comptabiliser le nombre de fois que se répète un mot dans un fichier

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Comptabiliser le nombre de fois que se répète un mot dans un fichier

n°1795984
benji35
Posté le 06-10-2008 à 12:06:07  profilanswer
 

Bonjour,
Comme le titre le montre j'ai fait une macro qui calcule le nombre de fois que se répète un mot dans un fichier excel ( plusieurs feuilles excel ), j'ai d'abord commencé par écrire le nombre de fois que se répète un mot dans une feuille excel mais y a une erreur 9 ( " l'indice n'appartient pas à la sélection ) pourriez vous m'aider svp et merci d'avance.
 
Voila mon code :  
 
Sub repetition_mot()
Dim mot As String
Dim MaPlage As Range
Dim cpt As Integer
Dim cmptCol As Long, cmptLig As Long
Set MaPlage = ThisWorkbook.Worksheets("feuille1" ).Cells(1.1)
cpt = 0
For cmptLig = 0 To MaPlage.End(x1Down).Row - MaPlage.Row
For cmptCol = 0 To MaPlage.End(x1ToRoght).Column - MaPlage.Column
 
If MaPlage.Offset(cmptLig, cmptCol).Value = "raison" Then cpt = cpt + 1
 
Next cmptCol
Next cmptLig
MsgBox cpt
 
End Sub

mood
Publicité
Posté le 06-10-2008 à 12:06:07  profilanswer
 

n°1795995
olivthill
Posté le 06-10-2008 à 12:50:46  profilanswer
 

Chez moi, l'erreur 9, "l'indice n'appartient pas à la sélection" aparait sur la ligne

Set MaPlage = ThisWorkbook.Worksheets("feuille1" ).Cells(1.1)

Elle disparait quand j'indique "Feuil1" au lieu de "Feuille1".
 
Plus loin, il y a d'autres erreurs qui apparaissent.
Par exemple, ce n'est pas x1... (Xavier Un) qu'il faut mettre, mais xl.. (Xavier, Laura), et "right" au lieu de "roght".
Et je présume qu'il faut changer aussi Cells(1.1) en Cells(1,1).

n°1796000
benji35
Posté le 06-10-2008 à 13:05:30  profilanswer
 

Cool merci bcp olivthill ça marche.
 
Par contre tu saurais pas comment étendre ceci à bcp de feuilles excel : comptabiliser le nombre de fois que se répète un mot dans un fichier excel contenant plusieurs feuilles excel.

n°1796038
SuppotDeSa​Tante
Aka dje69r
Posté le 06-10-2008 à 14:41:05  profilanswer
 

Hello
 
Bon j'ai fait ca tres vite fait, dis moi si ca te convient :
 
C'est une fonction, tu peux donc mettre dans une cellule :
=trouveoccurence(A1)
et il te renverra combien de fois la valeur de A1 est dans ton fichier, tous onglets confondus.

Cordialement
 
[edit] a marche pas avec plus de 3 classeurs.[/edit]


Message édité par SuppotDeSaTante le 06-10-2008 à 15:39:22

---------------
Soyez malin, louez entre voisins !
n°1796072
benji35
Posté le 06-10-2008 à 15:20:01  profilanswer
 

merci dje69r, j'ai fait ce que t'as dit mais il m'écrit #NOM? dans la cellule où je met =TrouveOccurence(A1)

n°1796082
SuppotDeSa​Tante
Aka dje69r
Posté le 06-10-2008 à 15:36:22  profilanswer
 

Essai plutot cela, la premiere fonction ne marche pas.
 

Citation :

Sub TrouveOccurence()
ValeurCherchee = "toto"
 
 
Application.ScreenUpdating = False
Cpte = 0
For Each Sh In Worksheets
Sheets(Sh.Name).Select
 
With ActiveWorkbook.Worksheets(Sh.Name).Cells
Set Sch = .Find(CStr(ValeurCherchee), LookIn:=xlValues)
    If Not Sch Is Nothing Then
        firstAddress = Sch.Address
        Do
            Set Sch = .FindNext(Sch)
            Cpte = Cpte + 1
        Loop While Not Sch Is Nothing And Sch.Address <> firstAddress
    End If
 
End With
Next Sh
Application.ScreenUpdating = True
 
MsgBox Cpte
 
End Sub


 
Apparement le loop while ne passe en fonction... Si qqun a une idée...


Message édité par SuppotDeSaTante le 06-10-2008 à 15:37:19

---------------
Soyez malin, louez entre voisins !
n°1796634
pyrof
Posté le 07-10-2008 à 15:21:40  profilanswer
 

Bonjour,
 
Si tu a besoin de ce chiffre uniquement pour savoir (pas d'utilisation dans une autre macro),
 
tu peux rechercher  
rechercher : mon mot
 
 
avec option classeur et en bas a gauche il te donne le nombre d'occurence
 

n°1796722
benji35
Posté le 07-10-2008 à 18:10:37  profilanswer
 

Merci bcp pyrof et dje69r mais en fait la je cherche à compter le nombre de  lignes qui comportent mot1 et mot2 toujours sur un fichier de plusieurs feuilles excel, voila mon code mais j'arrive pas à le faire marcher ( ça beugue ) :
 
Sub TrouveOccurence()
ValeurCherchee = "raison"
ValeurCherchee2 = "UBSLLD"
 
 
Application.ScreenUpdating = False
Cpte = 0
For Each Sh In Worksheets
Sheets(Sh.Name).Select
 
With ActiveWorkbook.Worksheets(Sh.Name).Cells
Set Sch = .Find(CStr(ValeurCherchee), LookIn:=xlValues)
    If Not Sch Is Nothing Then
        firstAddress = Sch.Address
        Set Sch2 = .Find(CStr(ValeurCherchee2), LookIn:=xlValues, SearchOrder:=xlByRows)
        If Not Sch2 Is Nothing And Sch.Row = Sch2.Row Then Cpte = Cpte + 1
        Do
            Set Sch = .FindNext(Sch)
            Set Sch2 = .FindNext(Sch2)
        Loop While Not Sch Is Nothing And Sch.Address <> firstAddress
    End If
End With
Next Sh
Application.ScreenUpdating = True
 
MsgBox Cpte
 
End Sub

n°1796764
SuppotDeSa​Tante
Aka dje69r
Posté le 07-10-2008 à 20:46:06  profilanswer
 

Tu es sur du "ET" ?
C'est bien les cellules comportant le mot raison ET le mot UBSLLD ?


---------------
Soyez malin, louez entre voisins !
n°1796906
pyrof
Posté le 08-10-2008 à 07:54:53  profilanswer
 

Bonjour,
 
Voici une macro  

Sub dudule()
 
mot1 = "toto"
mot2 = "tata"
 
cpte = 0
Dim tab1       'Crée une variable
Set tab1 = CreateObject("Scripting.Dictionary" )
'-------------------------------------------------------------
'recherche du mot1 et mémorisation feuille ligne
'-------------------------------------------------------------
For Each sh In Worksheets
    Sheets(sh.Name).Select
    With ActiveWorkbook.Worksheets(sh.Name).Cells
        Set sch = .Find(CStr(mot1), LookIn:=xlValues)
        If Not sch Is Nothing Then
            cle = sh.Name & "_l" & sch.Row
            tab1(cle) = 1 ' mémorise feuille, ligne
        End If
    End With
Next
'-------------------------------------------------------------
'recherche du mot2 et verification si existance du mot1
'-------------------------------------------------------------
For Each sh In Worksheets
    Sheets(sh.Name).Select
    With ActiveWorkbook.Worksheets(sh.Name).Cells
        Set sch = .Find(CStr(mot2), LookIn:=xlValues)
        If Not sch Is Nothing Then
            cle = sh.Name & "_l" & sch.Row
            If tab1.exists(cle) Then cpte = cpte + 1
        End If
    End With
Next
MsgBox cpte
End Sub


mood
Publicité
Posté le 08-10-2008 à 07:54:53  profilanswer
 

n°1796986
seniorpapo​u
Posté le 08-10-2008 à 10:36:31  profilanswer
 

Bonjour Benji35,
as-tu beaucoup de lignes par feuille?

n°1797367
benji35
Posté le 08-10-2008 à 18:03:38  profilanswer
 

merci pyrof mais en fait ça me donne le nombre de feuilles qui contiennent une ligne contenant mot1 et mot2 et moi je veux le nombre de lignes.
 
pour seniorpapou : oui pourquoi?
 
Merci à vous tous.

n°1797387
SuppotDeSa​Tante
Aka dje69r
Posté le 08-10-2008 à 18:58:51  profilanswer
 

SuppotDeSaTante a écrit :

Tu es sur du "ET" ?
C'est bien les cellules comportant le mot raison ET le mot UBSLLD ?


 
Et moi je pue ? :p  
 
Je vais chercher mon stick H24

Message cité 1 fois
Message édité par SuppotDeSaTante le 08-10-2008 à 18:59:34

---------------
Soyez malin, louez entre voisins !
n°1797392
benji35
Posté le 08-10-2008 à 19:09:46  profilanswer
 

SuppotDeSaTante a écrit :


 
Et moi je pue ? :p  
 
Je vais chercher mon stick H24


 
Excuse moi j'ai pas vu ton message, oui c'est bien ça c'est ces 2 mots.
 
Encore dsl et merci pour tes réponses.

n°1797409
seniorpapo​u
Posté le 08-10-2008 à 19:55:18  profilanswer
 

benji35 a écrit :

merci pyrof mais en fait ça me donne le nombre de feuilles qui contiennent une ligne contenant mot1 et mot2 et moi je veux le nombre de lignes.
 
pour seniorpapou : oui pourquoi?
 
Merci à vous tous.


parce qu'une solution existe en prenant en compte les lignes une par une et le traitement risque d'être long.
 
pour chaque feuille,  et pour chaque ligne de 1 à nblignes
 
selection ligne
 
with selection  
    .find ....mot1
if not is nothing.... then
      re selection de la ligne
      with selection
      .find  mot2  
      if not is nothing.... then
          cpte= cpte+1
end if
end if
 
désolé, pas trop le temps de l'écrire en détail

n°1797483
SuppotDeSa​Tante
Aka dje69r
Posté le 08-10-2008 à 22:21:31  profilanswer
 

Sub TrouveOccurence()
ValeurCherchee1 = "toto"
ValeurCherchee2 = "titi"
 
Application.ScreenUpdating = False
Cpte = 0
For x = 1 To 2
If x = 1 Then ValeurCherchee = ValeurCherchee1 & "*" & ValeurCherchee2
If x = 2 Then ValeurCherchee = ValeurCherchee2 & "*" & ValeurCherchee1
 
For Each Sh In Worksheets
Sheets(Sh.Name).Select
 
With ActiveWorkbook.Worksheets(Sh.Name).Cells
Set Sch = .Find(CStr(ValeurCherchee), LookIn:=xlValues)
    If Not Sch Is Nothing Then
        firstAddress = Sch.Address
        Do
            Set Sch = .FindNext(Sch)
            Cpte = Cpte + 1
        Loop While Not Sch Is Nothing And Sch.Address <> firstAddress
    End If
 
End With
Next Sh
Next x
Application.ScreenUpdating = True
 
MsgBox Cpte
 
End Sub
 
 
C'etait qd meme pas dur d'extrapoler le premier code en jouant avec les asterisques "*" .... :p
 
Cordialement


Message édité par SuppotDeSaTante le 08-10-2008 à 22:52:04

---------------
Soyez malin, louez entre voisins !
n°1797608
seniorpapo​u
Posté le 09-10-2008 à 10:41:22  profilanswer
 

Bonjour,
si benj35 cherche le nombre de lignes qui comportent mot1 ET mot2 cela peut ressembler à ceci:
Sub Macro1()
ValeurCherchee = "raison"
ValeurCherchee2 = "UBSLLD"
Application.ScreenUpdating = False
cpte = 0
    For Each Sh In ActiveWorkbook.Sheets
    Sh.Select
    shn = Sh.Name
    ActiveCell.SpecialCells(xlLastCell).Select
  bout = Selection.Row
  For i = 1 To bout
  Sh.Cells(i, 1).Select
  Selection.EntireRow.Select
  With Selection
    Set Sch = .Find(CStr(ValeurCherchee), LookIn:=xlValues)
    If Not Sch Is Nothing Then
    Selection.EntireRow.Select
    With Selection
        Set Sch = .Find(CStr(ValeurCherchee2), LookIn:=xlValues)
        If Not Sch Is Nothing Then
            cpte = cpte + 1
        End If
        End With
    End If
    End With
    Next i
Next
Application.ScreenUpdating = true
MsgBox cpte
End Sub
 
Mais je ne suis pas certain d'avoir compris ce qu'il demande


Message édité par seniorpapou le 09-10-2008 à 10:42:02
n°1797676
benji35
Posté le 09-10-2008 à 12:13:14  profilanswer
 

Merci à vous tous c'est vraiment très sympat pour un débutant en vba comme moi de trouver de l'aide d'expert comme vous, vraiment un grand merci à vous tous.
 
Seniorpapou c'est exactement ce que je veux et ça marche, merci.
 
J'aurais cependant qlqs questions :  
 
pour dje69r : le "*" dans If x = 1 Then ValeurCherchee = ValeurCherchee1 & "*" & ValeurCherchee2 veut dire quoi ( j'ai pas non plus ce que signifie cette ligne ) et je comprend pas non plus l'utilité de  : Application.ScreenUpdating = True.
 
Encore une fois merci bcp ( et si vous avez des conseils à me donner pour être aussi bon que vous en vba ce serait très sympat ).
 

n°1797690
gzii
court-circuit
Posté le 09-10-2008 à 13:17:44  profilanswer
 

Je ne connais pas bien ce langage, mais j'ai l'impression que ça cherche la chaîne et non le "mot" (séparé par espaces ou en début ou en fin).
C'est ça ?

n°1798374
SuppotDeSa​Tante
Aka dje69r
Posté le 10-10-2008 à 16:22:37  profilanswer
 

benji35 a écrit :

Merci à vous tous c'est vraiment très sympat pour un débutant en vba comme moi de trouver de l'aide d'expert comme vous, vraiment un grand merci à vous tous.
 
Seniorpapou c'est exactement ce que je veux et ça marche, merci.
 
J'aurais cependant qlqs questions :  
 
pour dje69r : le "*" dans If x = 1 Then ValeurCherchee = ValeurCherchee1 & "*" & ValeurCherchee2 veut dire quoi ( j'ai pas non plus ce que signifie cette ligne ) et je comprend pas non plus l'utilité de  : Application.ScreenUpdating = True.
 
Encore une fois merci bcp ( et si vous avez des conseils à me donner pour être aussi bon que vous en vba ce serait très sympat ).
 


 
Bah tu as deux mots a trouvé dns une cellule, donc je prends les deux possibilité, un sens et dans l'autre, apres c'etait a consolider hein..
Pour le screenupdating appuis sur F1 ;)


---------------
Soyez malin, louez entre voisins !

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Comptabiliser le nombre de fois que se répète un mot dans un fichier

 

Sujets relatifs
lire des donnees dans un fichier texteVISIBLEMENT Personne ne sait comment déplacer un fichier simplement...
Pourquoi quand je génère mon fichier xml j'ai ces caractères � ?trouve pas de fichier alors que le fichier est dedans??
[???] Besoin d'aide pour mettre un fichier PDF en ligne (page web)Retour chariot et fichier texte => \n ne marche pas
VBS : Renommer un fichier à la date du jour"Menu" séparé de mes fichier HTML
lecture et écriture dans un fichier texte en vbsImpossible de lancer un fichier .jar sous vista
Plus de sujets relatifs à : Comptabiliser le nombre de fois que se répète un mot dans un fichier


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR