Comptabiliser le nombre de fois que se répète un mot dans un fichier - VB/VBA/VBS - Programmation
Marsh Posté le 06-10-2008 à 12:50:46
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).
Marsh Posté le 06-10-2008 à 13:05:30
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.
Marsh Posté le 06-10-2008 à 14:41:05
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]
Marsh Posté le 06-10-2008 à 15:20:01
merci dje69r, j'ai fait ce que t'as dit mais il m'écrit #NOM? dans la cellule où je met =TrouveOccurence(A1)
Marsh Posté le 06-10-2008 à 15:36:22
Essai plutot cela, la premiere fonction ne marche pas.
Citation : Sub TrouveOccurence() |
Apparement le loop while ne passe en fonction... Si qqun a une idée...
Marsh Posté le 07-10-2008 à 15:21:40
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
Marsh Posté le 07-10-2008 à 18:10:37
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
Marsh Posté le 07-10-2008 à 20:46:06
Tu es sur du "ET" ?
C'est bien les cellules comportant le mot raison ET le mot UBSLLD ?
Marsh Posté le 08-10-2008 à 07:54:53
Bonjour,
Voici une macro
Sub dudule() |
Marsh Posté le 08-10-2008 à 18:03:38
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.
Marsh Posté le 08-10-2008 à 18:58:51
SuppotDeSaTante a écrit : Tu es sur du "ET" ? |
Et moi je pue ?
Je vais chercher mon stick H24
Marsh Posté le 08-10-2008 à 19:09:46
SuppotDeSaTante a écrit : |
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.
Marsh Posté le 08-10-2008 à 19:55:18
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. |
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
Marsh Posté le 08-10-2008 à 22:21:31
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 "*" ....
Cordialement
Marsh Posté le 09-10-2008 à 10:41:22
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
Marsh Posté le 09-10-2008 à 12:13:14
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 ).
Marsh Posté le 09-10-2008 à 13:17:44
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 ?
Marsh Posté le 10-10-2008 à 16:22:37
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. |
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
Marsh Posté le 06-10-2008 à 12:06:07
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