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 :

Récupérer la valeur de plusieurs cellules en fonction d'une heure [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 239
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 239
    Points : 213
    Points
    213
    Par défaut Récupérer la valeur de plusieurs cellules en fonction d'une heure
    Bonjour,
    j'ai une tableau excel de 5 colonnes :
    la colonne A intitulée Étiquettes de lignes : contient des dates format jj/mm/aaaa hh:mm
    Les colonnes B à E contient des chiffres
    la colonnes B intitulée LRD
    la colonne C intitulée RJT
    la colonne D intitulé TG1
    la colonne E intitulée TG2

    Je souhaiterais créer un petit code VBA qui permettrait de recuperer les données de la colonne D TG1 à partir de 03h00 ( c'est à dire jj/mm/aaaa 03:00)

    Dans l'exemple du fichier test joint:le code vba m'afficherait la somme 3485 qui correspondrait à la somme de la cellule D25=3435 et D26=50
    D25 et D26 correspondent bien à la valeur des cellules TG1 aprés 03:00


    merci d'avance.
    Fichiers attachés Fichiers attachés

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Il doit sans doute manquer quelque chose dans vos conditions. Il y a beaucoup plus de lignes qui répondent à votre condition.

    Vous pouvez récupérer les valeurs avec la fonction Heure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(HEURE(A25)>=3;D25;0)
    Cordialement.

  3. #3
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 239
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 239
    Points : 213
    Points
    213
    Par défaut
    Bonjour Erik
    Merci pour ta réponse mais celle_ci ne correspond pas à mes attentes
    En effet , le tableau n'est pas figé, d'une journée à l'autre les données recherchées ne se retrouveront pas à la même ligne.
    Voici ce que j'ai pu faire..Ce n'est qu'un début :

    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
    Sub Position()
        Dim Cell As Range
        Range("A2").Select
        LigDeb = ActiveCell.Row
        LigFin = Range("A1").End(xlDown).Row
        
        
        
        For Each Cell In Range("A" & LigDeb & ":E" & LigFin)
            If Cell.Value = "contient 03:00" Then
                Cell.Select
                Exit For
            End If
        Next Cell
    End Sub
    Mon soucis se trouve à la ligne 11. je ne sais pas comment s'ecrit le code vba : ma cellule contient 03:00

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par facteur Voir le message
    Mon soucis se trouve à la ligne 11. je ne sais pas comment s'ecrit le code vba : ma cellule contient 03:00

    Une proposition :

    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
    Sub Position()
     
    Dim FeuilleCalcul As Worksheet
    Dim AireCalcul As Range
    Dim Cellule As Range
    Dim LigneDeTitre As Long
    Dim LigneFin As Long
    Dim DerniereColonne As Long
     
    'Dim TotalTG1 As Long
     
        'TotalTG1 = 0
     
        Set FeuilleCalcul = Sheets("Feuil1") ' A adapter
        With FeuilleCalcul
            LigneDeTitre = 1
            DerniereColonne = .Cells(LigneDeTitre, .Columns.Count).End(xlToLeft).Column
            LigneFin = .Cells(.Rows.Count, 1).End(xlUp).Row
     
            Set AireCalcul = .Range(.Cells(LigneDeTitre + 1, 1), .Cells(LigneFin, 1))
     
            For Each Cellule In AireCalcul
                If Hour(Cellule) >= 3 Then
                   ' TotalTG1 = TotalTG1 + Cellule.Offset(0, 3)
                    Cellule.Offset(0, DerniereColonne) = Cellule.Offset(0, 3)
                End If
            Next Cellule
            .Cells(1, DerniereColonne + 1).FormulaR1C1 = "=SUM(R[1]C:R[" & AireCalcul.Rows.Count & "]C)"
            Set AireCalcul = Nothing
     
        End With
     
       ' MsgBox TotalTG1
        Set FeuilleCalcul = Nothing
     
    End Sub
    Cordialement.

  5. #5
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 239
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 239
    Points : 213
    Points
    213
    Par défaut
    Bojour Erik,
    Ton code fonctionne a merveille.mais effectivemet, lorsque tu as ecris :
    Il doit sans doute manquer quelque chose dans vos conditions. Il y a beaucoup plus de lignes qui répondent à votre condition.
    je me suis mal exprimer. Je souhaite recuperer les donnees superieur a 03h00 J+1.
    Dans l exemple du tableau ci joint, les donnees a recuperer sont ceux superieur a la date du 24/09/2014 03:00

  6. #6
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 239
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 239
    Points : 213
    Points
    213
    Par défaut
    Bonjour Erik,
    Je commence à avancer dans la réalisation de ce code et ce grace a toi..
    Enfin de continuer dans ce code, comment pourrais je trouver un code qui me donnerait la cellule qui contient la date avec l'heure 03:00.
    Si on reprend le tableau , le code me donnerait la valeur de la cellule A25 c 'est à dire 24/09/2014 03:00

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Essayez ce code :

    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 PositionV2()
     
    Dim FeuilleCalcul As Worksheet
     
    Dim AireCalcul As Range
    Dim CelluleDateEnCours As Range
    Dim CelluleDateJPlusUn As Range
     
    Dim JourJPlusUn As Date
    Dim JourTraite As Date
     
    Dim LigneDeTitre As Long
    Dim LigneFin As Long
    Dim DerniereColonne As Long
     
        JourTraite = 0
        Set FeuilleCalcul = Sheets("Feuil1") ' A adapter
        With FeuilleCalcul
            LigneDeTitre = 1
            DerniereColonne = .Cells(LigneDeTitre, .Columns.Count).End(xlToLeft).Column
            LigneFin = .Cells(.Rows.Count, 1).End(xlUp).Row
     
            Set AireCalcul = .Range(.Cells(LigneDeTitre + 1, 1), .Cells(LigneFin, 1))
     
            For Each CelluleDateEnCours In AireCalcul
     
                JourJPlusUn = CDate(Fix(CelluleDateEnCours)) + 1
                For Each CelluleDateJPlusUn In AireCalcul
                     If Hour(CelluleDateJPlusUn) >= 3 And CDate(Fix(CelluleDateJPlusUn)) = JourJPlusUn And CDate(Fix(CelluleDateEnCours)) > JourTraite Then
                         CelluleDateJPlusUn.Offset(0, DerniereColonne) = CelluleDateJPlusUn.Offset(0, 3)
                     End If
                Next CelluleDateJPlusUn
                JourTraite = CDate(Fix(CelluleDateEnCours))
     
            Next CelluleDateEnCours
     
            .Cells(1, DerniereColonne + 1).FormulaR1C1 = "=SUM(R[1]C:R[" & AireCalcul.Rows.Count & "]C)"
            Set AireCalcul = Nothing
     
        End With
     
        Set FeuilleCalcul = Nothing
     
    End Sub
    Il faut une deuxième boucle pour détecter les cas à J+1.
    Il ne faut pas qu'une autre valeur du même jour incrémente le compteur, d'où la variable JourTraite qui prend la valeur du jour à la fin de la deuxième boucle.

    Cordialement.

  8. #8
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 239
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 239
    Points : 213
    Points
    213
    Par défaut
    Bonjour Erik
    Je te dirais simplement
    Merci encore pour ta patience

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

Discussions similaires

  1. Fonction petite.valeur sur plusieurs cellules
    Par remidu26 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 21/11/2013, 14h57
  2. Récupérer la valeur d'une cellule avec fonction sur une autre feuille
    Par rogerlette dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 14/09/2010, 12h38
  3. Récupérer une valeur de plusieurs cellules
    Par alainpinpin dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/02/2009, 16h29
  4. Réponses: 2
    Dernier message: 05/03/2008, 22h01
  5. Récupérer des valeurs dans plusieurs variables
    Par cortex024 dans le forum ASP.NET
    Réponses: 6
    Dernier message: 26/01/2007, 15h33

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