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 :

AutoFilter avec sélection dans autre colonne [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Août 2006
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2006
    Messages : 105
    Par défaut AutoFilter avec sélection dans autre colonne
    Bonjour à tous,
    Alors je débute en VBA : j'ai un tableau de facture avec leurs dates et leurs montants (donc 2 colonnes) et j'aimerais pouvoir trier par exemple par mois, pour ensuite additionner les montants sur le mois sélectionné.

    J'ai un souci sur la sélection des montants correspondants au mois sélectionné;

    Voici comment je filtre la période souhaité (code trouvé sur le forum) :
    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
    Sub SelectPeriode()
        Dim rng As Range
        Dim rngUsed As Range
        Dim strCrit1 As String
        Dim strCrit2 As String
        Dim Date1 As Variant
        Dim Date2 As Variant
     
        ' date de début de période; 
        Date1 = DateValue("2009/01/01")
        ' date de fin de période;
        Date2 = DateValue("2009/01/31")
     
        ' Comme la méthode AutoFilter de l'objet Range ne travaille qu'avec le format US des dates
        '   il faut traduire nos dates et les mettre en texte pour les critères...
        strCrit1 = ">=" & CStr(Month(Date1)) & "/" & CStr(Day(Date1)) & "/" & CStr(Year(Date1))
        strCrit2 = "<=" & CStr(Month(Date2)) & "/" & CStr(Day(Date2)) & "/" & CStr(Year(Date2))
     
        With Worksheets("Feuil2")
            Set rngUsed = .UsedRange
            .AutoFilterMode = False
     
            ' Cette ligne assume que les dates sont dans la nième colonne de la plage (Field:=n)
            rngUsed.AutoFilter Field:=2, Criteria1:=strCrit1, Operator:=xlAnd, Criteria2:=strCrit2
    Ensuite comment puis-je sélectionner dans la colonne 1 les montants concernés puisque rngUsed est la range de la colonne 2 -> la colonne des dates...
    Le but étant ensuite de faire le montant total (somme) des factures.

    Merci d'avance

  2. #2
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    bonjour,

    'Ensuite comment puis-je sélectionner dans la colonne 1 les montants concernés puisque rngUsed est la range de la colonne 2
    Deux exemples soit avec cells soit avec offset:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim rngUsed As Range
    Set rngUsed = Range("B1")
    MsgBox Cells(rngUsed.Row, rngUsed.Column - 1) 
    MsgBox rngUsed.Offset(0, -1)
    End Sub

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Août 2006
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2006
    Messages : 105
    Par défaut
    Merci pour la réponse rapide,
    Le souci est que mon rngUsed désigne une colonne avec plusieurs lignes :
    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
    With Worksheets("Pieces")
            Set rngUsed = .UsedRange
            .AutoFilterMode = False
     
            ' Cette ligne assume que les dates sont dans la nièmr colonne de la plage (Field:=n)
            rngUsed.AutoFilter Field:=25, Criteria1:=strCrit1, Operator:=xlAnd, Criteria2:=strCrit2
     
     
            ' rng ne contiendra désormais que les cellules visibles dans la colonne des dates
            Set rng = rngUsed.SpecialCells(xlCellTypeVisible)
     
     
            ' Plus besoin du filtre...
            .AutoFilterMode = False
        End With
     
       rngfinal = rng.Offset(0, -1) 'Problème ici !'
     
     
        'Somme les valeurs sélectionnées
        total = WorksheetFunction.Sum(rngfinal)
        Worksheets("FirstTab").Range("H4").Value = "FUCK"
        Worksheets("FirstTab").Range("H4").Value = total
     
    End Sub

    Merci d'avance

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut MasterChief78 et le forum
    Alors je débute en VBA : j'ai un tableau de facture avec leurs dates et leurs montants (donc 2 colonnes) et j'aimerais pouvoir trier par exemple par mois, pour ensuite additionner les montants sur le mois sélectionné.
    une simple formule suffirait, mais si tu veux le faire par macro, donne au moins toute la macro.
    Ensuite comment puis-je sélectionner dans la colonne 1 les montants concernés puisque rngUsed est la range de la colonne 2 -> la colonne des dates...
    Le but étant ensuite de faire le montant total (somme) des factures.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub test()
    Dim X As Double
    Dim Date1 As Date
    Dim Date2 As Date
    Date1 = #1/1/2009#
    Date2 = #10/1/2009#
    AutoFilterMode = False
    [A1:B1].CurrentRegion.AutoFilter Field:=2, Criteria1:=">=" & Date1, Operator:=xlAnd _
            , Criteria2:="<=" & Date2
    X = WorksheetFunction.Sum(Range("A1:B1").CurrentRegion.Columns(1).SpecialCells(xlCellTypeVisible))
    End Sub
    fera le total des cellules de la colonne A dont la date en B sera comprise entre le 1/1/2009 <= date <= 10/1/2009
    A+

  5. #5
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Août 2006
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2006
    Messages : 105
    Par défaut
    Alors merci pour votre réponse,
    Le souci que j'ai maintenant c'est que ma somme donne zéro, alors que je constate sur Excel que le tri effectué est correct;
    Voici ma macro :

    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
    Sub CalculCAMensuel()
     
    Dim X As Double
    Dim Date1 As Date
    Dim Date2 As Date
    Dim strDate1 As String
    Dim strDat2 As String
     
    ' date de début de période;
    Date1 = DateValue("2009/01/01")
    ' date de fin de période;
    Date2 = DateValue("2009/01/31")
     
     
    ' Comme la méthode AutoFilter de l'objet Range ne travaille qu'avec le format US des dates
    '   il faut traduire nos dates et les mettre en texte pour les critères...
    strDate1 = CStr(Month(Date1)) & "/" & CStr(Day(Date1)) & "/" & CStr(Year(Date1))
    strDate2 = CStr(Month(Date2)) & "/" & CStr(Day(Date2)) & "/" & CStr(Year(Date2))
     
    AutoFilterMode = False
     
    Sheets("Pieces").Select
     
    [U2:V2].CurrentRegion.AutoFilter Field:=21, Criteria1:=">=" & strDate1, Operator:=xlAnd _
            , Criteria2:="<=" & strDate2
     
    X = WorksheetFunction.Sum(Range("U2:V2").CurrentRegion.Columns(1).SpecialCells(xlCellTypeVisible))
    MsgBox X
    Worksheets("FirstTab").Range("H4").Value = X
     
    End Sub
    Merci pour votre aide

  6. #6
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    Que te donne le code suivant ?

    msgbox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("U2:V2").CurrentRegion.Columns(1).SpecialCells(xlCellTypeVisible).count

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

Discussions similaires

  1. Insertions avec références dans autre table
    Par Mister Nono dans le forum Requêtes
    Réponses: 2
    Dernier message: 09/11/2009, 17h08
  2. Comptage de valeurs contenues dans autre colonne
    Par Ludwig_von_88 dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 10/06/2009, 20h33
  3. Réponses: 1
    Dernier message: 02/02/2008, 18h44
  4. compte valeur avec critère sur autre colonne
    Par NATOU2 dans le forum Excel
    Réponses: 3
    Dernier message: 28/01/2008, 11h02
  5. [VBA-E] Minimum d'une colonne avec condition sur autre colonne
    Par Currahee dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/05/2007, 17h01

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