> Tous les forums > Forum Bureautique
 Faire un graphique a partir de valeur texteSujet résolu
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
jg14210
  Posté le 22/03/2013 @ 14:28 
Aller en bas de la page 
Petit astucien

Bonjour à tous,

cela faisez longtemps, et j'ai plaisir à vous demander votre aide.

je veux realiser des graphique à partie de la base de donnée que j'ai créé. par exemple dans genre j'ai feminin/masculin, je voudrais un histogramme avec un pourcentage.

si j'ai l'exemple pour celui la je pense me debrouiller pour le reste.

Aussi, si vous avez 5 minutes,pourriez-vous regarder les macros pour les reduire car quad je valide nouvel adherant le tableau bouge (on voit la macro agir)

Comment inserer mon fichier??????????????

Merci et j'attends vos réponse

Merci

jerome



Modifié par jg14210 le 22/03/2013 14:31
Publicité
ferrand
 Posté le 22/03/2013 à 15:01 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Salut,

Un peu sommaires tes indications !

Pour bâtir un graphique sur une proportion masculin/féminin, il te faut calculer cette proportion...

Macros ? Où ?

Insérer ton fichier ? Lequel et dans quoi ?

jg14210
 Posté le 22/03/2013 à 15:07 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Merci de me repondre

justement je veux joindre mon fichier mais je n'ai pas vu comment faire

j'attends pour faire

merci



Modifié par jg14210 le 22/03/2013 15:07
ferrand
 Posté le 22/03/2013 à 15:17 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Tu utilises un hébergeur : http://cjoint.com/index.php

Tu cliques sur Parcourir pour lui indiquer ton fichier. Puis sur Créer le lien. Tu copies le lien et le colles dans ton post.

jg14210
 Posté le 22/03/2013 à 15:31 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Re

voici mon fichier

http://cjoint.com/?CCwpBqx0q5p

Don dans BdD_licencié je veux créer des graphique style ""pourcentage feminin/ masculin" "repartition de nombre de personne dans groupe d'entrainement"......

Je pense qu'avec deja un exemple je pourrais me debrouiller du reste

la 2ieme chose etait le simplification de mes macros (lignes qui ne servent a rien)

Merci

ferrand
 Posté le 22/03/2013 à 17:29 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Vu, mais ça attendra un peu. Je veux bien revoir tes macros mais je laisse volontiers les graphiques à un habitué (ce qui n'est plus mon cas depuis longtemps).

D'abord {#}

ferrand
 Posté le 22/03/2013 à 21:37 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Salut,

Tu n'as pas tout perdu, en voilà une de relookée :

Sub nouvel_adherant()
Dim c As Range
For Each c In Range("bdd_nom_prenom")
If c.Value = [nouvel_adh] Then Exit Sub
Next

Sheets("Nouveau").Range("A2:Z2").Copy
With Sheets("BdD_Licenciés")
.Range("A2:Z2").Insert xlShiftDown, xlFormatFromRightOrBelow
.Range("A2").PasteSpecial xlPasteValues
End With
With ActiveWorkbook.Worksheets("BdD_Licenciés").AutoFilter.Sort
.SortFields.Clear
.SortFields.Add Key:=Range("B1"), SortOn:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
With Sheets("Nouveau")
.Range("F5:G5").ClearContents
.Range("C8:D26").ClearContents
.Range("C28").ClearContents
.Range("G28").ClearContents
.Range("D30:F31").ClearContents
End With
End Sub

Quelques commentaires :

1) Je suis partisan de la déclaration des variables, c'est toujours susceptible d'éviter un pb ultérieur... Ceci étant j'émets quelques réserves sur le début de ta macro (en rouge). En effet, tu as dans ta liste d'exemple 2 fois le même nom-prénom, avec des données différentes, que tu n'aurais pas dû pouvoir rentrer, la macro aurait dû rejeter l'inscription ! Je trouverais préférable de mettre un message d'alerte, le temps de voir, plutôt que bloquer l'inscription. Remarque, ça n'efface pas la saisie, c'est déjà ça !

2) J'ai modifié le 2e argument de la méthode Insert, de façon qu'il prenne le format de la ligne en-dessous à l'insertion (NB: cette commande n'existe que depuis 2007 je crois).

3) J'ai conservé in-extenso tous les éléments de la méthode de tri (je n'utilise pas celle-ci dans mon code, dansla mesure où ce que je fais est susceptible de tourner sur des versions antérieures...). On peut peut-être supprimer des éléments, mais n'étant pas familiarisé avec, j'ai préféré laisser...

4) J'ai fait passer le bloc Tri avant l'effacement de la feuille formulaire, cela évite quelques désagréments visuels.

Les autres à suivre.... demain

NB: J'ai mis dans un bloc "citation" pour voir si celui-ci conserve l'indentation, car dans le corps du message elle n'est pas conservée.

edit : ne conserve pas plus ! Donc j'ai remis dans le message. Je te ferais passer le classeur à la fin



Modifié par ferrand le 22/03/2013 21:40
jg14210
 Posté le 22/03/2013 à 22:01 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

merci

deja visulement c'est mieux. c'est ce que je voulais.

J'attends la suite.

on voit, on apprend, ça me plait

ferrand
 Posté le 22/03/2013 à 22:19 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Jeté un oeil sur la suppression. Me semble qu'il y a une anomalie : je ne vois pas collage dans anciens-licenciés de la ligne supprimée dans licenciés, après insertion d'une ligne. Je verrais ça à tête reposée.

Je vois aussi que tu fais le même tri à chaque fois. On peut donc renvoyer le tri à une procédure unique que les autres utilisent.

Je stoppe pour ce soir !

Publicité
ferrand
 Posté le 23/03/2013 à 11:07 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Bonjour,

Quelques commentaires en intermède , concernant ton formulaire de saisie ("nouveau") :

Ta formule dans D2 : =SI(C2="";"";ANNEE(Parametres!H2)-ANNEE(C2)), or dans C2 tu as : =C9. Lorsque rien n'est saisi, C9 est vide, il s'ensuit que C2 ne renvoit pas la valeur "" mais dans cet environnement la valeur 0 utilisable par la formule en D2, laquelle affiche (ANNEE(0) étant = à 1900) : 113 (repris par E2 pour afficher "Vétéran").

De plus, comme rien n'empêche la validation d'un formulaire non saisi, si tu cliques sur Enregistrer, tu obtiens un enregistrement ne comportant comme données que l'âge (113 ans), la catégorie ("Vétéran" !) et le numéro d'ordre en cours.

Je conseillerais donc :

1) Remplacer C2 par C9 dans ta formule en D2, soit pointer directement sur la source saisie : si C9 est vide, C9="" renverra VRAI et : =SI(C9="";"";ANNEE(Parametres!H2)-ANNEE(C2)) n'affichera rien en D2 (de même que rien ne s'affichera en E2).

2) Bloquer l'insertion d'un enregistrement sans données, par exemple avec :
If [nouvel_adh]="" Then Exit Sub

3) Point annexe car tu peux estimer qu'il n'a aucune raison de se produire : ton numéro d'ordre étant prélevé directement à partir de l'état des adhérents, si pour une raison quelconque tu es amené à supprimer le dernier entré pour le basculer dans les anciens... son numéro sera repris pour l'enregistrement suivant et tu aurais un numéro en double. Peu de chances certainement, mais je te soumets tout de même le cas.

A+ pour la suite

ferrand
 Posté le 23/03/2013 à 12:12 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Bonjour,

Ma proposition révisée pour ajout d'adhérents :

Sub nouvel_adherant()
Dim c As Range
For Each c In Range("bdd_nom_prenom")
If c.Value = [nouvel_adh] Then Exit Sub
Next

Sheets("Nouveau").Range("A2:Z2").Copy
With Sheets("BdD_Licenciés")
.Range("A2:Z2").Insert xlShiftDown, xlFormatFromRightOrBelow
.Range("A2").PasteSpecial xlPasteValues
End With
Tri "BdD_Licenciés"
With Sheets("Nouveau")
.Range("F5:G5").ClearContents
.Range("C8:D26").ClearContents
.Range("C28").ClearContents
.Range("G28").ClearContents
.Range("D30:F31").ClearContents
End With
End Sub

Sub Tri(fat As String)
With ActiveWorkbook.Worksheets(fat).AutoFilter.Sort
.SortFields.Clear
.SortFields.Add Key:=Range("B1"), SortOn:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub

Pas de modif. par rapport à précédente, hormis que le tri est basculé sur une procédure auxiliaire...

ferrand
 Posté le 23/03/2013 à 12:20 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Pour les modifications :

Sub modification()
Dim n%
If MsgBox("confirmation des modifications", vbYesNo, "suppression") = vbYes Then
n = [param_no_ligne] + 1
Sheets("Consultation et Modification").Range("A2:Z2").Copy
Sheets("BdD_Licenciés").Range("A" & n).PasteSpecial xlPasteValues
If [nom_prenom_modif] <> "" Then Tri "BdD_Licenciés"
With Sheets("Consultation et Modification")
.Range("E8:F26").ClearContents
.Range("C29").ClearContents
.Range("G29").ClearContents
.Range("D32:F32").ClearContents
.Range("D34:F34").ClearContents
End With
End If
End Sub

En bleu : petite suggestion pour faciliter l'écriture (rien de fondamental)

En violet : autre suggestion pour éviter quelque bévue éventuelle (j'ai expérimenté )

En vert : 3e suggestion : appel de la procédure de tri si on modifie le nom.

A suivre...

ferrand
 Posté le 23/03/2013 à 12:33 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Pour les suppressions :

Sub suppression_adherant()
Dim n%
If [param_no_ligne] = 0 Then Exit Sub
If MsgBox("confirmation de la suppression", vbYesNo, "suppression") = vbYes Then
Sheets("BdD_Ancien_licencié").Range("A2:Z2").Insert xlShiftDown, xlFormatFromRightOrBelow
n = [param_no_ligne] + 1
With Sheets("BdD_Licenciés").Range("A" & n & ":Z" & n)
.Copy Sheets("BdD_Ancien_licencié").Range("A2")
.Delete xlShiftUp
End With
Tri "BdD_Ancien_licencié"

If [nb_enregistrement_bdd] < [param_no_ligne] Then [param_no_ligne] = [param_no_ligne] - 1
End If
End Sub

En bleu : même aménagement que pour modification.

En rouge : une bonne partie du code était hors de la condition, autrement dit il s'exécutait en cas de réponse "non" ! Il est sage de l'éviter

En violet : le collage sur "ancien licencié" manquait (?)...

En vert : appel de la procédure de tri.

Remarque : la 1re condition ([param_no_ligne] = 0) ne devrait pas se produire : bien verrouillé pour que ça reste entre 1 et le nb total d'enregistrement (sauf à le mettre manuellement !)

A+

ferrand
 Posté le 23/03/2013 à 12:53 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

http://cjoint.com/?CCxmMuHDIiA

J'ai rassemblé toutes les procédures sur un seul module, inutile de les disperser, le volume demeure réduit.

Pas de commentaire particulier sur les petites procédures de déplacement...

J'ai conservé tri_adh, que tu pourras toujours associer à un bouton (bien qu'en l'état actuel, le tri étant réalisé à chaque fois, elle ne serait guère utile), et actualiser_tcd qui n'est également associée à aucun bouton.

Dans la logique de ton organisation, je te suggèrerais d'introduire une procédure Workbook_Open dans le module ThisWorkbook, avec comme commande :

Sheets("Menu").Activate

de façon à ouvrir sur la page Menu (je ne l'ai point fait).

jg14210
 Posté le 24/03/2013 à 12:06 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Merci pour tout ces élements et cette aide

Je note le sujet clos.

ferrand
 Posté le 24/03/2013 à 12:15 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Hello

Je poursuis en ton absence ! J'ai pensé te proposer en option un regroupement de toutes tes petites procédures d'allées et venues dans une même macro...

En effet, dans la mesure où tu utilises des boutons de formulaire (et non des contrôles Forms), la chose était tout à fait possible...

Pour préparer, j'ai donc commencé par renommer les boutons. Là problème inattendu : certains noms se modifiaient sans difficulté et d'autres non ! J'ai donc pour en avoir le coeur net construit une macro pour les renommer et là autre surprise : erreur d'exécution 70 = accès refusé ! A ceci près que certains boutons que je pouvais renommer manuellement ne se renommaient pas par vba et d'autres que je n'avais pu renommer changeaient de nom ! Un beau désordre. Je ne pouvais incriminer l'UAC, désactivé sur ma machine, ni d'autres protections similaires. Et il n'y avait aucune protection particulière dans ton fichier ! J'ai fini par faire disparaître ton nom des propriétés du fichier , je ne jurerais pas que cela a été déterminant mais ça a fini par fonctionner : j'ai rebâti une macro de renommage qui s'est avérée opérationnelle et j'ai encore ensuite renommé manuellement (sans obstacle) pour vérifier et avoir les noms qui me convenaient le mieux.

Les boutons sont simplement renommés sous la forme : "btn xx", xx étant un numéro à 2 chiffres, chaque bouton ayant ainsi un numéro d'ordre différent. Une expression VBA : Application.Caller permet de renvoyer la façon dont l'exécution du code a été appelée. Elle est à manipuler avec quelque précaution car selon le cas des valeurs renvoyées sont de type différent et peuvent facilement alors déclencher une erreur. Mais s'agissant des boutons de formulaire cette expression renvoie le nom du bouton en tant que chaîne. La macro n'étant susceptible d'être lancée que par les boutons auxquels elle est affectée, on n'a donc aucun risque. Pour plus de commodité, on récupère les 2 derniers caractères du nom sous forme de nombre et selon le nombre (choix conditionnel Select Case) on lance la commande correspondante. La macro construite, on l'affecte à tous les boutons concernés et l'on n'a plus qu'une seule procédure à la place de procédures diverses, chacune associée à un bouton...

C'est bien sûr extensible, tu peux ajouter des boutons pour accomplir telle ou telle petite action, les renommer dans les mêmes formes en prenant des numéros d'ordre (à 2 chiffres) différents de ceux déjà utilisés, introduire dans la macro les Case x correspondants avec la commande à effectuer dans chaque cas et affecter la macro aux nouveaux boutons mis en place...

http://cjoint.com/?CCymnLVTQyk

NB- Je t'ai laissé la macro de renommage des boutons au cas où elle pourrait t'être utile. Eviter de la lancer ! Elle renommerait les boutons autrement et il te faudrait tout réajuster pour que cela fonctionne...

Bon dimanche.

ferrand
 Posté le 24/03/2013 à 12:18 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Ah ! Passé pendant que je faisais mon complément !

J'espère que tu trouveras ton compte dans mes propositions. Par contre, si tu veux obtenir des réponses sur la contruction de graphiques, je crois qu'il serait préférable de rouvrir un sujet spécifique pour cela.

A+

Publicité
jg14210
 Posté le 24/03/2013 à 18:20 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

oui, et je t'en remercie, tu vois, je reviens pour regarder toutes tes propositions.

Pour les graphiques, tout bêtement, j'ai crée un nouvelle feuille et je me suis débrouillé avec une formule =nbsi() et ça me va.

Merci ferrand.



Modifié par jg14210 le 24/03/2013 18:24
Page : [1] 
Page 1 sur 1

Vous devez être connecté pour poster des messages. Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !


Sujets relatifs
[graphique XL sans valeur nulle]
valeur en pourcentage graphique openoffice
Graphique à partir de tableau Excel 2007
Faire des séries regroupées de 4 nb à partir de 3
numérisation de texte à partir de Word 2007
Comment faire du texte vertical
Faire tenir texte sur une page
faire clignoter du texte en VBA
Texte Vertical dans Word 2007 , comment faire ?
Problème pour faire un graphique
Plus de sujets relatifs à Faire un graphique a partir de valeur texte
 > Tous les forums > Forum Bureautique