Fonction mots-clés avec mots à bannir
Résolu/Fermé
wuhrlinanthony
Messages postés
52
Date d'inscription
mercredi 29 juillet 2015
Statut
Membre
Dernière intervention
5 juillet 2017
-
Modifié par pijaku le 17/08/2015 à 15:32
wuhrlinanthony Messages postés 52 Date d'inscription mercredi 29 juillet 2015 Statut Membre Dernière intervention 5 juillet 2017 - 18 août 2015 à 08:12
wuhrlinanthony Messages postés 52 Date d'inscription mercredi 29 juillet 2015 Statut Membre Dernière intervention 5 juillet 2017 - 18 août 2015 à 08:12
A voir également:
- Fonction mots-clés avec mots à bannir
- Fonction si et - Guide
- Identifiants et mots de passe - Guide
- Generateur de mots de passe - Télécharger - Sécurité
- Le fichier à télécharger contient un mot caché. quel est le format du fichier ? quel est le mot caché ? ✓ - Forum Windows
- Alex, dont la mère est née à pau, s'est créé un compte de messagerie alex@pxmail.fr. il a oublié le mot de passe qu’il a choisi. aidez-le à le retrouver. - Forum Réseaux sociaux
2 réponses
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
17 août 2015 à 15:17
17 août 2015 à 15:17
Bonjour,
Une autre manière (je n'ai pas vérifié la sensibilité à la casse)
http://www.cjoint.com/c/EHrnqKD5Vlo
code proposé par macro paramétrée
Une autre manière (je n'ai pas vérifié la sensibilité à la casse)
http://www.cjoint.com/c/EHrnqKD5Vlo
code proposé par macro paramétrée
Option Explicit
'---------------------------
Sub analyser()
selectionner range("B3"), range("B4")
End Sub
Sub selectionner(texto, Bannis As range)
Dim Mots
Dim D_mots As Object, Cptr As Integer
Mots = Split(texto)
Set D_mots = CreateObject("scripting.dictionary")
For Cptr = 0 To UBound(Mots) - 1
If Application.CountIf(Bannis, "*" & Mots(Cptr) & "*") = 0 Then
If Not D_mots.exists(Mots(Cptr)) Then
D_mots.Add Mots(Cptr), 1
Else
D_mots(Mots(Cptr)) = D_mots(Mots(Cptr)) + 1
End If
End If
Next
range("E5").Resize(D_mots.Count, 1) = Application.Transpose(D_mots.keys)
range("F5").Resize(D_mots.Count, 1) = Application.Transpose(D_mots.items)
End Sub
via55
Messages postés
14504
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
21 décembre 2024
2 738
17 août 2015 à 14:17
17 août 2015 à 14:17
Bonjour
Une possibiité :
1) Etablir en début de macro la liste des mots à bannir :
ban(1)="le"
ban(2)="la"
etc
2) dans la boucle sur les items du tableau pour voir si existe déjà avant le next k rajouter ces lignes
For t=1 to (mettre ici le nombre n maximum de ban(n))
If UCase(Tableau(k))=UCase(ban(t)) then existe =1
Next t
Cdlmnt
Via
Une possibiité :
1) Etablir en début de macro la liste des mots à bannir :
ban(1)="le"
ban(2)="la"
etc
2) dans la boucle sur les items du tableau pour voir si existe déjà avant le next k rajouter ces lignes
For t=1 to (mettre ici le nombre n maximum de ban(n))
If UCase(Tableau(k))=UCase(ban(t)) then existe =1
Next t
Cdlmnt
Via
wuhrlinanthony
Messages postés
52
Date d'inscription
mercredi 29 juillet 2015
Statut
Membre
Dernière intervention
5 juillet 2017
17 août 2015 à 14:29
17 août 2015 à 14:29
Il m'écris une erreur " Sub ou fonction non définie" pourtant c'est bien une fonction avec "End function a la fin " et "Function" au début . Il me fait cette erreur en me surlignant : ban(1) = "le"
Il y a une position spécial ou mettre les mots a bannir dans la fonction? Ou faut-il créer une macro juste au dessus de la fonction pour les appeler ?
Merci
Il y a une position spécial ou mettre les mots a bannir dans la fonction? Ou faut-il créer une macro juste au dessus de la fonction pour les appeler ?
Merci
via55
Messages postés
14504
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
21 décembre 2024
2 738
>
wuhrlinanthony
Messages postés
52
Date d'inscription
mercredi 29 juillet 2015
Statut
Membre
Dernière intervention
5 juillet 2017
17 août 2015 à 14:53
17 août 2015 à 14:53
Dimensionne ton tableau en début de macro avant de le compléter :
Dim ban(le nombre maxi de mots à bannir) as integer
Dim ban(le nombre maxi de mots à bannir) as integer
wuhrlinanthony
Messages postés
52
Date d'inscription
mercredi 29 juillet 2015
Statut
Membre
Dernière intervention
5 juillet 2017
17 août 2015 à 15:10
17 août 2015 à 15:10
il me marque "type défini par l'utilisateur non défini" , ça veut dire quoi ?
Pourtant j'ai bien définie Dim ban(6) as Integer (6 étant le nombre de mots a bannir)
Pourtant j'ai bien définie Dim ban(6) as Integer (6 étant le nombre de mots a bannir)
via55
Messages postés
14504
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
21 décembre 2024
2 738
>
wuhrlinanthony
Messages postés
52
Date d'inscription
mercredi 29 juillet 2015
Statut
Membre
Dernière intervention
5 juillet 2017
17 août 2015 à 16:08
17 août 2015 à 16:08
Déclare aussi la variable de la boucle
Dim t as integer
Dim t as integer
wuhrlinanthony
Messages postés
52
Date d'inscription
mercredi 29 juillet 2015
Statut
Membre
Dernière intervention
5 juillet 2017
17 août 2015 à 16:22
17 août 2015 à 16:22
Je l'ai mais ce ne change rien, toujours la même erreur : voici le code avec l'ajout de la boucle que tu m'as dit :
Function mots(machaine As String)
Dim Tableau() As String
Dim ban(6) As Integer
Dim t As Integer
Dim i As Integer
'découpe la chaine en fonction des espaces " "
'le résultat de la fonction Split est stocké dans un tableau
Tableau = Split(machaine, " ")
max1 = 0
max2 = 0
max3 = 0
max4 = 0
max5 = 0
max6 = 0
max7 = 0
max8 = 0
max9 = 0
max10 = 0
' mots a bannir
ban(1) = "le"
ban(2) = "la"
ban(3) = "et"
ban(4) = "est"
ban(5) = "a"
ban(6) = ","
'boucle sur le tableau
For i = 0 To UBound(Tableau) - 1
n = 1
existe = 0
' boucle sur les items précédents du tableau
For k = 0 To i - 1
' si le mot existe déjà (comparaison de mots en majuscules) existe passe à 1
If UCase(Tableau(k)) = UCase(Tableau(i)) Then existe = 1
For t = 1 To 6
If UCase(Tableau(k)) = UCase(ban(t)) Then existe = 1
Next t
Next k
' si existe=0 (pour en pas compter 2 fois un mot précédemment comptabilisé)
If existe = 0 Then
' boucle sur les items suivants du tableau
For j = i + 1 To UBound(Tableau) - 1
' si identique (comparaison majucules)alors incrémentation de n
If UCase(Tableau(j)) = UCase(Tableau(i)) Then n = n + 1
Next j
' si n> max 1, 2 ou 3 on remplace le max par n et on releve la valeur dans tableau
If n > max1 Then max1 = n: mot1 = i Else: If n > max2 Then max2 = n: mot2 = i Else: If n > max3 Then max3 = n: mot3 = i Else: If n > max4 Then max4 = n: mot4 = i Else: If n > max5 Then max5 = n: mot5 = i Else: If n > max6 Then max6 = n: mot6 = i Else: If n > max7 Then max7 = n: mot7 = i Else: If n > max8 Then max8 = n: mot8 = i Else: If n > max9 Then max9 = n: mot9 = i Else: If n > max10 Then max10 = n: mot10 = i
End If
Next i
' nombre de fois et mots à retourner
mots = max1 & " " & Tableau(mot1) & " " & max2 & " " & Tableau(mot2) & " " & max3 & " " & Tableau(mot3) & " " & max4 & " " & Tableau(mot4) & " " & max5 & " " & Tableau(mot5) & " " & max6 & " " & Tableau(mot6) & " " & max7 & " " & Tableau(mot7) & " " & max8 & " " & Tableau(mot8) & " " & max9 & " " & Tableau(mot9) & " " & max10 & " " & Tableau(mot10)
End Function
Function mots(machaine As String)
Dim Tableau() As String
Dim ban(6) As Integer
Dim t As Integer
Dim i As Integer
'découpe la chaine en fonction des espaces " "
'le résultat de la fonction Split est stocké dans un tableau
Tableau = Split(machaine, " ")
max1 = 0
max2 = 0
max3 = 0
max4 = 0
max5 = 0
max6 = 0
max7 = 0
max8 = 0
max9 = 0
max10 = 0
' mots a bannir
ban(1) = "le"
ban(2) = "la"
ban(3) = "et"
ban(4) = "est"
ban(5) = "a"
ban(6) = ","
'boucle sur le tableau
For i = 0 To UBound(Tableau) - 1
n = 1
existe = 0
' boucle sur les items précédents du tableau
For k = 0 To i - 1
' si le mot existe déjà (comparaison de mots en majuscules) existe passe à 1
If UCase(Tableau(k)) = UCase(Tableau(i)) Then existe = 1
For t = 1 To 6
If UCase(Tableau(k)) = UCase(ban(t)) Then existe = 1
Next t
Next k
' si existe=0 (pour en pas compter 2 fois un mot précédemment comptabilisé)
If existe = 0 Then
' boucle sur les items suivants du tableau
For j = i + 1 To UBound(Tableau) - 1
' si identique (comparaison majucules)alors incrémentation de n
If UCase(Tableau(j)) = UCase(Tableau(i)) Then n = n + 1
Next j
' si n> max 1, 2 ou 3 on remplace le max par n et on releve la valeur dans tableau
If n > max1 Then max1 = n: mot1 = i Else: If n > max2 Then max2 = n: mot2 = i Else: If n > max3 Then max3 = n: mot3 = i Else: If n > max4 Then max4 = n: mot4 = i Else: If n > max5 Then max5 = n: mot5 = i Else: If n > max6 Then max6 = n: mot6 = i Else: If n > max7 Then max7 = n: mot7 = i Else: If n > max8 Then max8 = n: mot8 = i Else: If n > max9 Then max9 = n: mot9 = i Else: If n > max10 Then max10 = n: mot10 = i
End If
Next i
' nombre de fois et mots à retourner
mots = max1 & " " & Tableau(mot1) & " " & max2 & " " & Tableau(mot2) & " " & max3 & " " & Tableau(mot3) & " " & max4 & " " & Tableau(mot4) & " " & max5 & " " & Tableau(mot5) & " " & max6 & " " & Tableau(mot6) & " " & max7 & " " & Tableau(mot7) & " " & max8 & " " & Tableau(mot8) & " " & max9 & " " & Tableau(mot9) & " " & max10 & " " & Tableau(mot10)
End Function
17 août 2015 à 16:01
Modifié par michel_m le 17/08/2015 à 17:18
nota: en ouvrant la pièce jointe elle est située dans un répertoire spécial semblant ne pas aimer les macros.il es plus prudent d"'enregistrer sous"
abandon du suivi : encore du temps de perdu à essayer d'aider