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 :

Parcourir une plage selon une condition


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2008
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2008
    Messages : 59
    Par défaut Parcourir une plage selon une condition
    Bonjour,

    Je viens à vous car je bute sur un problème en vba.

    Comment additionner les heures se trouvant dans la plage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("AB" & Debut & ":AB" & Fin)
    Selon une condition à rechercher dans la plage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("I" & Debut & ":I" & Fin)
    La condition se trouve sur UserForm, Labels :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Controls("Lbl_P" & j).Caption
    Pour afficher le résultat dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Controls("Lbl_H" & j).Caption

    Merci de m'avoir lu,
    fasedan

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

    La condition se trouve dans la plage 'Range("I" & Debut & ":I" & Fin)' ou dans le label de ton userform?

    Peux tu joindre un fichier Excel?

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2008
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2008
    Messages : 59
    Par défaut
    Bonjour et merci de m'avoir répondu.

    (Grace au code de SilkyRoad, que je remercie)
    Je récupère sans doublons les données de la colonne ("I:I") vers 30 Labels sur un UserForm : .Controls("Lbl_P" & j).Caption

    A chaque fois que .Controls("Lbl_P" & j).Caption = Range("I" & Debut & ":I" & Fin)
    Additionner les heures en colonne ("AB")

    exemple :

    Col:I -----------Col:AB
    Jr1--------------08:00
    Jr2--------------06:00
    Jr3--------------05:00
    Jr2--------------08:00
    Jr3--------------05:00
    Jr1--------------04:00
    Jr2--------------02:00
    etc..

    UserForm.LabelH1 = 12:00
    UserForm.LabelH2 = 16:00
    UserForm.LableH3 = 10:00
    etc...

    Merci à vous
    fasedan

  4. #4
    Invité
    Invité(e)
    Par défaut
    Tu peux utiliser la fonction native d'Excel 'Somme.Si'.
    Par exemple (à adapter):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    .Controls("Lbl_H" & j).Caption = Application.SumIf(Range("I" & Debut & ":I" & Fin), _
                                     "=" & .Controls("Lbl_P" & j).Caption, Range("AB" & Debut & ":AB" & Fin))

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2008
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2008
    Messages : 59
    Par défaut
    Voici le 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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    Sub AfficherLesPrestations()
      Application.ScreenUpdating = False
      ' Ouvre la feuille ("Prestations"), la rend visible,la selectionne et se positionne sur la cellule ("A1")
      With Sheets("Prestations")
        .Select
        .cells(1, 1).Select
      End With
      Dim annee As Integer, Compteur As Integer, Debut As Integer, Fin As Integer
      Dim Maplage As Range, Cellule As Range
      annee = Frm_ReleveAnnuel.ComboBox1.Value
      ' Recherche la première cellule contenant Annee
      cells.Find(annee, ActiveCell, xlValues, xlPart, xlByRows, xlNext, False, True).Select
      'cells.Find("01/" & mois & "/" & annee, ActiveCell, xlValues, xlPart, xlByRows, xlNext, False, True).Select
     
      ' Recherche sur une plage de 365 jours ou (366 jours si l'année bisextille)
      ' Début de la plage
      Debut = ActiveCell.Row - 1
      ' Fin de la plage
      Fin = Debut + 364 + IIf((annee Mod 4 = 0 And annee Mod 100 <> 0) Or annee Mod 400 = 0, 1, 0)
        Dim Plage As Range
        Dim Tableau(), Resultat() As String
        Dim i As Integer, j As Integer, m As Integer
        Dim Un As Collection
        Dim Doublons As String
     
        Set Un = New Collection
        'La plage de cellules (sur une colonne) à tester
        'Set Plage = Range("A1:A" & Range("A65536").End(xlUp).Row)
        Set Plage = Range("I" & Debut & ":I" & Fin)
     
        Tableau = Plage.Value
     
        On Error Resume Next
        'boucle sur la plage à tester
        For i = 1 To Plage.Count - 1
     
            ReDim Preserve Resultat(2, m + 1)
     
            'Utilise une collection pour rechercher les doublons
            '(i, 0): les collections acceptent les données uniques)
            '(i, 1) : les collections n'acceptent pas les données uniques)
            'Un.Add Tableau(i, 1), CStr(Tableau(i, 1))
            Un.Add Tableau(i, 0), CStr(Tableau(i, 0))
            'S'il y a une erreur (donc présence d'un doublon)
            If Err <> 0 Then
     
                'boucle sur le tableau des doublons pour vérifier s'il a déjà été identifié
                For j = 1 To m + 1
                    'Si oui, on  incrémente le compteur
                    If Resultat(1, j) = Tableau(i, 1) Then
                    'If Resultat(1, j) = Tableau(i, 1) Then
                        Resultat(2, j) = Resultat(2, j) + 1
                        Err.Clear
                        Exit For
                    End If
                Next j
     
                    'Si non, on ajoute le doublon dans le tableau
                    If Err <> 0 Then
                        Resultat(1, m + 1) = Tableau(i, 1)
                        Resultat(2, m + 1) = 1
     
                        m = m + 1
                        Err.Clear
     
                    End If
            End If
        Next i
     
    '----- Affiche la liste et le nombre de doublons --------
        For j = 1 To m
            Doublons = Doublons & Resultat(1, j) & " --> " & _
                        Resultat(2, j) & vbCrLf
        With Frm_ReleveAnnuel
        .Controls("Lbl_P" & j).Caption = Resultat(1, j)
        .Controls("Lbl_J" & j).Caption = Resultat(2, j)
        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ??? Ici : A chaque fois que .Controls("Lbl_P" & j).Caption = Range("I" & Debut & ":I" & Fin)
          additionner la cellule ("AB")
          et ajouter le resultat dans :
       .Controls("Lbl_H" & j).Caption = Resultat(2, j)
     
        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        End With
        Next j
        Set Un = Nothing
     
     
     
      Application.ScreenUpdating = True
    End Sub
    Encore merci
    fasedan

    Ta réponse m'a l'air correcte mais un problème de format?

    Merci à toi.
    fasedan

    J'ai essayé ceci pour le format "hh:mm" mais sans succès :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Format(.Controls("Lbl_H" & j).Caption, "[hh]:mm") = Application.SumIf(Range("I" & Debut & ":I" & Fin), _
                                     "=" & .Controls("Lbl_P" & j).Caption, Range("AB" & Debut & ":AB" & Fin))

    Merci
    fasedan

  6. #6
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    .Controls("Lbl_H" & j).Caption = Format(Application.SumIf(Range("I" & Debut & ":I" & Fin), _
                                     "=" & .Controls("Lbl_P" & j).Caption, Range("AB" & Debut & ":AB" & Fin)), "hh:mm")

  7. #7
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2008
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2008
    Messages : 59
    Par défaut
    Bonjour,

    Désolé pour le retard, mais impossible de me connecter hier en soirée.
    Cela ne fonctionne pas, le calcul des heures n'est pas juste.
    Un petit coup de pouce svp.

    Merci
    fasedan

Discussions similaires

  1. [XL-2013] Alimenter le Ruban selon une plage d'une feuille de classeur.
    Par DenisHen dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 06/03/2015, 08h22
  2. Trier résultats d'une requête selon une plage horaire
    Par Seeverine dans le forum Requêtes
    Réponses: 0
    Dernier message: 04/11/2014, 11h08
  3. [Toutes versions] coller les données d'une plage d'une cellule dans une cellule d'une autre feuille[VBA]
    Par arthson dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/01/2012, 17h37
  4. selectionner une plage selon une address de cellule
    Par charlou74 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/12/2009, 11h31
  5. Réponses: 12
    Dernier message: 12/09/2007, 16h28

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