IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

NB.SI.ENS en VBA ou comment récupérer le contenu d'une zone de liste [Toutes versions]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 31
    Points : 29
    Points
    29
    Par défaut NB.SI.ENS en VBA ou comment récupérer le contenu d'une zone de liste
    Bonjour,
    À partir d'une liste d'adhérents, je voudrais remplir une feuille de statistiques.
    Les critères sont :
    - par catégorie jeunes, adultes et seniors calculé dans le UF sans souci,
    - par le choix du loisir dans une zone de liste, et là ça se complique.
    Dans la feuilles STATS, la fonction NB.SI.ENS fonctionne parfaitement mais juste à partir de la V2007. Or ce tableau doit fonctionner aussi sur les versions antérieures.
    Catégorie | Cot2012 | Broderie | Cinéma | Cuisine | etc.
    Jeunes | 422 € | 2 6
    Adultes | 340 € | 7 4
    Seniors etc.

    Formule pour l'année de cotisation : =SOMME.SI.ENS(l_mont_cot;l_id_adh;"JEU*";l_annee_adh;2012)
    Formule pour les loisirs : =NB.SI.ENS(l_id_adh;"JEU*";l_loisirs;I$2)
    J'ai essayé avec somme prod mais il me retourne 0.

    Donc pour "essayer" de contourner le problème, j'envisage de faire une boucle pour récupérer le loisir choisi et l'ajouter dans les colonnes/lignes respectives et .
    Le code sous trouve dans le mod_traitement, sub écrit_adhérent et presque à la fin mise à jour du tableau annuel des statistiques.

    Merci pour votre aide.
    Cordialement
    Chris
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Bonjour,
    Dans H3 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMMEPROD((l_mont_cot)*(GAUCHE(l_id_adh;3)="JEU")*(l_annee_adh=2012))
    D'autre part, plutôt que de définir des noms faisant une colonne de taille, tu as intérêt à définir des noms définis dynamiques, par exemple :
    l_id_adh
    sera défini par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =DECALER(ADHERENTS!$A$4;;;NBVAL(ADHERENTS!$A:$A)-3)
    ce qui permet d'optimiser les formules. Il faut cependant qu'il n'y ait pas de cellules vides dans la plage de données.
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 31
    Points : 29
    Points
    29
    Par défaut Sommeprod
    Bonjour et merci pour ta réponse.
    Sommeprod fonctionne très bien pour la catégorie.
    Que pourrais-je mettre pour mes loisirs à la place de nb.si.ens ?
    =NB.SI.ENS(l_id_adh;"JEU*";l_loisirs;I$2)
    Encore merci pour ton aide.
    Cordialement
    Chris

  4. #4
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMMEPROD((GAUCHE(l_id_adh;3)="JEU")*(l_loisirs=I$2))
    Ote-moi d'un doute. Je ne suis pas en train de faire tes devoirs ?
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 31
    Points : 29
    Points
    29
    Par défaut Un petit graphique pour finaliser le tout
    Encore merci, ça fonctionne nickel !
    Du coup plus besoin de faire la mise à jour en VBA.
    Pour finaliser le tout, j'aimerai afficher le graphique dans un autre formulaire quand je clique sur le bouton Statistiques.
    Le graphique existe déjà dans la feuille PAR_ADH, il "suffit" donc de l'afficher dans un formulaire, j'ai bien pensé à exporter mon graphique en image, puis insérer l'image dans le formulaire, mais il doit y avoir plus professionnel .
    Sinon en vba avec le code suivant (qui ne fonctionne pas, en fait ça recrée un graphique, ça ne récupère pas l'existant):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Sub aff_graphique()
    'début en col G jusqu'en P, et lignes 3 à 5
    Dim arrData(7 To 16, 3 To 5)
    Dim i As Integer
    For i = 7 To 16
       ' Les valeurs de la colonne G remplissent la première
       ' série du tableau. Si ces valeurs sont des chaînes,
       ' elles deviennent des étiquettes de lignes.
       Dim arrValues(7 To 16, 3 To 5)
        arrData(i, 1) = Worksheets("PAR_ADH").Range("G" & i + 1).Value
     
       ' Les valeurs de la colonne B remplissent ensuite la seconde série.
       arrData(i, 2) = Worksheets(1) _
       .Range("I" & i + 1).Value
    Next i
    MSChart1.SeriesType = VtChSeriesType2dArea
    MSChart1.ChartType = VtChChartType2dBar
    MSChart1.ChartData = arrData
    End Sub

    Sur la ligne en rouge, il me dit que l'indice n'appartient pas à la sélection, je pense que c'est arrData le problème.

    Merci encore pour ton aide.
    Cordialement
    Chris

  6. #6
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    j'ai bien pensé à exporter mon graphique en image, puis insérer l'image dans le formulaire, mais il doit y avoir plus professionnel
    C'est ce qu'il y a de plus pratique. Si tu veux te compliquer la vie, regarde du côté du contrôle ChartSpace :

    http://excel.developpez.com/faq/?pag...phiqueUserForm
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 31
    Points : 29
    Points
    29
    Par défaut Graphique ou pas
    Encore merci.
    Je te dérange une dernière fois enfin je l'espère.
    Je choisis la plus simple : exporter le graphique en image puis l'intégrer dans le contrôle du formulaire. Le graphique sur la feuille s'appelle Graphique1, je n'arrive pas à le renommer.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub UserForm_Initialize()
    'graph_stat et nom_fic en variant
        graph_stat = Sheets("PAR_ADH").ChartObjects(1).Chart
        nom_fic = ActiveWorkbook.Path & "\" & "graphe.gif"
        graph_stat.Export Filename:=nom_fic, FilterName:="GIF"
        f_stat_adh.im_graph.Picture = LoadPicture(nom_fic)
    End Sub
    En changeant chartobjects(1) avec le nom du graphique, même erreur.
    Ça me génère une erreur 438, propriété ou méthode non gérée par cet objet.

    Cordialement
    Chris

  8. #8
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    graph_stat = Sheets("PAR_ADH").ChartObjects(1).Chart
    Il s'agit d'un objet, il faut donc mettre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set graph_stat = Sheets("PAR_ADH").ChartObjects(1).Chart
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] VBA : comment récupérer valeur contenue dans une page web?
    Par pegase33 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 08/01/2012, 00h39
  2. Réponses: 5
    Dernier message: 18/11/2009, 11h25
  3. [DEBUTANT] Comment récupérer le contenu d'une zone texte
    Par josémaria dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 20/02/2007, 01h24
  4. Réponses: 12
    Dernier message: 10/06/2006, 19h07
  5. Réponses: 3
    Dernier message: 22/03/2006, 09h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo