Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/03/2011, 22h50   #1
Invité régulier
 
Martin Dallaire
Inscription : décembre 2010
Messages : 39
Détails du profil
Informations personnelles :
Nom : Martin Dallaire

Informations forums :
Inscription : décembre 2010
Messages : 39
Points : 5
Points : 5
Par défaut comment faire un tirage

Bonjour,

j'ai fait un code qui calcule le nombre d'enregistrement dans la table
Code :
nb = DCount("*","NomRequete")
qui s'affiche dans un texte box que j'ai appeler txtAgagne.

Maintenent j'aimerais sortire l'un des ces enregistrement au hasard qui serais le gagnant. J'ai essayé la démarche dans le forum mais j'aurais un peu plus besoin d'aide dans le sens me dire comment faire ou je l'insert le code.
sa serais apprécié.

Merci
Martintin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2011, 05h11   #2
Membre Expert
 
Homme Pierre ANTOINE
Inscription : février 2008
Messages : 650
Détails du profil
Informations personnelles :
Nom : Homme Pierre ANTOINE
Âge : 43
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : février 2008
Messages : 650
Points : 1 302
Points : 1 302
Bonjour

Sans certitude, voici un début de piste :

Pour choisir au hasard, utiliser la fonction rnd ou randomize. A vérifier.

Il faudra tirer un nombre compris entre 1 et le nombre total d'enregistrement.

Par contre vous avez tout intérêt à faire en sorte que chaque enregistrement est un "numéro" et que ces numéros soient une suite continue, sans trou.

Autrement dit, il faut sans doute passer par une table temporaire comportant tous les enregistrements participants, avec ce champ "numéro".

Pierre
pier.antoine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/03/2011, 22h36   #3
Invité régulier
 
Martin Dallaire
Inscription : décembre 2010
Messages : 39
Détails du profil
Informations personnelles :
Nom : Martin Dallaire

Informations forums :
Inscription : décembre 2010
Messages : 39
Points : 5
Points : 5
ok sa l'air simple pour toi mais un novice comme moi c'est compliqué. J'ai besoin de plus de détail avec du code qui fonctionne.

est-ce que quel qu'un a déja fais se genre de tirage la ? si oui et bien peux-etre juste partagé le code par la suite je pourrai l'adapté pour moi.

Merci à l'avance

bon voici se que je cherchais...

Code :
1
2
3
4
5
6
7
Public Function Tirage() As Long
Dim Myvalue As Long
Randomize
 
Myvalue = Int((642 * Rnd) + 1)
Tirage = Myvalue
End Function
Martintin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2011, 02h51   #4
Invité régulier
 
Martin Dallaire
Inscription : décembre 2010
Messages : 39
Détails du profil
Informations personnelles :
Nom : Martin Dallaire

Informations forums :
Inscription : décembre 2010
Messages : 39
Points : 5
Points : 5
Maintenant voici se que je veux faire, je veux que quand je part le tirage qui me donne un nombre de 1 au max d'enregistrement de la table.

avec cette formule

Code :
1
2
3
4
5
6
7
Public Function Tirage() As Long
Dim Myvalue As Long
Randomize
 
Myvalue = Int((642 * Rnd) + 1)
Tirage = Myvalue
End Function
alors j'ai un control text qui affiche le nombre d'enregistrement de la table client, a chaque fois qui a un ajout de client bien le controle se met a jour. se que je veux c'est d'etre capable de remplacer le 642 par le nombre d'enregistrement dans la table pour faire le tirage.

Quelqu'un peut m'aider ?
Martintin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2011, 05h00   #5
Membre Expert
 
Homme Pierre ANTOINE
Inscription : février 2008
Messages : 650
Détails du profil
Informations personnelles :
Nom : Homme Pierre ANTOINE
Âge : 43
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : février 2008
Messages : 650
Points : 1 302
Points : 1 302
Bonjour

Pour résoudre votre problème il faut introduire dans votre fonction un paramètre, le nombre d'enregistrements, c'est à dire le nombre par lequel il faut multiplier le numéro "rnd"

Code :
1
2
3
4
5
6
7
8
Public Function Tirage(nbrelements as long) As Long
       Dim Myvalue As Long
       Randomize

       Myvalue = Int((nbrelements * Rnd) + 1)
       Tirage = Myvalue
End Function


Pour appeler votre fonction :
Code :
1
2
 
resultat = Tirage (MonControleTexte)

Pierre
pier.antoine est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/03/2011, 20h52   #6
Invité régulier
 
Martin Dallaire
Inscription : décembre 2010
Messages : 39
Détails du profil
Informations personnelles :
Nom : Martin Dallaire

Informations forums :
Inscription : décembre 2010
Messages : 39
Points : 5
Points : 5
ok merci pierre, sa fonctionne, mais j'ai un autre probleme ; l'enregistrement de ma table commence par le nombre 0 et je voudrais qu'il commence par 1.

j'ai tenté de faire ceci :

Code :
1
2
3
4
5
6
7
Private Sub Form_Load()
 
    'permet de compter le nombre d'enregistrement dans une table et de l'afficher dans txtAgagne
    txtAgagne = DCount("*", "Client Requête") + 1
 
 
End Sub
mais a sa fonctionne tout croche genre que quand je ferme le formulaire et que je le réouvre bien l'enregistrement 1 passe au 2.

pouvez-vous m'aider ?
Martintin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/03/2011, 05h05   #7
Membre Expert
 
Homme Pierre ANTOINE
Inscription : février 2008
Messages : 650
Détails du profil
Informations personnelles :
Nom : Homme Pierre ANTOINE
Âge : 43
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : février 2008
Messages : 650
Points : 1 302
Points : 1 302
Bonjour

Essayez un

peut-être

Pierre
pier.antoine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/03/2011, 19h43   #8
Invité régulier
 
Martin Dallaire
Inscription : décembre 2010
Messages : 39
Détails du profil
Informations personnelles :
Nom : Martin Dallaire

Informations forums :
Inscription : décembre 2010
Messages : 39
Points : 5
Points : 5
mmm non sa fonctionne pas cette commande. mon plus gros probleme de ce temps la c'est que le premier enregistrement commance par 0 alors que je veux que l'enregistrement commence par 1.

alors j'ai sa comme code pour

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
Option Compare Database
Dim nbe As Long
 
 
Public Sub CmdAjout_Click()
On Error GoTo Err_cmdajout_click
 
 DoCmd.GoToRecord acDataForm, Me.Name, acNewRec
 
txtAgagne.Requery     ' Raffraichissement du champs qui montre le nombre d'enrgistrement rendu
 
 Prénom.SetFocus
 nbe = DCount("*", "Client Requête")
 txtAgagne = nbe
 
Exit_cmdajout_click:
    Exit Sub
 
Err_cmdajout_click:
    MsgBox "Tous les champs qui sont accompagné d'un astérix * sont obligatoire "
    MsgBox "Si vous avez déja participé au tirage vous ne pouvez pas être inscris une autre fois, Bonne chance"
    Resume Exit_cmdajout_click
 
    End Sub
 
 
 
Private Sub Form_Current()
    Prénom.SetFocus
 
 
End Sub
 
 
Private Sub Form_Load()
    'Permet de cacher le ruban
    DoCmd.ShowToolbar "Ribbon", acToolbarYes
 
    DoCmd.GoToRecord acDataForm, Me.Name, acNewRec
    nbe = DCount("*", "Client Requête")
    txtAgagne = nbe
 
 
End Sub
A+
Martintin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2011, 16h37   #9
Rédacteur/Modérateur
 
Avatar de User
 
Homme Denis
Développeur informatique
Inscription : août 2004
Messages : 3 205
Détails du profil
Informations personnelles :
Nom : Homme Denis
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : août 2004
Messages : 3 205
Points : 5 258
Points : 5 258
Bonjour,

Si vous n'avez pas eu de réponse c'est que votre problème reste flou

Que souhaitez-vous faire précisément ?

A quoi correspond la source "Client Requête" ?

Quelle est la source du formulaire ?

Ne faut-il pas mettre à jour l'enregistrement avec de nouvelles données et le sauvegarder dans la table source avant qu'il ne soit pris en compte et donc avant de mettre à jour le champ txtAgagne avec le dcount ?

Dans ce cas l'actualisation de la zone de texte ne devrait-elle pas se faire sur l'évènement "après insertion" ?

Code :
1
2
3
4
5
Private Sub Form_AfterInsert()
 
Me!txtAgagne = DCount("*", "Client Requête")
 
End Sub
A+
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp.

Bon développement !


Mes tutoriels et contributions sur ma page perso:
Ma page personnelle
User est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2011, 18h27   #10
Invité régulier
 
Martin Dallaire
Inscription : décembre 2010
Messages : 39
Détails du profil
Informations personnelles :
Nom : Martin Dallaire

Informations forums :
Inscription : décembre 2010
Messages : 39
Points : 5
Points : 5
Bonjour merci de me répondre, et bien je vais essayé d'éclaissir la situation.

Client requete me sert pour quand j'interroge la table qu'il me donne le nombre d'enregistrement.

Alors voici, j'ai fait une base de donnée qui va servire a entrer des participant a un tirage. C'est participant la va entrer leur nom ; prénom ; et vont choisir l'exposant qu'ils ont préférer. a la toute fin je veux etre capable de faire tirage alléatoir de ces participant-là. allors chaqu'un des participant est numéroté par un numéro d'enregistrement dans la table et au fure et a mesure qu'ils s'inscrivent dans la base de données il a un nurméro qui est attribué au participant en fait c'est le numéro d'enregistrement. Je veux que quand je click sur le bouton tirage et bien qu'il me sorte le numéro du gagnant c'est-à-dire le numéro d'enregistrement avec les coordonnés du gagnant.

Là pour l'instant je suis capable d'inscrire le client et de faire sortir le numéro de l'enregistrement. mais mon probleme est que l'enregistrement commence a 0 et je veux qui commence par 1.

en passant sa va etre une base de donnée multiutilisateur..

est-ce que c'est assez claire ??

Merci
Martintin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2011, 18h59   #11
Invité régulier
 
Martin Dallaire
Inscription : décembre 2010
Messages : 39
Détails du profil
Informations personnelles :
Nom : Martin Dallaire

Informations forums :
Inscription : décembre 2010
Messages : 39
Points : 5
Points : 5
Il doit y avoir une formule du genre avec le if pour dire que si l'enregistrement est plus petite que 1 bien de commencer à 1 sinon bien reste comme ca ....

etes-vous capable de M'aider

merci
Martintin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2011, 19h00   #12
Rédacteur/Modérateur
 
Avatar de User
 
Homme Denis
Développeur informatique
Inscription : août 2004
Messages : 3 205
Détails du profil
Informations personnelles :
Nom : Homme Denis
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : août 2004
Messages : 3 205
Points : 5 258
Points : 5 258
Salut,

Tu crées un bouton cmdtirage et tu mets le code suivant sur clic :

Code :
1
2
3
4
5
6
7
8
Private Sub cmdtirage_Click()
Dim indEnrg as long
 
IndEnrg=Int(Rnd * Me!txtAgagne)
 
DoCmd.GoToRecord , , acGoTo, indEnrg
 
end sub
A+
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp.

Bon développement !


Mes tutoriels et contributions sur ma page perso:
Ma page personnelle
User est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2011, 01h40   #13
Invité régulier
 
Martin Dallaire
Inscription : décembre 2010
Messages : 39
Détails du profil
Informations personnelles :
Nom : Martin Dallaire

Informations forums :
Inscription : décembre 2010
Messages : 39
Points : 5
Points : 5
voici les deux formulaire que j'ai fait. le formulaire client est celui que le client entre ses coordonnés et le formulaire tirage est celui qu'a la toute fin de l'activité et bien ont fait un tirage en cliquant sur le bouton go et bien y a un numéro aléatoire qui s'affice dans le text box en haut du bouton. alors j'ai fait un modul en vba pour le tirage que voici :
Code :
1
2
3
4
5
6
7
8
9
Option Compare Database
 
Public Function Tirage(nbrelements As Long) As Long
       Dim Myvalue As Long
       Randomize
 
       Myvalue = Int((nbrelements * Rnd) + 1)
       Tirage = Myvalue
End Function
Alors j'appel cette fonction dans le formulaire tirage en cliquand sur go :

Code :
1
2
3
4
5
Private Sub cmdgo_Click()
 
txtresultat = Tirage(txtAgagne)
 
End sub
txtAgagné il affiche le nombre d'enregistrement dans la table client.

Voici se qui suit dans le formulaire tirage :

Code :
1
2
3
4
5
6
7
8
Private Sub Form_Current()
 
    DoCmd.GoToRecord acDataForm, Me.Name, acNewRec
    nbe = DCount("*", "Client Requête")
    txtAgagne = nbe
 
 
End Sub
alors quand j'appuis sur go il y a un nombre qui s'affiche entre 0 et le nombre dans txtAgagne, c'est-à-dire le nombre d'enregistrement dans la table client.

Voici se que je veux, l'orsque j'appuis sur go bien que l'information nom, #tél, et tout le reste de l'information du gagnant correspondant au nombre sortie dans txtresultat et qu'il s'enregistre dans une table gagnant.

Maintenant est-ce que je suis assez claire

j'espere que quelqu'un va me comprendre

merci d'avance
Images attachées
Type de fichier : jpg ForumulaireClient.jpg (93,8 Ko, 3 affichages)
Type de fichier : jpg FormulaireTirage.jpg (93,0 Ko, 4 affichages)
Martintin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2011, 03h41   #14
Membre Expert
 
Homme Pierre ANTOINE
Inscription : février 2008
Messages : 650
Détails du profil
Informations personnelles :
Nom : Homme Pierre ANTOINE
Âge : 43
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : février 2008
Messages : 650
Points : 1 302
Points : 1 302
Bonjour

Je pense, sincèrement, qu'on a compris votre souci.
Mais ce n'est pas toujours clair en effet (et les fautes d'orthographe n'aide pas à la compréhension.

Parfois, je pense sincèrement, que vous oubliez de regarder ce que les autres vous proposent.

J'ai comme l'impression qu'il nous manque des étapes, que vous nous dîtes pas.


Récapitulatif.
Saisie des candidats (avec un formulaire)
Tirage parmi tous les candidats
Affichage du gagnant
Enregistrement de ce gagnant dans une table.


Vous n'évoquez jamais de procèdure de click sur un bouton.

Avez-vous mis en place le code de USER?
Car il vous permet de faire le tirage et d'afficher le gagnant.

Pour l'enregistrement dans une table, voir soit une requête ajout, soit utiliser DAO et les recordset. Voir ce qui vous est le plus parlant.

Pierre

PS : une des règles du forum est de mettre les code entre balises (le bouton dièse # en haut de la fenêtre d'écriture, sur la même ligne que les bouton Gras, Italique, Retrait....
pier.antoine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2011, 01h49   #15
Invité régulier
 
Martin Dallaire
Inscription : décembre 2010
Messages : 39
Détails du profil
Informations personnelles :
Nom : Martin Dallaire

Informations forums :
Inscription : décembre 2010
Messages : 39
Points : 5
Points : 5
Exactement ca Pier.Antoine,

Saisie des candidats (avec un formulaire)
Tirage parmi tous les candidats
Affichage du gagnant
Enregistrement de ce gagnant dans une table

j'ai essayé ceci comme on ma proposé plus haut, mais sa fonctionne pas, sa fait un erreur de compilation sur private sub cmdgo_Click(), et txtAgagne est en bleu.

code:
Code :
1
2
3
4
5
6
7
8
9
10
11
Private Sub cmdgo_Click()
Dim indEnrg As Long
 
    ' affiche le numéro gagnant dans txtresultat
    txtresultat = Tirage(txtAgagne)
 
    indEnrg = Int(Rnd * Me!txtAgagne)
 
    DoCmd.GoToRecord , , acGoTo, indEnrg
 
End Sub
J'ai remarqué que DoCmd.GoToRecord = 4 et acGoTo aussi = 4 mais indEnrg = 3

Alors que 4 c'est le nombre d'enregistrement dans ma table et 3 est le numéro gagnant qui correspond au 3e enregistrement...


help me please
Martintin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2011, 05h41   #16
Membre Expert
 
Homme Pierre ANTOINE
Inscription : février 2008
Messages : 650
Détails du profil
Informations personnelles :
Nom : Homme Pierre ANTOINE
Âge : 43
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : février 2008
Messages : 650
Points : 1 302
Points : 1 302
Bonjour


Il y a un souci.

Code :
txtresultat = Tirage(txtAgagne)
dans ce cas "txtAgagne" est une variable. Je pense qu'elle n'est pas définie... il y a erreur de compilation.

Essayez plutôt

Code :
txtresultat = Tirage(Me.txtAgagne)

Pierre
pier.antoine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/03/2011, 01h46   #17
Invité régulier
 
Martin Dallaire
Inscription : décembre 2010
Messages : 39
Détails du profil
Informations personnelles :
Nom : Martin Dallaire

Informations forums :
Inscription : décembre 2010
Messages : 39
Points : 5
Points : 5
bonjour Pier, merci pour ta réponse.

bien j'ai essayé le code que tu ma proposé me.txtAgagne mais sa fait encore un erreur de compilation

txtAgagne est un text box qui affiche le nombre d'enregistrement de la table client.

j'ai mis un jpg pour démontrer le bog de compil.
Images attachées
Type de fichier : jpg ErrCompil.jpg (126,8 Ko, 5 affichages)
Martintin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/03/2011, 05h38   #18
Membre Expert
 
Homme Pierre ANTOINE
Inscription : février 2008
Messages : 650
Détails du profil
Informations personnelles :
Nom : Homme Pierre ANTOINE
Âge : 43
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : février 2008
Messages : 650
Points : 1 302
Points : 1 302
Bonjour

Quelle est le message d'erreur de compilation?

Une piste : peut-être que la fonction "Tirage" demande comme argument un entier, alors que le contrôle "txtAgagne" est d'un format chaine (string).

Bonne journée

Pierre
pier.antoine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2011, 01h35   #19
Invité régulier
 
Martin Dallaire
Inscription : décembre 2010
Messages : 39
Détails du profil
Informations personnelles :
Nom : Martin Dallaire

Informations forums :
Inscription : décembre 2010
Messages : 39
Points : 5
Points : 5
regarde la piece jointe du message passé j'ai pas de message d'erreur en tant que tel mais la fenetre débugueur s'ouvre et affiche la premier ligne en jaune private sub...
Martintin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2011, 04h51   #20
Membre Expert
 
Homme Pierre ANTOINE
Inscription : février 2008
Messages : 650
Détails du profil
Informations personnelles :
Nom : Homme Pierre ANTOINE
Âge : 43
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : février 2008
Messages : 650
Points : 1 302
Points : 1 302
Euh...

Que les choses soient bien claires! Nous sommes là pour vous aider, et les différents contributeurs de ce forum (donc moi-même) nous y prenons plaisir.
Ceci dit, pour qu'une situation problématique puisse être résolu il faut en connaître les éléments pertinents.
Je comprends que quelqu'un qui ne maîtrise pas encore très bien access (ou le VBA, ou les bases de données...) ne sache pas d'emblée quels sont justement ces éléments pertinents. D'où les différentes interactions.

Vous m'indiquez votre pièce jointe.
Or, en tant que tel, cette procèdure ne montre pas d'erreur manifeste. D'ailleurs, vous le signalez, il n'y a pas de messages d'erreur.
Pourtant, l'exécution du code s'arrête sur la ligne "PrivateSub".

En regardant bien, à la gauche de cette ligne, il y a un gros point rouge bordeaux. Cela signifie qu'il y a un point d'arrêt sur cette ligne, que l'on force donc à arrêter le code, pour ensuite faire du ligne à ligne, ou vérifier le contenu d'une variable.

Que se passe-t-il si vous lancer votre procédure sans les points d'arrêt (pour enlever ou mettre un point d'arrêt, appuyer sur F9 quand le curseur est sur la ligne)?

Bonne journée, et ne perdez pas courage.
Je pense sincèrement que vous y êtes

Pierre
pier.antoine est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h14.


 
 
 
 
Partenaires

Hébergement Web