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 :

nombre d'occurence dans une liste de dates [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre actif Avatar de babybell
    Homme Profil pro
    Retraité Bancaire
    Inscrit en
    Septembre 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Retraité Bancaire
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2008
    Messages : 495
    Points : 265
    Points
    265
    Par défaut nombre d'occurence dans une liste de dates
    Amis du Forum, bonjour

    Après des recherches vaines, je m'adresse à vous. J'ai un calendrier comme ceci qui reprend les jours ouvrés :
    mardi 02 novembre 2010
    mercredi 03 novembre 2010
    jeudi 04 novembre 2010
    vendredi 05 novembre 2010
    lundi 08 novembre 2010
    mardi 09 novembre 2010
    mercredi 10 novembre 2010
    vendredi 12 novembre 2010
    lundi 15 novembre 2010
    mardi 16 novembre 2010
    mercredi 17 novembre 2010
    jeudi 18 novembre 2010
    vendredi 19 novembre 2010
    lundi 22 novembre 2010
    mardi 23 novembre 2010
    mercredi 24 novembre 2010
    jeudi 25 novembre 2010
    vendredi 26 novembre 2010
    lundi 29 novembre 2010
    mardi 30 novembre 2010
    mercredi 01 décembre 2010
    jeudi 02 décembre 2010
    vendredi 03 décembre 2010
    lundi 06 décembre 2010
    mardi 07 décembre 2010
    mercredi 08 décembre 2010
    jeudi 09 décembre 2010
    vendredi 10 décembre 2010
    lundi 13 décembre 2010
    mardi 14 décembre 2010
    mercredi 15 décembre 2010
    jeudi 16 décembre 2010
    vendredi 17 décembre 2010
    lundi 20 décembre 2010
    mardi 21 décembre 2010
    mercredi 22 décembre 2010
    jeudi 23 décembre 2010
    vendredi 24 décembre 2010
    lundi 27 décembre 2010
    mardi 28 décembre 2010
    mercredi 29 décembre 2010
    jeudi 30 décembre 2010
    vendredi 31 décembre 2010

    J'essaie de savoir combien de fois, par exemple, j'ai le mois de décembre 2010 comprit dans ma liste. J'utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =NB.SI(B466:B808;"déc-10")
    , la seule réponse que j'obtiens est 1.

    Qui pourrait m'indiquer le moyen d'y parvenir ?

    Merci à vous.

  2. #2
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    Salut
    Avec tes données en colonne A

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =NB.SI.ENS(A:A;">=" & DATEVAL("01/12/10");A:A;"<" & DATEVAL("01/01/11"))
    [Edit]
    Je viens de penser que cette formule n'existe qu'a partir d'Excel 2007.
    Si tu es avec une version antérieur, je suppose qu'il te faut décomposer
    NbCellulesNonVide - NbrCelluleAvant01/12/10 - NbrCelluleApres31/12/10
    En utilisant Nb.si bien entendu
    [/Edit]
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  3. #3
    Membre actif Avatar de babybell
    Homme Profil pro
    Retraité Bancaire
    Inscrit en
    Septembre 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Retraité Bancaire
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2008
    Messages : 495
    Points : 265
    Points
    265
    Par défaut
    Merci Qwazerty, mais la seule réponse que j'obtiens est : #NOM?

  4. #4
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    Salut
    Entre temps j'ai édité mon poste, tu dois être avec un version d'excel inf a 2007?

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  5. #5
    Membre actif Avatar de babybell
    Homme Profil pro
    Retraité Bancaire
    Inscrit en
    Septembre 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Retraité Bancaire
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2008
    Messages : 495
    Points : 265
    Points
    265
    Par défaut
    oui, 2003

  6. #6
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    Essai avec ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =NB.SI(A:A;"<>")-NB.SI(A:A;"<"&DATEVAL("01/12/10"))-NB.SI(A:A;">"&DATEVAL("31/12/10"))

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  7. #7
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    =SOMMEPROD((A:A>=DATEVAL("1/12/2010"))*(A:A<=DATEVAL("31/12/2010")))
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  8. #8
    Membre actif Avatar de babybell
    Homme Profil pro
    Retraité Bancaire
    Inscrit en
    Septembre 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Retraité Bancaire
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2008
    Messages : 495
    Points : 265
    Points
    265
    Par défaut
    Cela fonctionne, avec à la fin -1(intervalles oblige). Merci encore à toi et bon week end

  9. #9
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    Salut
    @Mercatog: En effet c'est plus simple, je ne pense jamais a SommeProd, il faudra que je m'y intéresse, merci
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  10. #10
    Membre actif Avatar de babybell
    Homme Profil pro
    Retraité Bancaire
    Inscrit en
    Septembre 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Retraité Bancaire
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2008
    Messages : 495
    Points : 265
    Points
    265
    Par défaut
    Bonsoir

    J'ai essayé le code de mercatog, mais cela me donne : #NOMBRE!. C'est pas grave, la solution de Qwazerty fonctionne bien. Mais, existe-t-il un moyen de remplacer les dates en dur par une variable ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If mois = "04" Then jour_deb = "01/03/" & année: jour_fin = "31/03/" & année
    Sheets("calendrier").Range("b1").FormulaR1C1 = "=COUNTIF(C[-1],""<>"")-COUNTIF(C[-1],""<""&DATEVALUE(""jour_deb""))-COUNTIF(C[-1],"">""&DATEVALUE(""jour_fin""))-1"
    nombre_de_jours = Sheets("calendrier").Range("b1").Value
    mon code ne fonctionne pas.

  11. #11
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    Salut
    Étonnant, le code de Mercatog fonctionne pourtant très bien.
    Au vu de ton code je me pose une question, quel est le but, la valeur de la cellule B1 doit être le nombre de jour du mois donné trouvé dans la liste? ou tu te sert de cette cellule uniquement pour obtenir le nombre de jours dans ton code excel?

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  12. #12
    Membre actif Avatar de babybell
    Homme Profil pro
    Retraité Bancaire
    Inscrit en
    Septembre 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Retraité Bancaire
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2008
    Messages : 495
    Points : 265
    Points
    265
    Par défaut
    Effectivement, il me faut le nombre de jours d'un mois mis en variable pour diviser un nombre total de valeurs par le nombre de jours de ce mois. C'est pourquoi, dans ton code, je ne mets pas directement les coordonnées du mois, mais une variable représentant le 1er et une le dernier du mois.

  13. #13
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    Tu as plusieurs solutions
    En voila une

    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
    20
    21
    Option Explicit
    Sub Macro1()
     
    Range("B2") = Nb_InterDates(Range("A:A"), "01/12/2010", "31/12/2010")
    End Sub
     
    Function Nb_InterDates(Matrice As Range, StrDateDebut As String, StrDateFin As String) As Byte
    Dim Tab_Mat
    Dim TheDate
     
    'Init
    Tab_Mat = Range(Matrice.Cells(1, 1), Matrice.Cells(Matrice.Rows.Count, 1).End(xlUp)).Value
     
    For Each TheDate In Tab_Mat
        If CDate(StrDateDebut) <= CDate(TheDate) And CDate(TheDate) <= CDate(StrDateFin) Then
            Nb_InterDates = Nb_InterDates + 1
        End If
    Next
     
     
    End Function
    Tu pourrais aussi utiliser WorksheetFunction et utiliser directement SumProd, je vais regarder
    [Edit]Non je n'arrive pas a intégré des variables, ça ne fonctionne pas, Evaluate non plus je n'y arrive pas.[/Edit]

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  14. #14
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Si on cherche le nombre de jours dans un vecteur Vect qui appartiennent à un mois donnée LeMois et une année donnée LAnnee
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Function Nbj(ByVal Vect As Range, ByVal LeMois As Byte, ByVal LAnnee As Integer) As Byte
    Dim Dd As Long, Df As Long
     
    Dd = CLng(DateSerial(LAnnee, LeMois, 1))
    Df = CLng(DateAdd("m", 1, Dd))
    Nbj = Evaluate("SUMPRODUCT((" & Vect.Address & ">=" & Dd & ")*(" & Vect.Address & "<" & Df & "))")
    End Function
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  15. #15
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    ... j'suis naze, je rajouté des dateval...
    Ha non c'est pas a cause de ça, c'est qu'il ne faut pas mettre de = dans Evaluate()!

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  16. #16
    Membre actif Avatar de babybell
    Homme Profil pro
    Retraité Bancaire
    Inscrit en
    Septembre 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Retraité Bancaire
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2008
    Messages : 495
    Points : 265
    Points
    265
    Par défaut
    Merci mercatog, mais cela devient trop Hard pou moi.
    J'ai fait le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Function Nbj(ByVal Vect As Range, ByVal LeMois As Byte, ByVal LAnnee As Integer) As Byte
    Dim Dd As Long, Df As Long
     
    Dd = CLng(DateSerial(LAnnee, LeMois, 1))
    Df = CLng(DateAdd("m", 1, Dd))
    Nbj = Evaluate("SUMPRODUCT((" & Vect.Address & ">=" & Dd & ")*(" & Vect.Address & "<" & Df & "))")
    End Function
    Sub Macro1()
    lAnnée = "09"
    LeMois = "03"
    Dd = "01/03/" & année: Df = "31/03/" & année
    Range("B2") = Nbj(Range("A:A"), "Dd", "Df")
    End Sub
    pour qu'en B2 apparaisse le nombre de jours ouvrés de ma liste, mais cela se plante. J'ai du zappé ne manip.

  17. #17
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub Macro1()
    Dim annee As Integer
    Dim mois As Byte
    annee = 2009
    mois = 3
    Range("B2").Value = Nbj(Range("A:A"), mois, annee)
    'ou bien directement: Range("B2").Value = Nbj(Range("A:A"), 3,2009)
    End Sub
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  18. #18
    Membre actif Avatar de babybell
    Homme Profil pro
    Retraité Bancaire
    Inscrit en
    Septembre 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Retraité Bancaire
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2008
    Messages : 495
    Points : 265
    Points
    265
    Par défaut
    Que ce soit l'un ou l'autre, j'obtiens " Erreur d'exécution '13' : Incompatibilité de type" .
    Y a t-il une référence supplémentaire à rentrer ?

  19. #19
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Je ne vais pas deviner ton fichier
    avant de poster je fais des tests sur mon fichier
    au moins reporte ton code en entier ou éventuellement un extrait de ton fichier

    EDIT
    ci joint code complet avec lequel je testais
    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
    Function Nbj(ByVal Vect As Range, ByVal LeMois As Byte, ByVal LAnnee As Integer) As Byte
    Dim Dd As Long, Df As Long, frml As String
     
    Dd = CLng(DateSerial(LAnnee, LeMois, 1))
    Df = CLng(DateAdd("m", 1, Dd))
    Nbj = Evaluate("SUMPRODUCT((" & Vect.Address & ">=" & Dd & ")*(" & Vect.Address & "<" & Df & "))")
    End Function
     
    Sub Macro1()
    Dim LastLig As Long
     
    With Sheets("Feuil3") ' à adapter
       LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row
       .Range("B2").Value = Nbj(.Range("A2:A" & LastLig), 2, 2009)
    End With
    End Sub
    Regarde bien le type de chaque paramètre de la fonction (vect: range, mois: byte, annee: integer)
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  20. #20
    Membre actif Avatar de babybell
    Homme Profil pro
    Retraité Bancaire
    Inscrit en
    Septembre 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Retraité Bancaire
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2008
    Messages : 495
    Points : 265
    Points
    265
    Par défaut
    je mets l'onglet concerné et le code avec.
    Fichiers attachés Fichiers attachés

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [XL-2003] calculer le nombre de mois dans une liste de date
    Par zaza45 dans le forum Excel
    Réponses: 2
    Dernier message: 23/06/2010, 08h49
  2. Nombre d'occurence dans une liste
    Par Axiome dans le forum Windows Forms
    Réponses: 2
    Dernier message: 29/10/2008, 13h15
  3. Nombre d'occurences dans une chaîne de caractères
    Par Olivier14 dans le forum Langage
    Réponses: 4
    Dernier message: 20/03/2006, 19h11
  4. [AS] Nombre d'occurences dans une string
    Par frol dans le forum Flash
    Réponses: 3
    Dernier message: 26/12/2005, 15h13
  5. recherche du nombre d'occurences dans une table
    Par berry dans le forum Requêtes
    Réponses: 3
    Dernier message: 09/01/2004, 20h03

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