Excel 2010 VBA - Fonction Like avec des dates
Résolu/Fermé
SpcCwb
Messages postés
65
Date d'inscription
mardi 7 mai 2013
Statut
Membre
Dernière intervention
26 novembre 2020
-
Modifié le 7 nov. 2017 à 14:10
SpcCwb Messages postés 65 Date d'inscription mardi 7 mai 2013 Statut Membre Dernière intervention 26 novembre 2020 - 9 nov. 2017 à 09:42
SpcCwb Messages postés 65 Date d'inscription mardi 7 mai 2013 Statut Membre Dernière intervention 26 novembre 2020 - 9 nov. 2017 à 09:42
A voir également:
- Excel 2010 VBA - Fonction Like avec des dates
- Excel fonction si et - Guide
- Liste déroulante excel - Guide
- Fonction moyenne excel - Guide
- Télécharger microsoft office 2010 avec clé d'activation gratuit - Télécharger - Sécurité
- Aller à la ligne excel - Guide
2 réponses
f894009
Messages postés
17205
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
19 octobre 2024
1 709
7 nov. 2017 à 16:18
7 nov. 2017 à 16:18
Bonjour,
une facon de faire, a vous d'adapter pour plage, feuille et ......
une facon de faire, a vous d'adapter pour plage, feuille et ......
Sub test() With Worksheets("feuil1") Set plage = .Range("A1:A" & .Range("A" & Rows.Count).End(xlUp).Row) For Each cel In plage If Year(cel) = gdate Then n = n + 1 End If Next .Range("C15") = n End With End Sub
f894009
Messages postés
17205
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
19 octobre 2024
1 709
7 nov. 2017 à 16:28
7 nov. 2017 à 16:28
Re,
en cherchant un peu:
en cherchant un peu:
Sub test1() With Worksheets("feuil1") gdate = 2017 Set plage = .Range("A1:A" & .Range("A" & Rows.Count).End(xlUp).Row) dd = ">=01/01/" & gdate: df = "<01/01/" & gdate + 1 .Range("C15") = Application.CountIfs(plage, dd, plage, df) End With End Sub
SpcCwb
Messages postés
65
Date d'inscription
mardi 7 mai 2013
Statut
Membre
Dernière intervention
26 novembre 2020
1
7 nov. 2017 à 17:19
7 nov. 2017 à 17:19
Merci de ton retour, j'ai essayé d'adapté ton code mais à un moment ou un un autre ça ne colle pas avec le reste de ma macro.
Comme je disais, la partie du code qui ne fonctionne pas c'est la partie qui compare la valeur de gdate avec la cellule c. Et je ne sais pas pourquoi, car en codant:
car la cellule c contient une série de caractère comme: 10/10/2017 et gdate: 2017
donc VBA devrait détecter que c contient bien ce qui est contenu en gdate.
Je suis loin d'être un expert en VBA mais après ce que j'ai lu par-ci par-là je me dis qu'il doit bien y avoir un moyen d'écrire ce petit bout de code d'une façon à ce que j'obtienne ce que je désire...non?
Comme je disais, la partie du code qui ne fonctionne pas c'est la partie qui compare la valeur de gdate avec la cellule c. Et je ne sais pas pourquoi, car en codant:
if c.value like gdate.valueje devrais quand même avoir une correspondance. Surtout si mes deux cellules, gdate et c sont toutes les deux en format TEXTE (oui j'ai essayé tous les formats et celui-ci me semble passe partout).
car la cellule c contient une série de caractère comme: 10/10/2017 et gdate: 2017
donc VBA devrait détecter que c contient bien ce qui est contenu en gdate.
Je suis loin d'être un expert en VBA mais après ce que j'ai lu par-ci par-là je me dis qu'il doit bien y avoir un moyen d'écrire ce petit bout de code d'une façon à ce que j'obtienne ce que je désire...non?
Yoda
>
SpcCwb
Messages postés
65
Date d'inscription
mardi 7 mai 2013
Statut
Membre
Dernière intervention
26 novembre 2020
7 nov. 2017 à 18:19
7 nov. 2017 à 18:19
Bonjour
Si c et gdate sont du texte, utilise la fonction Split pour séparer les termes de la date
Si c est une date et gdate un nombre, recupere l'année de la date
;o)
Si c et gdate sont du texte, utilise la fonction Split pour séparer les termes de la date
For Each c In pst8
If c.Offset(0, -10).Value = "" Then Exit For
Dim t() As String
t() = Split(c.Value, "/")
If t(2) = gdate.Value Then
g.Range("C15").Value = Range("C15").Value + 1
End If
Next c
Si c est une date et gdate un nombre, recupere l'année de la date
For Each c In pst8
If c.Offset(0, -10).Value = "" Then Exit For
If Year(c.Value) = gdate.Value Then
g.Range("C15").Value = Range("C15").Value + 1
End If
Next c
;o)
SpcCwb
Messages postés
65
Date d'inscription
mardi 7 mai 2013
Statut
Membre
Dernière intervention
26 novembre 2020
1
>
Yoda
8 nov. 2017 à 09:42
8 nov. 2017 à 09:42
Merci Ô Maître Yoda pour ta sagesse. :o)
J'ai essayé la deuxième solution (par mesure de précaution je préfère laissé les cellules c sous format date), ça a fonctionné, pendant un temps. Je n'arrive pas à trouver pourquoi ça ne fonctionne pas avec tous mes pst (dans le code envoyé c'est le 8e, j'en ai 10 en tout). Du coup je préfère t'envoyer le code "complet" pour voir si cela vient de mes variables.
Je pourrai t'envoyer le fichier si ça peut t'aider.
Merci encore!
J'ai essayé la deuxième solution (par mesure de précaution je préfère laissé les cellules c sous format date), ça a fonctionné, pendant un temps. Je n'arrive pas à trouver pourquoi ça ne fonctionne pas avec tous mes pst (dans le code envoyé c'est le 8e, j'en ai 10 en tout). Du coup je préfère t'envoyer le code "complet" pour voir si cela vient de mes variables.
Sub usf7_poste()
Dim c As Range
Set f = Sheets("Recap.Equipe")
Set g = Sheets("Reporting")
Set gdate = g.Range("B3")
Set pst1 = f.Range("G12:G" & f.[G65000].End(xlUp).Row)
'#Poste1
For Each c In pst1
If c.Offset(0, -3).Value = "" Then Exit For 'si colonne NOM est vide alors on passe au pst suivant = colonne suivante
If c.Value = "X" Then 'si cellule vide alors pas besoin de chercher la date de la cellule suivante
If Year(c.Offset(-1, 0).Value) = gdate.Value Then
g.Range("C8").Value = Range("C8").Value + 1
End If
End If
Next c
Je pourrai t'envoyer le fichier si ça peut t'aider.
Merci encore!
f894009
Messages postés
17205
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
19 octobre 2024
1 709
>
SpcCwb
Messages postés
65
Date d'inscription
mardi 7 mai 2013
Statut
Membre
Dernière intervention
26 novembre 2020
8 nov. 2017 à 10:52
8 nov. 2017 à 10:52
Bonjour a vous deux,
ceci marche tres bien, sans boucle, mais c'est vous qui voyez.....!!:
ceci marche tres bien, sans boucle, mais c'est vous qui voyez.....!!:
Sub usf7_poste() Set f = Sheets("Recap.Equipe") Set g = Sheets("Reporting") Set gdate = g.Range("B3") Set pst1 = f.Range("G12:G" & f.[G65000].End(xlUp).Row) dd = ">=01/01/" & gdate: df = "<01/01/" & gdate + 1 g.Range("C8") = Application.CountIfs(pst1, dd, pst1, df) End Sub
SpcCwb
Messages postés
65
Date d'inscription
mardi 7 mai 2013
Statut
Membre
Dernière intervention
26 novembre 2020
1
>
f894009
Messages postés
17205
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
19 octobre 2024
8 nov. 2017 à 10:58
8 nov. 2017 à 10:58
Bonjour f894009,
Effectivement ton code fonctionne parfaitement. J'avais dû mal l'intégrer à mon code.
Ce qui m'ennuie c'est que sans boucle je ne vois pas comment inclure la condition que le compteur ne prenne en compte la date que si la cellule du dessus contient un "X", comme ici
Effectivement ton code fonctionne parfaitement. J'avais dû mal l'intégrer à mon code.
Ce qui m'ennuie c'est que sans boucle je ne vois pas comment inclure la condition que le compteur ne prenne en compte la date que si la cellule du dessus contient un "X", comme ici
For Each c In pst1
If c.Offset(0, -3).Value = "" Then Exit For 'si colonne NOM est vide alors on passe au pst suivant = colonne suivante
If c.Value = "X" Then 'si cellule vide alors pas besoin de chercher la date de la cellule suivante