VBA EXCEL

syltab Messages postés 18 Date d'inscription vendredi 18 juillet 2003 Statut Membre Dernière intervention 2 décembre 2003 - 26 nov. 2003 à 10:29
ld40 Messages postés 336 Date d'inscription jeudi 30 janvier 2003 Statut Membre Dernière intervention 22 février 2019 - 2 déc. 2003 à 22:16
Salut

Une aide serait profitable

J'ai une boite de dialogue, avec 20 cases à cocher qui correspondent aux réponses à 10 questions.2 réponses possible par questions
Sur une première feuille, j'ai la base de données de tous ceux qui ont répondus aux questions.Dans la colonne A j'ai les noms, et les colonnes de b à ..., j'ai les réponses données, sous la forme d'une cellule coché ou non
Sur une deuxième feuille, j'ai placé 20 numéros qui correspondent aux réponses, à coté il ya le nombre de fois que la réponse à été cochées.
Comment peut on faire pour classer les 20 réponses de la plus répondue à la moins répondue, à chaque fois que je rajoute une ligne de données nouvelle.
Merci pour l'aide apportée

14 réponses

ld40 Messages postés 336 Date d'inscription jeudi 30 janvier 2003 Statut Membre Dernière intervention 22 février 2019 1
26 nov. 2003 à 22:30
dans la colonne A:A de ta feuille réponse tu mets les 20 codes et dans la colonne B:B tu mets à jour le nombre de réponses à chaque fois qu'une ligne est rajoutée.

Enfin tu tries avec:

Columns("B:B").Select
Selection.Sort Key1:=Range("A1"), Order1:=xlDescending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
0
ld40 Messages postés 336 Date d'inscription jeudi 30 janvier 2003 Statut Membre Dernière intervention 22 février 2019 1
26 nov. 2003 à 22:32
?-)
zut il faut lire:

Columns("B:B").Select
Selection.Sort Key1:=Range("B1"), Order1:=xlDescending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
0
syltab Messages postés 18 Date d'inscription vendredi 18 juillet 2003 Statut Membre Dernière intervention 2 décembre 2003
27 nov. 2003 à 11:44
Merci pour ton aide mais pour l'instant ça ne fonctionne pas, il me dit erreur défini par l'application ou par l'objet
ET j'avoue que je ne sais pas ce que ça veut dire.
0
syltab Messages postés 18 Date d'inscription vendredi 18 juillet 2003 Statut Membre Dernière intervention 2 décembre 2003
28 nov. 2003 à 20:04
Salut et merci
9a fonctionne mais quand je fais le tri je ne peux plus voir quelle est la réponse le plus données car les numéros des réponses ne suivent pas
; comment faire?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ld40 Messages postés 336 Date d'inscription jeudi 30 janvier 2003 Statut Membre Dernière intervention 22 février 2019 1
30 nov. 2003 à 21:01
milles excuses, c'est effectivement le code pour trier la colonne B:B indépendemment de A:A

le bon code doit être :
(à condition que "A1" soit une cellule du tableau à trier)

Range("A1").Select
Selection.Sort Key1:=Range("B1"), Order1:=xlDescending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom

Note que ce code est pondu par le créateur de macro vba Excel que je t'encourage à utiliser lorsque tu connais la manip sous excel mais pas l'équivalent en vba.

Pour cela faire:
Outils/macro/Nouvelle Macro... [OK]

Puis,
selection A1
Données/trier/colonneB/Décroissant
Clic sur stop[]
Enfin,
Outils/macro/Visual Basic editor...
0
syltab Messages postés 18 Date d'inscription vendredi 18 juillet 2003 Statut Membre Dernière intervention 2 décembre 2003
1 déc. 2003 à 11:22
merci pour ton aide, cela fonctionne.
j'aurais un autre problème mais je ne voudrais pas t'ennuyer
Voilà: toujours avec ces réponses aux questions, je voudrais savoir quelle est la série de réponse la plus fréquente, je m'explique:Sur une base de données qui regroupe environ 500 personnes questionnées, quell est le nombre de personnes qui ont répondues identiquement à 5 questions, 6, et plus.
Merci encore
0
ld40 Messages postés 336 Date d'inscription jeudi 30 janvier 2003 Statut Membre Dernière intervention 22 février 2019 1
1 déc. 2003 à 13:55
Comme tu l'as dit toi même tu travailles sur une "base de données". Or excel n'est pas vraiment vraiment conçu pour gérer des bases de données.
Des fonctions plus adaptées auraient pu être employées sous Access je pense.

Bref. pour ce type de question il n'y a rien d'impossible, mais le temps de réponse n'est pas optimisé.

Je pense que pour résoudre ton pb, tu dois repartir du résultat précédemment obtenu.

Supposons: "je cherche les personnes ayant répondu au moins à 5 questions de façon identique"

Tu prends la série des cinq réponses les plus fréquentes, et personne par personne, tu verifies si oui ou non elles ont donné ces 5 reponses. Si oui, compteur=compteur+1.
A la fin de la vérification, compteur = nbre de personne ayant répondu au moins identiquement à 5 questions.
0
syltab Messages postés 18 Date d'inscription vendredi 18 juillet 2003 Statut Membre Dernière intervention 2 décembre 2003
1 déc. 2003 à 14:44
J'ai compris mais le problème est que je ne connais pas la séris des réponse les plus données et je voudrais savoir style:55 personnes ont répondues identiquement aux question:1-3-5-7-9
0
syltab Messages postés 18 Date d'inscription vendredi 18 juillet 2003 Statut Membre Dernière intervention 2 décembre 2003
1 déc. 2003 à 14:54
Excuse, j'ai le classement des réponses les plus données, mais cela ne me dit pas que c'est la série de réponse la plus fréquemment donnée, il y en a peut-être d'autre; une série de 2,3,4,5 ou 6 réponses.comment savoir?
0
ld40 Messages postés 336 Date d'inscription jeudi 30 janvier 2003 Statut Membre Dernière intervention 22 février 2019 1
1 déc. 2003 à 17:00
Je vois que tu as une bonne analyse du pb.
(Normalement, ça conduit naturellement à la réponse).

Ma solution est effectivement la plus probable sans être la plus certaine.

Mais ce que tu recherches , c'est une series de tests dont le temps d'execution risque de battre tous les records.

500! combinaisons = 500*499*498*497*etc... combinaisons à tester.

Donc prudence.

Je te promet de reflechir un peu plus à ton pb, mais est ce vraiment le but à atteindre?
0
syltab Messages postés 18 Date d'inscription vendredi 18 juillet 2003 Statut Membre Dernière intervention 2 décembre 2003
1 déc. 2003 à 18:42
merci, mais il faut pas que tu te casses la tête
Peux t'on pas le faire sur 10 personne et le mettre en boucle jusqu'a la fin de la liste
0
syltab Messages postés 18 Date d'inscription vendredi 18 juillet 2003 Statut Membre Dernière intervention 2 décembre 2003
1 déc. 2003 à 18:46
Le pc peux exécuter quelques millions d'opérations à la seconde, dons si on prends une série de 5 réponses données, ça nous donne 500*499*498*497*496*495=1.51 dix puissance 16; quelque minutes si le code est bien écrit
0
syltab Messages postés 18 Date d'inscription vendredi 18 juillet 2003 Statut Membre Dernière intervention 2 décembre 2003
2 déc. 2003 à 13:12
j'ai réfléd=chi et ta solution est pas simal du tout
pourrais tu m 'indiquer le genre de code qu'il faut écrire, par rapport a ta réponse du 1/12 à 13 h 55
merci
0
ld40 Messages postés 336 Date d'inscription jeudi 30 janvier 2003 Statut Membre Dernière intervention 22 février 2019 1
2 déc. 2003 à 22:16
Sub Macro1()

'dimension des variables temporaires
Dim m As Integer
Dim m1 As Double
Dim m2 As Integer
'dimension du compteur final
Dim compteur As Integer
'test reponse formulaire dont les réponses sont
'statistiquement intéressantes oui/non
Dim rep As Boolean

'Nombre de réponses attendues
Dim nbrrep As Integer
nbrrep = 5

'Dimension d'un tablo permettant d'interpreter
'les resultat de la feuille2(résultat) dans la feuille1(données)
ReDim tablo(1 To 3, 1 To nbrrep) As String


'Nom des feuilles
Dim feuille1 As String
Dim feuille2 As String
feuille1 = "données"
feuille2 = "résultats"

'Allons voir les résultats...
Sheets(feuille2).Select


'regardons les n premiers resultats les plus repondus (nbrrep)
'et stockons le nom de la question équivalente (contenue dans la colonne A:A)
For m = 1 To nbrrep
tablo(1, m) = Cells(m, 1) 'colonne A:A
tablo(2, m) = Cells(m, 2) 'colonne B:B
Next

'allons voir les données...
Sheets(feuille1).Select

'parcourons l'entete du tableau "données" et recherchons la correspondance
'nom de la question posée = numéro de colonne
'l'entete est compris entre B:1 et U:1

For m = 1 To nbrrep
For m2 = 1 To 20
If tablo(1, m) = Cells(1, m2 + 1) Then
tablo(3, m) = m2 + 1 'enregistrement du num colonne corresp.
Exit For
End If
Next m2
Next m


'nous connaissons les colonnes à vérifier (il y en a n=nbrrep)
'compteur a zero
compteur = 0

'parcourons les 65536 lignes de la feuille excel
'a moins que dans la colonne A:A on rencontre une cellule vide
'dans ce cas on finira le processus
For m1 = 2 To 65536
If IsNull(Cells(m1, 1)) Or Cells(m1, 1) = "" Then
Exit For
End If
'a priori la ligne est bonne , à moins qu'une des
'reponses données ne soit pas intéressante à retenir
rep = True
For m = 1 To nbrrep

'je recherche si la reponse est égale à "X" ... à remplacer par ce qu'on veut ;-)
If Cells(m1, Val(tablo(3, m))) <> "X" Then
'une des reponses n'est pas interessante
'nous ne la comptabiliserons pas
rep = False
End If
Next
If rep = True Then
'le minimum de reponses acceptables a été donné, je comptabilise +1
compteur = compteur + 1
End If
Next
'j'affiche le bilan
MsgBox compteur

End Sub
0
Rejoignez-nous