Formulaire Access et pourcentage d'avancement

Goste Messages postés 5 Date d'inscription lundi 16 avril 2007 Statut Membre Dernière intervention 20 avril 2007 - 17 avril 2007 à 14:37
Goste Messages postés 5 Date d'inscription lundi 16 avril 2007 Statut Membre Dernière intervention 20 avril 2007 - 20 avril 2007 à 21:15
Bonjour,

Je dois créer unTableau d'avancement par pourcentage à partir de jalons contenus dans une base de donnée Access.

Ma base de donnée ressemble à ca:

Site.........Jalon1........Jalon2......Jalon3
10021........S10...........S11...........S12
10417........S12
10977........S09...........S10

Les sites correspondent à mes affaires
Les valeur des jalons correspondent à des semaines

Ce que j'aimerai obtenir à la fin serait un truc de ce style

Site..............%Avancement
10021................100%
10417..................33%
10977..................66%

A vrai dire je seche un peu sur la question et j'ai vraiment pas envie de me taper du code VBA, car je suis vraiment débutant en la matière.

Si vous avez des exemples à me soumettre, je suis tout ouïe.

Merci d'avance.

Alex

8 réponses

cs_Nicko11 Messages postés 1141 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 19 septembre 2007 3
17 avril 2007 à 14:47
Salut,

en fait j'avais pas compris le %age mais, c'est bon. Mais pour le calcul, tu veux faire comment, par code VB6, requetes, ou tu veux pas de code tout court, car ici, tu es sur VBFrance ?

Sinon, pour le code, ca peut etre rapido.
0
Goste Messages postés 5 Date d'inscription lundi 16 avril 2007 Statut Membre Dernière intervention 20 avril 2007
17 avril 2007 à 17:19
Si ca peut etre rapide et sans douleur oui je veux bien du code vba, car ca fait 6h que je me casse la tete a tenter de le faire en SQL, mais sans résultat, je suis sur VBFrance en effet car je sais très bien qu'en VBA ca peut etre fait en 3min mais je suis une quiche en VBA.

Merci beaucoup pour ton aide, j'attends de voir ton code.
0
cs_Nicko11 Messages postés 1141 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 19 septembre 2007 3
18 avril 2007 à 08:25
OK, on va faire un essai et si tu sens que c'est trop chaud, on verra pour une autre solution (SQL mais fait moi voir ta requete alors).

Je pars du principe que tu as une base Access avec une table comme tu le montres et un champ Avancement et des enregistrements et que tu as un niveau de CM2 en VB (LOL comme ca on est sur que tu comprennes car je connais pas ton niveau)

Tu cree un module (voir fenetre de la base et pas de la table),
ensuite tu mets ce code dedans (lis un peu avant car il y a des commentaires et tu dois rempacer nom_de_ta_table par son nom):

Sub Champ_Avancement ()        'Module de remplissage du champ Avancement 
                                                         'Le nom du module n'a pas d'importance

Public rs As New ADODB.recordset       'decalration objet representant un jeu d'engistrement
                                                                'Pas besoin d'objet connexion car nous sommes deja dans la base (currentproject)

Set rs = New ADODB.recordset              'Creation de l'objet

'Reccuperation du jeu d'enregistrements, tu pourras voir une requete SQL                                                                            
rs.CursorLocation = adUseClient
rs.Open "SELECT * FROM  nom_de_ta_table ", currentproject.connection, adOpenDynamic, adLockOptimistic 


'On se positionne sur le premier enregistrement donc attention si la table est vide car erreur
rs.movefisrt

'On remplit le champ Accomplissement pour l'enregistrement sur lequel on se trouve
rs.fields("Avancement ") = 100      'Attention ca depend comment tu as declarer ce champ
                                                            'la je pars du principe que c'est un numeric

'On met a jour la table
rs.updatebatch

End Sub

Le principe est juste de modifier le champ Avancement dans un premier temps. On verra par la suite

Si tu as une erreur, dis moi la ligne ou ca plante et l'erreur qu'il te donne comme ca on avancera plus vite.

A+
0
Goste Messages postés 5 Date d'inscription lundi 16 avril 2007 Statut Membre Dernière intervention 20 avril 2007
20 avril 2007 à 04:24
Hello, merci pour ta réponse, malheureusement j'ai pu te lire que ce soir.

J'ai réussi à me débrouiller en SQL, j'ai fixé un "poids" à chacun de mes jalons et dès que j'entre une valeur dans un jalon au format SXX (où X est un numérique et le préfixe S signifie semaine), il m'active le poids afferant au jalon correspondant.

Je te balance le code SQL si ca peut aider ou aider quelqu'un d'autre.

Requete A:

UPDATE [Ma table] 
SET  [Ma table].[Jalon Poids %] = [Valeur]
WHERE [Ma table].[Jalon] <> Null;

Requete B:

UPDATE
SET  [Ma table].[Cumul Poids %] = [Jalon 1 Poids %]+...+[Jalon n Poids %]

Pour les gars qui ont un niveau CM2 en SQL, le champ [Jalon Poids %] représente la valeur que vous voulez attribuer à votre jalon
La condition Where [Jalon]<> Null exclu tous les jalons qui sont vides, attention à ne pas confondre Null avec 0 car c'est deux choses différentes.

L'avantage de ce code est qu'il est très simple, l'inconvenient est qu'il est répétitif, car il faut le faire pour chaque jalons et qu'il ne rentre pas de 0 pour les cellules "NULL" donc il ne fait aucune somme.

Pour simplifier l'exécution, j'ai créée une macro qui lance mon code SQL, et voila.

Enfin pour mieux traiter l'info, il faudrait faire une requete de type CASE THEN ELSE, de cette manière si le champ n'est pas "NULL" on met la valeur qu'on souhaite et s'il est "NULL" ou autre on met la valeur 0.

Merci beaucoup pour ton code Nicko, et concernant le VBA on va dire que j'ai un niveau 6eme , j'ai de bonnes bases en Delphi, donc j'arrive à comprendre la syntaxe utilisée, mais je suis toujours incapable de te pondre un programme en VBA.

Par ailleurs dès que j'ai pondu ma requete en mode CASE, je l'ajouterai à mon post histoire que tout le monde ait l'info. Je sais qu'on est sur VBFRANCE, mais on peut toujours utiliser le SQL dans un module VBA .
0

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

Posez votre question
cs_Nicko11 Messages postés 1141 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 19 septembre 2007 3
20 avril 2007 à 08:02
Salut,

l'important c'est que ca marche, moi je maitrise pas SQL donc je fais tout par recordset. SQL c'est bien pour des opérations pas trop complexes car quand tu as des bases avec des groupes de travail et tout, c'est deja plus chiant.

Au moins si un jour, tu as besoin d'une connexion a une base, bah tu as mon code et de la tu pourras commencer a apprendre a faire des opérations elementaires.

Moi, j'ai appris VB6 (et VBA car il découle de VB6) en 1 mois l'année derniere et j'ai commencer a me debrouiller seul en 3. Donc, en peu de temps tu pourras sauter des classes et passer de la 6 au bac LOL.

Pour finir, oui, c'est bien de mettre ta requete avec le case, ca pourra aider les gens dans le besoin (le SQL n'est pas un pb pour VBFrance car etroitement lié a VB) meme si souvent, ils preferent poser la question au lieu de cherche dans le forum. Mais qui sait sa pourrait peut etre me servir egalement.

A+
0
Goste Messages postés 5 Date d'inscription lundi 16 avril 2007 Statut Membre Dernière intervention 20 avril 2007
20 avril 2007 à 11:19
Ya un pépin par contre, j'ai l'impression qu'Access ne gere pas la commande CASE, je suis vert quoi.
0
cs_Nicko11 Messages postés 1141 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 19 septembre 2007 3
20 avril 2007 à 11:30
Essaie plutot SELECT CASE.

Sinon pour ta requete  avec RAF1, c'est la merde grave (en tout cas de mon coté). Par contre en ADO, ca devrait pas etre trop compliqué
0
Goste Messages postés 5 Date d'inscription lundi 16 avril 2007 Statut Membre Dernière intervention 20 avril 2007
20 avril 2007 à 21:15
J'ai trouvé la solution, access gere pas le case j'ai l'impression, donc pas grave, vu que ma requete SQL plantait enfin ne calculait pas tout mes champs car j'avais des champs NULL, j'ai remplacé les valeurs NULL par 0, et le tout est joué :p

Et j'ai imbriqué les deux requetes dans une macro, premiere requete à executer celle qui remplace valeurs Null par 0, ensuite la requete que je vous ai montré ci-dessus.

Pour le script SQL ca donne un truc de ce genre:

Update [Ma_Table]
Set [Ma_Table].[Mon_Champs]=0
When [Ma_Table].[Mon_Champs]= Null;

Il faut toujours choisir la simplicité.
0
Rejoignez-nous