Variable appartenant a une collection
Fermé
yan1954
-
19 janv. 2022 à 13:37
eriiic Messages postés 24585 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 27 juin 2024 - 20 janv. 2022 à 19:42
eriiic Messages postés 24585 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 27 juin 2024 - 20 janv. 2022 à 19:42
A voir également:
- Variable appartenant a une collection
- Vba excel sélectionner une plage de cellules variable ✓ - Forum VB / VBA
- Variable objet ou variable de bloc with non définie - Forum VB / VBA
- Impossible de créer le fichier de travail. vérifiez la variable d'environnement temp ✓ - Forum Word
- Ce programme est écrit en python. il construit un mot secret dans une variable mais il ne l'affiche pas. modifiez-le pour qu'il affiche le mot secret. exécutez-le. quel est ce mot secret ? ✓ - Forum Python
11 réponses
Le Pingou
Messages postés
12116
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
4 juillet 2024
1 442
19 janv. 2022 à 15:29
19 janv. 2022 à 15:29
Bonjour,
Petite question, que faites-vous si un mot à la correspondance exact (la 1ere, 3 et 5 eme lettres sont des voyelles) ?
Petite question, que faites-vous si un mot à la correspondance exact (la 1ere, 3 et 5 eme lettres sont des voyelles) ?
Raymond PENTIER
Messages postés
58527
Date d'inscription
lundi 13 août 2007
Statut
Contributeur
Dernière intervention
6 juillet 2024
17 143
19 janv. 2022 à 15:46
19 janv. 2022 à 15:46
Salut YB.
Rassure-moi : tu parles bien de macro ?
Rassure-moi : tu parles bien de macro ?
Merci de me répondre
soit je l'écrit dans une autre colonne avec tout les mots de la liste qui seront éligibles au test, soit je le concatène avec tous les mots éligibles
en faisant a chaque fois que le test sera "oui"
mots=mots +mot
j'aurais au final un trés grand mot pour lequel j'aurais un autre traitement a faire.
je cherche donc une instruction qui dirait
"true" si l'appartenance a la collection est vraie
ou alors permette d'écrire ceci
if L1 "appartient a voyelle" then t1=1
soit je l'écrit dans une autre colonne avec tout les mots de la liste qui seront éligibles au test, soit je le concatène avec tous les mots éligibles
en faisant a chaque fois que le test sera "oui"
mots=mots +mot
j'aurais au final un trés grand mot pour lequel j'aurais un autre traitement a faire.
je cherche donc une instruction qui dirait
"true" si l'appartenance a la collection est vraie
ou alors permette d'écrire ceci
if L1 "appartient a voyelle" then t1=1
via55
Messages postés
14434
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
2 juillet 2024
2 715
Modifié le 19 janv. 2022 à 18:17
Modifié le 19 janv. 2022 à 18:17
Bonjour yan, coucou RaymonD ☺
Sans macro simplement par formules simples et un filtre on obtient immédiatement (et plus rapidement que par macro je pense) la liste de mots correspondant à ton critère de voyelles en position 1, 3 et 5 (je suis parti de la liste des 17 991 mots de 6 lettres admis au scrabble)
https://www.cjoint.com/c/LAtrrhn6dzW
Si tu persistes néanmoins à vouloir faire par macro, tu peux par exemple sur ta feuille Excel avoir dans une colonne la liste des voyelles, puis dans la macro vérifier à chaque extraction de lettre avec un COUNTIF si la lettre extraite est présente dans la liste ou non (le COUNTIF retournera 0 ou 1) puis en faisant la somme des COUNTIF si on obtient 3 c'est Ok...
Cdlmnt
Via
Sans macro simplement par formules simples et un filtre on obtient immédiatement (et plus rapidement que par macro je pense) la liste de mots correspondant à ton critère de voyelles en position 1, 3 et 5 (je suis parti de la liste des 17 991 mots de 6 lettres admis au scrabble)
https://www.cjoint.com/c/LAtrrhn6dzW
Si tu persistes néanmoins à vouloir faire par macro, tu peux par exemple sur ta feuille Excel avoir dans une colonne la liste des voyelles, puis dans la macro vérifier à chaque extraction de lettre avec un COUNTIF si la lettre extraite est présente dans la liste ou non (le COUNTIF retournera 0 ou 1) puis en faisant la somme des COUNTIF si on obtient 3 c'est Ok...
Cdlmnt
Via
Le Pingou
Messages postés
12116
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
4 juillet 2024
1 442
19 janv. 2022 à 18:13
19 janv. 2022 à 18:13
Bonjour via55,
Merci
Salutations.
Le Pingou
Merci
Salutations.
Le Pingou
via55
Messages postés
14434
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
2 juillet 2024
2 715
>
Le Pingou
Messages postés
12116
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
4 juillet 2024
19 janv. 2022 à 18:26
19 janv. 2022 à 18:26
Bonjour Le Pingou
Désolé j'avais omis de te saluer, je n'avais pas vu ta courte intervention !
Cdlmnt
Via
Désolé j'avais omis de te saluer, je n'avais pas vu ta courte intervention !
Cdlmnt
Via
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Merci Raymond
c'est un peu de cette façon que j'avais résolu mon problème.
Mais je suis toujours a la recherche d'une instruction a mettre dans une macro qui permettrait de savoir si une variable est présente dans une collection, mais je ne trouve rien sur le sujet.
bonne soirée
YB
c'est un peu de cette façon que j'avais résolu mon problème.
Mais je suis toujours a la recherche d'une instruction a mettre dans une macro qui permettrait de savoir si une variable est présente dans une collection, mais je ne trouve rien sur le sujet.
bonne soirée
YB
Le Pingou
Messages postés
12116
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
4 juillet 2024
1 442
19 janv. 2022 à 18:42
19 janv. 2022 à 18:42
Bonjour yan1954,
Merci de revoir le poste 2!
Il serait bien de mettre un petit exemple : les données et le résultat à obtenir .... la macro pourrait suivre dans se cas!
Merci de revoir le poste 2!
Il serait bien de mettre un petit exemple : les données et le résultat à obtenir .... la macro pourrait suivre dans se cas!
je suis pas un grand spécialiste des macros mais j'ai fait ceci
Sub toto()
'--crée une collection de nom "voyelle"
Dim voyelle As New Collection
voyelle.Add Item:="a"
voyelle.Add Item:="e"
voyelle.Add Item:="i"
voyelle.Add Item:="o"
voyelle.Add Item:="u"
voyelle.Add Item:="y"
'colone où est la liste
Application.Goto Reference:="plage"
For Each c In Selection
l1 = Mid(c, 1, 1)
l3 = Mid(c, 3, 1)
l5 = Mid(c, 5, 1)
'ici je voudrais tester si L1,L3,L5 appartiennent à voyelle, je sais pas faire
' et si oui garder le mot dans une autre colonne où dans une variable çà je sais faire
Next
Stop
End Sub
peut etre je cherche une instruction qui n'existe pas
ma liste contient des mots (environ 15 000) de ce type
abatte
abattu
abbaye
abetir
abimee
abimer
............. etc
abatte,abattu,abbaye je jette
abetir,abimee,abimer je garde
et ce jusqu'à épuisement de la liste
A+
YB
Sub toto()
'--crée une collection de nom "voyelle"
Dim voyelle As New Collection
voyelle.Add Item:="a"
voyelle.Add Item:="e"
voyelle.Add Item:="i"
voyelle.Add Item:="o"
voyelle.Add Item:="u"
voyelle.Add Item:="y"
'colone où est la liste
Application.Goto Reference:="plage"
For Each c In Selection
l1 = Mid(c, 1, 1)
l3 = Mid(c, 3, 1)
l5 = Mid(c, 5, 1)
'ici je voudrais tester si L1,L3,L5 appartiennent à voyelle, je sais pas faire
' et si oui garder le mot dans une autre colonne où dans une variable çà je sais faire
Next
Stop
End Sub
peut etre je cherche une instruction qui n'existe pas
ma liste contient des mots (environ 15 000) de ce type
abatte
abattu
abbaye
abetir
abimee
abimer
............. etc
abatte,abattu,abbaye je jette
abetir,abimee,abimer je garde
et ce jusqu'à épuisement de la liste
A+
YB
via55
Messages postés
14434
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
2 juillet 2024
2 715
19 janv. 2022 à 20:43
19 janv. 2022 à 20:43
Re,
C'est moi qui t'avais donné ma solution par formules
Par macro pourquoi t'embêter avec une collection, inutile ici, il suffit de vérifier la présence des lettres dans la chaine de caractères aeiouy, ce qui pourrait donner quelque chose comme ceci pour recopier les mots avec 3 voyelles :
J'ai détaillé pour la compréhension et en partant de ta macro mais en fait toute la partie
l1 = Mid(c, 1, 1)
l3 = Mid(c, 3, 1)
l5 = Mid(c, 5, 1)
r1 = InStr("aeiouy", l1)
r3 = InStr("aeiouy", l3)
r5 = InStr("aeiouy", l5)
If r1 * r3 * r5 > 0 Then
pourrait être remplacée par une seule ligne simplement :
Cdlmnt
Via
C'est moi qui t'avais donné ma solution par formules
Par macro pourquoi t'embêter avec une collection, inutile ici, il suffit de vérifier la présence des lettres dans la chaine de caractères aeiouy, ce qui pourrait donner quelque chose comme ceci pour recopier les mots avec 3 voyelles :
x = 1 Sub toto For Each c In Range("A2:A17992") l1 = Mid(c, 1, 1) l3 = Mid(c, 3, 1) l5 = Mid(c, 5, 1) r1 = InStr("aeiouy", l1) r3 = InStr("aeiouy", l3) r5 = InStr("aeiouy", l5) If r1 * r3 * r5 > 0 Then x = x + 1 Range("B" & x) = c End If Next End Sub
J'ai détaillé pour la compréhension et en partant de ta macro mais en fait toute la partie
l1 = Mid(c, 1, 1)
l3 = Mid(c, 3, 1)
l5 = Mid(c, 5, 1)
r1 = InStr("aeiouy", l1)
r3 = InStr("aeiouy", l3)
r5 = InStr("aeiouy", l5)
If r1 * r3 * r5 > 0 Then
pourrait être remplacée par une seule ligne simplement :
If InStr("aeiouy", Mid(c, 1, 1)) * InStr("aeiouy", Mid(c, 3, 1)) * InStr("aeiouy", Mid(c, 5, 1)) > 0 Then
Cdlmnt
Via
merci a tous
merci a Via55, "instr" répond parfaitement a ce que je veut faire.
Maintenant je serais trés intéressé de savoir si il est possible de tester une collection, afin de savoir si une variable appartient a cette collection.
A+
YB
merci a Via55, "instr" répond parfaitement a ce que je veut faire.
Maintenant je serais trés intéressé de savoir si il est possible de tester une collection, afin de savoir si une variable appartient a cette collection.
A+
YB
via55
Messages postés
14434
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
2 juillet 2024
2 715
20 janv. 2022 à 14:43
20 janv. 2022 à 14:43
Re
A ma connaissance le seul moyen est de boucler sur tous les items de la collection et de les comparer à la variable et de mettre une variable de résultat à 1 dans le cas de correspondance, exemple :
A+
A ma connaissance le seul moyen est de boucler sur tous les items de la collection et de les comparer à la variable et de mettre une variable de résultat à 1 dans le cas de correspondance, exemple :
mavariable = "chat" result = 0 For n = 1 To maliste.Count If maliste(n) = mavariable Then result = 1 Next If result = 1 Then MsgBox valeurcherchee & " appartient à la collection" Else MsgBox valeurcherchee & " n' appartient pas à la collection" End If
A+
eriiic
Messages postés
24585
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
27 juin 2024
7 226
20 janv. 2022 à 19:42
20 janv. 2022 à 19:42
Bonjour,
autre moyen de valider avec une expression regex :
Tu peux ajouter les lettres accentuées sans difficulté.
eric
autre moyen de valider avec une expression regex :
Dim masque As String, mot As String masque = "[a,e,i,o,u,y]" mot = "abimer" ok = mot Like masque & "?" & masque & "?" & masque & "*"
Tu peux ajouter les lettres accentuées sans difficulté.
eric