melinette35
Messages postés68Date d'inscriptionmercredi 23 mai 2012StatutMembreDernière intervention27 juillet 2012
-
23 mai 2012 à 18:48
melinette35
Messages postés68Date d'inscriptionmercredi 23 mai 2012StatutMembreDernière intervention27 juillet 2012
-
2 juin 2012 à 16:14
Bonjour à tous,
Je suis pour le moment débutante en VBA sous Excel 2003 (dans le cadre de mon stage).
Voilà mon problème:
Je dois faire une macro mettant en avant les écarts de caisses de chaque agence: par mois et par quinzaine. Je précise que selon le mois, le nombre de ligne varie.
En ce qui concerne le mois: j'ai fais un subtotal qui me permet d'avoir le total par mois. Cela est dans la colonne Ecart mensuel.
Maintenant, je souhaite faire dans les deux colonnes qui suivent: "quinzaine 1" et "quinzaine 2". Le seul moyen que j'ai selon moi d'y parvenir est de prendre la date comme critère.
Ce que j'ai eu comme idée c'est d'extraire la date que j'ai au format 00/00/0000 pour en prendre que les 2 premiers caractères dans une colonne qui sera ensuite écrasée à la fin de la macro.
Ainsi on peut suite à cela faire une condition du style: Si valeur jour >15 alors tu fais la sommes des écarts correspondants à ces dates dans quinzaine 2
Sinon alors tu fais la somme des autres écarts dans quinzaine 1
Voilà mon code. Je n'arrive pas à mettre en place la condition sur la valeur de la date, j'ai pensé à un while mais sans grande conviction.
Sub ExtractionDate()
Dim A As Integer ‘ premiere ligne
Dim Z As Integer ‘ derniere ligne
Dim B As String
Z = Range("B3").End(xlDown).Row
'une date au format 00/00/0000 contient 10 caractères
For A = 4 To Z
B = 0 'On initialise la valeur B
If Len(Cells(A, 4)) = 10 Then 'Test pour savoir si la cellule contient bien 10 caractères
B = Cells(A, 4).Value 'La variable B prend la valeur de la cellule de la ligne A et de la 26è colonne
B = Left(B, Len(B) - 8) 'On enlève les 8 derniers caractères
Range(Cells(4, 4), Cells(Z, 4)).Select
Selection.Copy
Range(Cells(4, 26), Cells(Z, 26)).Select
ActiveSheet.Paste 'penser à mettre le lien vers la bonne feuille
'C'EST CA QUE JE N'ARRIVE PAS A FAIRE
'de la variable dans la colonne 26
Else
End If
Next A
'Condition sur la valeur : soit inférieur à 16 soit supérieur à 15
While B < 16
Wend
Columns("Z:Z").Delete Shift:=xlToLeft 'on supprime la colonne où il y avait les valeurs de B
End Sub
J'espère avoir été claire, car je ne sais pas si vous avez besoin du fichier, ni comment faire pour mettre un fichier en PJ sur la discussion.
MarcPL
Messages postés172Date d'inscriptionjeudi 8 décembre 2011StatutMembreDernière intervention21 juillet 20132 24 mai 2012 à 13:41
Bonjour !
Afin de détecter si une cellule est bien une date et récupérer le jour, vaut mieux ceci :
If IsDate(Cells(A, 4)) Then
B = Day(Cells(A, 4))
Range(Cells(4, 4), Cells(Z, 4)).Copy
ActiveSheet.Paste Range(Cells(4, 26), Cells(Z, 26))
A noter au passage qu'il n'est pas nécessaire (plutôt déconseillé pour raison de rapidité)
d'utiliser un Select pour faire un Copy ou un Paste ...
Maintenant ne faudrait-il pas tester le jour - la variable B donc - avant de faire la copie dans une colonne ou une autre ?
___________________________________________________________________________________________________________________
Comme la vitesse de la lumière est supérieure à celle du son, certains ont l'air brillant avant d'avoir l'air con !
rvblog
Messages postés792Date d'inscriptionvendredi 4 mars 2005StatutMembreDernière intervention12 juin 20127 24 mai 2012 à 13:36
Bonjour melinette35,
je pense que ton approche n'est pas mauvaise, mais pourquoi ne pas simplement écrire des formules qui te permettent tout autant d'aller à ton objectif? rvblogn
Je veux ton bien....et je l'aurais....mieux vaut tard...que trop tard!
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018211 24 mai 2012 à 14:48
Bonjour,
Je rappelle qu'existe la fonction Day !
regarde ce que fait ceci, déjà :
toto = "22/03/2009"
If IsDate(toto) Then
If Day(toto) <= 15 Then MsgBox "1ère quinzaine" Else MsgBox "2ème quinzaine"
End If
Pour le reste (et bien que peu clair) : quid de l'utilisation simple de la fonction SOMMESI (utilisable sous la forme SUMIF depuuis VBA à l'aide de WorksheetFunction) ? Non ?
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ