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 :

Opération sur une partie de colonne en fonction de la date stipulée dans une autre colonne


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2012
    Messages : 30
    Par défaut Opération sur une partie de colonne en fonction de la date stipulée dans une autre colonne
    Bonjour à tous !!

    Je viens vers vous dans l'espoir que vous puissiez m'eclairer :

    je souhaiterais effectuer diverses opérations (somme d'une plage de la colonne, moyenne sur cette même plage, ...) sur plusieurs colonnes que j'ai importées via variable tableau, mais cela en fonction de la date que j'aurais renseigné.

    Pour l'instant, après prise de renseignements grâce au tuto de SilkyRoad sur les fonctions Excel, je pensais opérer en suivant la démarche suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Sub Choix_de_la_date()
     
    'Effectuer la somme des valeurs de la plage C1:C1000,
    'quand la date (plage B1:B1000) est comprise entre le 01.01.04 et le 31.12.04
    réponse = Application.WorksheetFunction.SOMME((C1:C1000)*(B1:B1000>=DATEVAL("01/01/04"))*(B1:B1000<=DATEVAL("31/12/04")))}
     
    End Sub

    Cependant, mes calculs ne s'effectueraient que sur un jour sur un total de 15jour...

    Je mets en pièces jointes un exemple du tye de fichier ce sera peut-être plus compréhensible !!


    merci d'avance de votre aide
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Par défaut
    Je ne comprends pas l'histoire des 1 jour parmi 15. Mais de toute façon, ton code ne pourra pas s'écrire comme ça. La fonction est bonne si tu la rentres dans une feuille de calcul, mais pas en VBA. Quand on utilises WorksheetFunction, il faut utiliser la syntaxe anglaise des fonctions et il faut travailler avec des objets Range.

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2012
    Messages : 30
    Par défaut
    En fait je vais travailler à partir d'enregistrements de données.
    Ces derniers pourront contenir les données de 15jours de mesures, mais sachant déjà utiliser toute la plage de données pour effectuer mes calculs, je voudrais, si cela est possible, me cantonner à un ou deux jours, afin de rendre mes interprétations plus précises.

    Comme je travaille avec beaucoup de données ( 6 colonnes et jusqu'à 30 000lignes) je cherche en même temps à être le plus rapide possible... et dans cette optique je ne sais pas si la fonction Range serait bien raisonnable...

    Mais si tu as une idée avec cette fonction je suis preneur, je pourrais toujours tenter de l'optimiser par la suite !!

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 107
    Par défaut
    et en passant par un filtre ?

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    Sub Init_LstCpt()
     
        Dim DateDebut As Date
        Dim DateFin As Date
        Dim WS1 As Worksheet
        Dim WS2 As Worksheet
        Dim k As Integer
        Dim Total As Double
     
     
        Set WS1 = ThisWorkbook.Worksheets("Feuil1")
        Set WS2 = ThisWorkbook.Worksheets("Feuil2")
        DateDebut = "03/10/2011"
        DateFin = "04/10/2011"
     
     
        With WS1
     
            .Cells(1, 1).AutoFilter Field:=2, Criteria1:="<=" & CDec(DateFin), _
                Operator:=xlAnd, Criteria2:=">=" & CDec(DateDebut)
            On Error GoTo 1
            .Cells(1, 1).CurrentRegion.Copy Destination:=WS2.Cells(1, 1)
            On Error GoTo 0
        End With
     
     
     
        With WS2
     
            k = .Cells(.Rows.Count, 1).End(xlUp).Row
            If k < 2 Then
                MsgBox "Aucun resultat"
                GoTo 1
            End If
            Total = WorksheetFunction.Sum(.Range(.Cells(2, 3), .Cells(k, 3)))
            MsgBox Total
        End With
     
    1
        WS1.Cells(1, 1).AutoFilter
        WS2.Cells.ClearContents
     
     
    End Sub

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2012
    Messages : 30
    Par défaut
    Je ne connaissais pas cette notion de filtre, je vais essayé de comprendre et de le mettre en application sur mes essais.


    Merci de me lancer sur une voie !!!

  6. #6
    Membre Expert Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Par défaut
    Sinon, tu peux faire ça (en fait WorksheetFunction ne fonctionne pas avec des formules matricielles) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Sub Choix_de_la_date()
     
    réponse = Application.Evaluate("SUMPRODUCT(Feuil1!$C$2:$C$1000*(Feuil1!$B$2:$B$1000>=DATEVALUE(""2004-01-01""))*(Feuil1!$B$2:$B$1000<=DATEVALUE(""2005-01-01"")))")
     
    End Sub

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 12
    Dernier message: 20/03/2015, 10h27
  2. Réponses: 5
    Dernier message: 12/03/2015, 16h32
  3. Réponses: 6
    Dernier message: 25/11/2014, 10h22
  4. Réponses: 9
    Dernier message: 08/10/2012, 23h43
  5. Réponses: 4
    Dernier message: 30/10/2006, 00h53

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