Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 05/02/2010, 15h12   #1
Invité régulier
 
Inscription : juillet 2008
Messages : 32
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 32
Points : 7
Points : 7
Par défaut calcul d'une colonne après tri

Bonjour à tous,

j'ai un tableau sous forme de base de donnée, avec des dates, des temps etc.
J'ai inscrits mes noms de colonne en ligne A, je souhaiterais qu'il me fasse la somme des valeurs restantes en colonne P.

2eme question: pourquoi lorsque je rentre des dates dans ma macro il me les mets au format americain et prends francais.

Voilà mon code, nécessité à me dire s'il y a moyen de faire plus court

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Sub daterec()
Dim Message, Titre, réponse, dde, dfin
 
Titre = "Date de début"
Message = "Entrez la date du début au format jj/mm/aaaa :"
dialogue: dde = InputBox(Message, Titre)
 
If dde <> Format(dde, "dd/mm/yyyy") Then
réponse = MsgBox("Votre date n'est pas valide! Recommencez ?", 4)
    If réponse = vbYes Then GoTo dialogue Else Exit Sub
End If
 
Titre = "Date de fin"
Message = "Entrez la date dde fin au format jj/mm/aaaa :"
dialogue2: dfin = InputBox(Message, Titre)
 
If dfin <> Format(dfin, "dd/mm/yyyy") Then
réponse = MsgBox("Votre date n'est pas valide! Recommencez ?", 11)
    If réponse = vbYes Then GoTo dialogue2 Else Exit Sub
End If
 
dde = Format(dde, "dd/mm/yyyy")
dfin = Format(dfin, "dd/mm/yyyy")
Range("t20") = dde
Range("t21") = dfin
 
Selection.AutoFilter Field:=3, Criteria1:=">=" & dde, Operator:=xlAnd, Criteria2:="<=" & dfin
 
 
End Sub
spico45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/02/2010, 16h15   #2
Membre habitué
 
Inscription : décembre 2007
Messages : 101
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 101
Points : 103
Points : 103
Bonjour

Une réponse pour les dates
Ecrire
Code :
1
2
Range("t20")  = CDate(dde)
Range("t21")= CDate(dfin)
JP014
jp014 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/02/2010, 16h17   #3
Invité régulier
 
Inscription : juillet 2008
Messages : 32
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 32
Points : 7
Points : 7
Merci pour les dates c'est résolu, reste plus que la somme
spico45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/02/2010, 16h24   #4
Membre Expert
 
Inscription : juillet 2007
Messages : 2 134
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 2 134
Points : 2 154
Points : 2 154
Salut spico45 et le forum
Citation:
J'ai inscrits mes noms de colonne en ligne A, je souhaiterais qu'il me fasse la somme des valeurs restantes en colonne P.
Sans plus de données, difficile te t'aider. Va regarder l'aide de SOUS.TOTAL() et regarde si ça pourrait t'aider.
Citation:
2eme question: pourquoi lorsque je rentre des dates dans ma macro il me les mets au format americain et prends francais.
Parce que si tu ne lui dit pas que c'est une date, il la prend en texte et quand tu la formates, il convertit du texte au format demandé, et daonc à ce moment seulement, il découvre que c'est une date, et pas avant. Et comme il est sous VBA qui est en américain

Tu viens de faire tout une vérification que les entrées sont bien au format jj/mm/AAAA et tu te sents obligé de faire
Code :
1
2
dde = Format(dde, "dd/mm/yyyy")
dfin = Format(dfin, "dd/mm/yyyy")
Tu portes des bretelles avec ta ceinture ?

Quand j'utilise un filtre par dates, suite à quelques déconvenues, je préfère convertir lesdites dates en CLong().
Code :
Selection.AutoFilter Field:=3, Criteria1:=">=" & clong(dde), Operator:=xlAnd, Criteria2:="<=" & clong(dfin)
A+
Gorfael est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/02/2010, 17h00   #5
Invité régulier
 
Inscription : juillet 2008
Messages : 32
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 32
Points : 7
Points : 7
Non je porte pas de bretelles avec ma ceinture.
C'est juste que je démarre réellement à faire des codes et j'ai beaucoup de mal donc dés fois je pense que ce que je fais est redondant.

J'ai mes dates qui sont en colonne C, mes temps en colonne P, lorsque je fais un tri par date, cetaines lignes se masquent parce qu'il ne sont pas dans le critères donnés. Donc je veux faire la somme de toutes les temps restants visbles en colonne P.

j'essaye avec toute les formules que je connais somme.si, sous-totaux, bdsomme et j'ai toujours le même résultat =0. JE suis sue que le problème vient que j'utulise un format de date et que dans la formule je la rentre mal mais je ne trouve aps de soluce ou alors je cherche mal.

voilà un extrait d'une de mes formules essayées :
=SOMME.SI(C2:C193;">="&T20+"<="&T21;P2: P193)
je détails ma formule "C2:C193" correspondent à la plage ou sont situé mes dates ensuite "">="&T20+"<="&T21" correspond à un intervalle entre tel date et tel date et si ok les cellules à additioner sont "P2: P193". Mais elle ne veut pas fonctionner

Bon allez bon week end à tous

Coridalement

Dernière modification par spico45 ; 05/02/2010 à 17h46.
spico45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2010, 10h33   #6
Membre Expert
 
Inscription : juillet 2007
Messages : 2 134
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 2 134
Points : 2 154
Points : 2 154
Salut spico45 et le forum
Ouais, je sais, mon "humour" est souvent sarcastique.
Citation:
=SOMME.SI(C2:C193;">="&T20+"<="&T21;P2: P193)
je détails ma formule "C2:C193" correspondent à la plage ou sont situé mes dates ensuite "">="&T20+"<="&T21" correspond à un intervalle entre tel date et tel date et si ok les cellules à additioner sont "P2: P193". Mais elle ne veut pas fonctionner
Un bon point : tu ne fais pas que donner une formule qui ne fonctionne pas, tu explique ce que tu veux.

Une proposition :
Code :
=sommeprod((T20<=C2:C193)*(C2:C193<=T21)*P2:P193)
fera la somme des cellules de P si la date en C est comprise entre T20 et T21
Testes la formule et si tu veux des explications plus détaillées, demandes.

en VBA, pour fixer des dates, j'utilise soit dateserial() pour être sûr qu'excel comprenne bien, soit Application.Input(date, Type:=1) un exemple
Code :
1
2
3
4
5
Sub test()
Dim x As Date
x = Application.InputBox("Date à entrer", , , , , , , 1)
[A1] = x
End Sub
A+
Gorfael est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2010, 17h54   #7
Invité régulier
 
Inscription : juillet 2008
Messages : 32
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 32
Points : 7
Points : 7
Merci,

bon la c'est le week end donc j'évite de bosser, j'essayerais donc ta formule lundi.

Dans tout les cas merci d'avance.

Bon week end tout le monde
spico45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 12h52.


 
 
 
 
Partenaires

Hébergement Web