XL 2010 calcul entre 2 date en vba

racalbuto

XLDnaute Nouveau
bonsoir a tous.
j ai un classeur ou je calcul le nombre de fois ou il y a la lettre p dans chaque cellule et cela en fonction de 2 date sa fonctionne tres bien toutefois j'aimerai faire exactement la meme chose mais en vba a partir d un clic sur un bouton. c est possible? personnellement j ai tenté mais je n y arrive pas. pouvez vous m'aider???? merci d avance.je dépose le fichier j aimerai vraiment transformer cette formule en vba ..... merciiii
 

Pièces jointes

  • testdate.xlsx
    10 KB · Affichages: 9
Solution
Bonsoir,
Le même avec les commentaires qui manquaient un peu. :)
VB:
Function NbP(CellD, CellF, DateDébut As Date, DateFin As Date)
    ' On refera le calcul à chaque recalcul de la feuille
    Application.Volatile
    ' On extrait ligne et colonne de la première cellule du tableau
    LigD = CellD.Row: ColD = CellD.Column
    ' On extrait ligne et colonne de la dernière cellule du tableau
    LigF = CellF.Row: ColF = CellF.Column
    ' Nbp sera le nombre de "p" trouvés. On l'initialise à 0.
    NbP = 0
    ' Pour toutes les lignes du tableau
    For i = LigD + 1 To LigF
        ' On compte les "p" si la date en ligne LigD est compris entre les dates DateDébut et DateFin
        NbP = NbP + Application.CountIfs(Range(Cells(i, ColD)...

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir,
En PJ un essai avec une fonction :
VB:
Function NbP(PlageDate As Range, PlageP As Range, DateDébut As Date, DateFin As Date)
    NbP = Application.CountIfs(PlageP, "p", PlageDate, ">=" & CLng(DateDébut), PlageDate, "<=" & CLng(DateFin))
End Function
Qui peut évidemment être utilisée en macro comme dans l'exemple.
 

Pièces jointes

  • testdate.xlsm
    19.2 KB · Affichages: 4

sylvanu

XLDnaute Barbatruc
Supporter XLD
Effectivement c'était moins simple.
En PJ un ex avec :
VB:
Function NbP(CellD, CellF, DateDébut As Date, DateFin As Date)
    Application.Volatile
    LigD = CellD.Row: ColD = CellD.Column
    LigF = CellF.Row: ColF = CellF.Column
    NbP = 0
    For i = LigD + 1 To LigF
        NbP = NbP + Application.CountIfs(Range(Cells(i, ColD), Cells(i, ColF)), "p", _
        Range(Cells(LigD, ColD), Cells(LigD, ColF)), ">=" & CLng(DateDébut), _
        Range(Cells(LigD, ColD), Cells(LigD, ColF)), "<=" & CLng(DateFin))
    Next i
End Function
Par contre la syntaxe a changé. Voir dans le fichier.
( La ligne 25 ne sert qu'à la vérif )

Je pense qu'il y a plus simple mais j'ai buté sur la syntaxe du Sommeprod.
 

Pièces jointes

  • testdate4.xlsm
    19.6 KB · Affichages: 7

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir,
Le même avec les commentaires qui manquaient un peu. :)
VB:
Function NbP(CellD, CellF, DateDébut As Date, DateFin As Date)
    ' On refera le calcul à chaque recalcul de la feuille
    Application.Volatile
    ' On extrait ligne et colonne de la première cellule du tableau
    LigD = CellD.Row: ColD = CellD.Column
    ' On extrait ligne et colonne de la dernière cellule du tableau
    LigF = CellF.Row: ColF = CellF.Column
    ' Nbp sera le nombre de "p" trouvés. On l'initialise à 0.
    NbP = 0
    ' Pour toutes les lignes du tableau
    For i = LigD + 1 To LigF
        ' On compte les "p" si la date en ligne LigD est compris entre les dates DateDébut et DateFin
        NbP = NbP + Application.CountIfs(Range(Cells(i, ColD), Cells(i, ColF)), "p", _
        Range(Cells(LigD, ColD), Cells(LigD, ColF)), ">=" & CLng(DateDébut), _
        Range(Cells(LigD, ColD), Cells(LigD, ColF)), "<=" & CLng(DateFin))
    Next i
End Function
 

racalbuto

XLDnaute Nouveau
Bonjour at tous
j aimerai votre aide svp merci...
j ai une sub qui me place les jours et dates du mois de janvier et j aimerai une boucle qui me trouve tous les lundi et remonte une ligne avec offset -1 pour me placer le numéro de la semaine puis qu' elle passe à la sheets février et ainsi de suite. merci d'avance .....
 

Pièces jointes

  • TESTSEM.xlsm
    29.8 KB · Affichages: 3

Discussions similaires

Réponses
1
Affichages
321

Statistiques des forums

Discussions
311 720
Messages
2 081 899
Membres
101 834
dernier inscrit
Jeremy06510