Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
Onglet, DI_2016, j'ai un tableau de données, extraction d'un autre logiciel
je dois réaliser des stats ...
Onglet bilan Atelier :
Dans la colonne B, je dois afficher la liste des intervenants sans doublon (onglet DI-2016, colonne S) et par ordre alphabétique ci-possible.
je dois mettre automatiquement la personne responsable de l'atelier (colonne F dans le tableau de données)
Mais si c'est possible. Pour "DI-MES" vous ajoutez 1 à la colonne 6 et aussi 1 à la colonne 5, Pour "DI-SAV" vous ajoutez 1 à la colonne qui lui est propre et aussi 1 à la colonne 5. Remarquez: des formules 'horizontales' ne sont pas très pénalisantes. On pourrait en mettre quelques unes d'un seul coup sur certaines colonnes tout à la fin si vous préférez. Comme ça on n'a plus à s'occuper, dans le corps de la boucle interne, que des colonnes qui permettront de calculer tout le reste à l'aide de ces formules.
Et bien sûr s'il faut ajouter 1 à la colonne 5 quelque soit le DI vous le faites tout simplement, sans faire de If !
Et si les colonnes spécifiques de chaque DI ne servaient qu'à obtenir cette somme, et bien on n'en aura plus besoin du tout. Mais je ne crois pas, n'est-ce pas, sinon vous auriez simplement eu une formule NB.SI pour ce que vous appelez l'atelier, ou l'intervenant je ne sais plus…
Bon. Continue jusqu'à ce qu'à avoir tout ce qu'il faut. On verra, pour ne pas en répéter, à mettre en quelque sorte en facteur certains tests, optimiser, simplifier, après.
Réfléchis: pour les sommes de montants c'est comme pour les nombres devant résulter d'un comptage, sauf qu'au lieu d'ajouter 1 dans la bonne colonne on y ajoute le montant Détail(25)
Il y aurait sans doute intérêt à faire un Select Case Détail(8) pour ne pas le tester plusieurs fois les deux cas et grouper dans chaque Case tout ce qu'il y a à faire dans ce cas, mais à part ça, ça me parait pas mal.
Information: j'ai nommé "BilanAtelier" la plage A18:AI2… je ne sais plus où elle se terminait car ça a maintenant disparu, supprimé toutes les lignes derrière qui ne servaient à rien. Dans la procédure remplacé les deux dernières instructions par :
VB:
ValPlgAju(Me.[BilanAtelier], L) = T
Ça donne un résultat plus propre et un graphique plus lisible (après rectification de la référence de la plage source de l'axe des X qui était une plage d'un autre classeur !)
Bonjour.
J'ai pourtant vu pleins de noms dans le classeur et en particulier dans cette feuille ! D'où viennent ils ? Il serait bon de faire le ménage !
Ce serait possible si au lieu d'être classé par atelier c'était classé par secteur géo.
Un SsGroup Secteur qui englobe tout ça, juste avant le Next Secteur on enregistre dans Secteur.Tag la valeur de L et on nomme les parties à la fin
On pourrait avoir besoin de cette fonction pour former des noms valides à partir de Secteur.Id :
VB:
Function NomValide(ByVal Z As String) As String
Dim P&, C$, Minus As Boolean
For P = 1 To Len(Z)
C = Mid$(Z, P, 1)
If UCase(C) <> LCase(C) Then
NomValide = NomValide & IIf(Minus, LCase(C), UCase(C))
Minus = True
Else
If C Like "#" And Len(NomValide) > 0 Then NomValide = NomValide & C
Minus = False
End If: Next P
End Function
Pour donner un nom à une plage le plus simple c'est de faire Plage.Name = LeNom avec Plage: une expression Range représentant la plage à nommer et LeNom: une expression String valant le nom à lui donner.
À part la zone d'impression mal définie et les lignes à supprimer au delà de la 62 (actuellement) pour ne plus avoir leur quadrillage inutile, je ne vois rien d'anormal.
En produisant le bilan par Zone Géo, il serait possible de donner des noms aux différentes zones, et faire autant de graphiques que de zones. Ça ne conviendrait pas ?
Les noms de plages sont acceptés dans les graphiques.
Sinon c'est vrai qu'en filtrant ça va bien aussi.
Mais alors il serait prudent de mettre ça avant toute autre instruction :
VB:
If Me.FilterMode Then Me.ShowAllData
Voire demander par un MsgBox s'il faut continuer ou abandonner :
VB:
If Me.FilterMode Then
If MsgBox("La liste est actuellement filtrée." & vbLf _
& "Voulez vous continuer ?", vbYesNo, Me.Name) = vbNo Then Exit Sub
Me.ShowAllData: End If
IMPORTANT. Je viens de trouver un bogue dans la procédure ValPlgAju (module Utilit).
J'ai provisoirement laissé en commentaires deux instructions foireuses et mis de meilleures juste en dessous :
VB:
' If N1 Then Set Plg = Plg.Resize(, Plg.Columns.Count + Dif)
If N1 Then Set Plg = Plg.Resize(, CMax)
VB:
' If N1 Then Set Plg = Plg.Resize(Plg.Rows.Count + Dif)
If N1 Then Set Plg = Plg.Resize(LMax)
Oui ça à l'air pas mal les filtres après tout.
Mis un bouton de Formulaire (et non ActiveX) sur la feuille avec le graphique, texte : "Nord - Est".
Affecté la petite macro FiltreRégion, écrite dans un module standard:
VB:
Sub FiltreRégion()
Dim Région As String
Région = Feuil5.Shapes(Application.Caller).TextFrame.Characters.Text
Stat6.AutoFilter.Range.AutoFilter Field:=3, Criteria1:=Région
Feuil5.Shapes("ZoneTexte 5").TextFrame.Characters.Text = _
"Nombre de DI et type géré par Atelier - Région " & Région
End Sub
Il ne reste qu'à mettre un bouton pour chaque région et lui affecter cette même macro.
J'ai fait et testé tous ce que tu ma dis
Correctif => OK
L'intruction "Filtre" ne semble pas marcher, mais je ne l'ai peut etre pas mise au bonne endroit ?
Les boutons sur l'onglet graphique me conviennent parfaitement
Mon graph reste néanmoins tous pourri ...
Je l'ai re paramètrer plusieurs fois, mais a chaque c'est la même chose ???
Document Cjoint
Autre question qui n'a rien à voir
J'ai rajouté un onglet qui me permet de gérer une carte de France des interventions par département (détail)
Je trouve tellement bien ton mode de calcul par VBA pour les stats que j'aimerais faire pareil sur cet onglet
Mon problème est que ma liste de département est fixe (de 01 à 98), je ne veux pas la modifier
Je veux juste faire les calculs, j'ai tournée le code dans tous les sens je n'ai pas trouvé
Bonjour
J'avais dit 'avant toute autre instruction'. Même Set PlgDon = etc.
Un seul des deux code est à appliquer, le deuxième ne fonctionnera jamais puisqu’après un ShowAllData la liste n'est plus filtrée.
Les boutons on l'air de bien marcher, non ? Qu'est ce qu'il a de pourri le graphique ? (à part, semble-t-il si on regarde la légende, une masse d'anciennes séries qui ne servent plus à rien et qu'il faudrait supprimer)
On peut tout à fait utiliser GroupOrg pour mettre à jour des données couleurs pour ce type de carte. S'il y avait simplement 95 numéros de départements qui se suivent sans trou, on pourrait ne plus utiliser un L incrémenté en sortie mais directement NumDépt.Id comme indice de ligne. Mais comme ce n'est pas le cas, il faudra se fabriquer un Dictionary des numéros de lignes par département à partir de la table des départements.
bonjour Dranreb
Je vois que vous tes toujours très actif
je reviens vers vous sur un nouveau projet sur la même base de donnée qui depuis 2016 c'est considérablement enrichie
Mon tableau Excel et les stats liées doivent évoluer ...
Je me replonge dans le code VBA, dur dur et je n'arrive pas a referme marché le code
Pouvez m'aider, a me remettre a niveau SVP ?
peut être y a t'il une nouvelle version Excel depuis le temps celui-ci était déjà génial
Merci d'avance
Sylvain
Bonjour.
Apparemment il manque le nom "Performance" pour que ça marche.
Par ailleurs il y a du ménage à faire dans les noms. Beaucoup de #REF!
Mais c'est vrai que ça s'est modernisé de mon coté depuis: le processus de classement est différent, le type d'objet des supports de l'info s'est simplifié en SsGr, et la fonction s'appelle comme les poupés russes: Gigogne.
Je le propose peu car beaucoup arrivent à sortir la même chose avec Power Query.
Bonjour Dranred
Je ne vois pas justement ou l'info manque il y a un truc qui m'échappe
Je n'ai pas Power Query sur mon excel juste Power Pivot est ce la même chose ?
Moi je suis nul mais j'aime bien le VBA dans le fond ....
Bonjour.
Il n'y a toujours pas de nom "Performance" défini. Ni de tabeau Excel portant ce nom. Alors M.[Performance] ne renvoie pas un objet Range de la feuille.
Ce site utilise des cookies pour personnaliser le contenu, adapter votre expérience et vous garder connecté si vous vous enregistrez.
En continuant à utiliser ce site, vous consentez à notre utilisation de cookies.