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 :

.find et date : chercher dans une colonne les dates correspondant à un mois donné


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Chef d’entreprise
    Inscrit en
    Mai 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Chef d’entreprise

    Informations forums :
    Inscription : Mai 2014
    Messages : 18
    Par défaut .find et date : chercher dans une colonne les dates correspondant à un mois donné
    Bonjour à tous !

    J'ai tenté de trouver un titre assez explicite : ce que je cherche à faire me parait simple, pourtant après 4 heures de recherches, je suis à bout et je n'ai pas trouvé de solution satisfaisante...

    Voilà donc ce que je cherche à faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim MoisChoisi as Date ' La valeur ici est du type "Juillet 2015"
     
    With Worksheets("import_mvt").Columns(4) ' Le contenu de la colonne 4 est constitué de dates (stockées sous forme de n° de série) et affichées avec un format personnalisé "mmmm yyyy" ; soit "Juillet 2015"
    Set Rg = .Find(What:=MoisChoisi, LookIn:=xlValues, LookAt:=xlPart)
    Le problème bien entendu est que Find ne me retourne aucun résultat.

    J'ai essayé déjà un million de choses (au minimum ) donc : help

    Merci d'avance

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Teste ce qui suit, c'est le format qui pose problème :
    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
     
    Sub Test()
     
        Dim Rg As Range
        Dim MoisChoisi As Long ' La valeur ici est du type "Juillet 2015"
     
        MoisChoisi = DateValue("01/08/2015") 'la convertion en Long est faite implicitement
     
        With Worksheets("import_mvt").Range("D:D")
     
            .NumberFormat = "General" 'mets le format de la colonne en général pour la recherche sur des longs
     
            Set Rg = .Find(MoisChoisi, , xlValues, xlPart) 'trouve le premier jour du mois
     
            .NumberFormat = "mmmm yyyy" 'remets comme précédemment
     
        End With
     
        If Not Rg Is Nothing Then
     
            MsgBox Rg.Address(0, 0)
     
        End If
     
    End Sub
    Hervé.

  3. #3
    Membre averti
    Homme Profil pro
    Chef d’entreprise
    Inscrit en
    Mai 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Chef d’entreprise

    Informations forums :
    Inscription : Mai 2014
    Messages : 18
    Par défaut Merci, mais...
    Bonjour Hervé,

    Et merci pour cette suggestion, qui m'a permis d'avancer d'un cran !
    En effet, cette fois, je trouve bien les premiers jours du mois : )

    Mais mon besoin c'est de chercher tous les jours du mois.
    Il faudrait en quelque sorte que Find accepte une plage...

    En fait, je boucle et alimente un tableau, voici l'intégralité de ma procédure :

    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
     
    Type TB_Type_mouvements
        Article As String
        Qte As Single
        Date_mvt As String
    End Type
    _____________________________________________
    Sub Nettoyage_selon_periode_choisie()
     
    Dim TB_mouvements() As TB_Type_mouvements
    Dim ligne As Long
    Dim VP_Periode_choisie As Long
    Dim Rg As Range
     
    ligne = 0
    ReDim TB_mouvements(0 To ligne)
    VP_Periode_choisie = DateValue("août 2015")
     
        With Worksheets("import_mvt").Columns(4)
        .NumberFormat = "General"
            Set Rg = .Find(VP_Periode_choisie, , xlValues, xlPart)
            Do Until Rg Is Nothing
                L = Rg.Row
                TB_mouvements(ligne).Article = Cells(L, 2)
                TB_mouvements(ligne).Qte = Cells(L, 3)
                TB_mouvements(ligne).Date_mvt = Cells(L, 4)
                ligne = ligne + 1
                ReDim Preserve TB_mouvements(0 To ligne)
                Set Rg = .FindNext(.Cells(L))
            Loop
        .NumberFormat = "mmmm yyyy"
        End With
    End Sub
    Qu'en penses-tu ?

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Il te suffit alors de calculer le nombre de jours dans le mois et ensuite boucler à partir du premier jour du mois jusqu'à la fin du mois :
    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
     
    Type TB_Type_mouvements
     
        Article As String
        Qte As Single
        Date_mvt As String
     
    End Type
     
    Sub Nettoyage_selon_periode_choisie()
     
        Dim TB_mouvements() As TB_Type_mouvements
        Dim Plage As Range
        Dim Rg As Range
        Dim VP_Periode_choisie As Long
        Dim NBJours As Integer
        Dim I As Integer
     
        VP_Periode_choisie = DateValue("août 2015")
     
        'calcule le nombre de jours dans le mois
        NBJours = DateSerial(Year(VP_Periode_choisie), Month(VP_Periode_choisie) + 1, 1) - VP_Periode_choisie
     
        'défini la plage en colonne D à partir de D1
        With Worksheets("import_mvt")
     
            Set Plage = .Range(.Cells(1, 4), .Cells(.Rows.Count, 4).End(xlUp))
     
            Plage.NumberFormat = "General"
     
            'recherche le premier jour du mois
            Set Rg = Plage.Find(VP_Periode_choisie, , xlValues, xlPart)
     
            'si trouvé...
            If Not Rg Is Nothing Then
     
                'redimensionne par rapport au nombre de jours dans le mois
                ReDim TB_mouvements(0 To NBJours)
     
                'et stocke les valeurs dans le tableau
                For I = 0 To NBJours - 1
     
                    TB_mouvements(I).Article = .Cells(Rg.Row + I, 2).Value
                    TB_mouvements(I).Qte = .Cells(Rg.Row + I, 3)
                    TB_mouvements(I).Date_mvt = Format(.Cells(Rg.Row + I, 4), "dd mmmm yyyy")
     
                Next I
     
            End If
     
            Plage.NumberFormat = "mmmm yyyy"
     
        End With
     
     
        'pour le test...
         For I = 0 To UBound(TB_mouvements) - 1
     
            Debug.Print "Article : " & TB_mouvements(I).Article & " Date : " & TB_mouvements(I).Date_mvt & " Quantité : " & TB_mouvements(I).Qte
     
         Next I
     
    End Sub
    Hervé.

  5. #5
    Membre averti
    Homme Profil pro
    Chef d’entreprise
    Inscrit en
    Mai 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Chef d’entreprise

    Informations forums :
    Inscription : Mai 2014
    Messages : 18
    Par défaut Ce n'est pas encore ça :(
    Hervé,

    J'ai terminé de tester ce code, il y a un hic encore : je ne traite que 31 entrées.

    Je n'ai pas pas tout détaillé auparavant, mais je pense que ça devient indispensable de reformuler :=)

    Je parcours un tableau a 4 colonnes, avec la date en colonne 4.
    J'ai environ 2000 lignes, dont environ 200 concernent un même mois.
    Je souhaite trouver via find (plus rapide) chaque ligne correspondant au mois cherché (août dans notre exemple).

    Sinon autre solution :

    Supprimer avec find chaque ligne pour laquelle la colonne date n'est pas égale à l'expression cherchée "aout 2015".
    Je sais faire l'inverse, mais pas ça

    Je ne trouve pas ce qui serait le plus simple...

  6. #6
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut



    Bonjour,

    utiliser un filtre serait bien plus simple … (le B-A-BA d'Excel plus rentable qu'une usine utilisant une boucle !)

    S'entraîner manuellement puis en activant l'Enregistreur de macros, une base de code est livrée sur un plateau !


    _____________________________________________________________________________________________________
    Je suis Charlie, Bardo, Sousse

  7. #7
    Membre averti
    Homme Profil pro
    Chef d’entreprise
    Inscrit en
    Mai 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Chef d’entreprise

    Informations forums :
    Inscription : Mai 2014
    Messages : 18
    Par défaut
    Merci Marc pour cette suggestion, mais depuis une vue filtrée, je ne supprime pas les valeurs qui ne m'intéressent pas ?
    Comment exploiter ensuite ? Je ne vais quand même pas faire un copier-coller

    En attendant de mieux, j'ai fait :
    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
     
    Sub Nettoyage_selon_periode_choisie()
     
    Dim VL_Li As Long, VL_Periode_ligne As String
     
    ' EN PARTANT DU BAS : On va chercher chaque ligne où la valeur de la date est différente de la valeur sélectionnée, puis supprimer la ligne correspondante
        For VL_Li = VP_DerLi_mvt To 2 Step -1
            VL_Periode_ligne = Format(Worksheets("import_mvt").Cells(VL_Li, 4), "mmmm yyyy")
                If VL_Periode_ligne <> VP_Periode_choisie Then
                    Rows(VL_Li).EntireRow.Delete
                End If
        Next VL_Li
     
    VP_DerLi_mvt = Split(Worksheets("import_mvt").UsedRange.Address, "$")(4) ' Met à jour la dernière ligne
     
    End Sub
    Mais pas sûr qu'avec beaucoup de lignes ce soit très performant ...

  8. #8
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut



    Comme une boucle est inutile pour supprimer les lignes affichées d'une plage filtrée !

    Tout au plus si la plage comporte une ligne de titres à conserver, décaler la plage à supprimer via un Offset.
    Le tout ne devant pas nécessiter plus de cinq lignes de code … Tout dépend du but visé …

  9. #9
    Membre averti
    Homme Profil pro
    Chef d’entreprise
    Inscrit en
    Mai 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Chef d’entreprise

    Informations forums :
    Inscription : Mai 2014
    Messages : 18
    Par défaut
    Même si nous commençons à être hors sujet par rapport au titre : tu peux boucler sur des lignes "visibles" ?
    Mais n'est-ce pas moins performant qu'une commande Find, pour laquelle tout le monde est unanime : elle est au moins 20 fois plus rapide qu'une boucle ?

  10. #10
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Je comprends un peu mieux, enfin je pense !
    Comme la fonction "DateValue" retourne une date égale au premier jour du mois si le jour n'est pas précisé, la fonction "Find" ne retournera que les cellules ayant comme valeur la valeur "Long" identique à 42217 (nombre de jours écoulés depuis le 01/01/1900 pour le 01/08/2015) donc, il te faut boucler sur tous les jours du mois en effectuant une recherche pour chaque jour.
    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
     
    Type TB_Type_mouvements
     
        Article As String
        Qte As Single
        Date_mvt As String
     
    End Type
     
    Sub Nettoyage_selon_periode_choisie()
     
        Dim TB_mouvements() As TB_Type_mouvements
        Dim Plage As Range
        Dim Rg As Range
        Dim VP_Periode_choisie As Long
        Dim NBJours As Integer
        Dim Lgn As Long
        Dim Adr As String
        Dim I As Integer
     
        VP_Periode_choisie = DateValue("août 2015")
     
        NBJours = DateSerial(Year(VP_Periode_choisie), Month(VP_Periode_choisie) + 1, 1) - VP_Periode_choisie
     
        'défini la plage en colonne D à partir de D1
        With Worksheets("import_mvt")
     
            Set Plage = .Range(.Cells(1, 4), .Cells(.Rows.Count, 4).End(xlUp))
     
        End With
     
        Plage.NumberFormat = "General"
     
        For I = 0 To NBJours - 1
     
            Set Rg = Plage.Find(VP_Periode_choisie + I, , xlValues, xlPart)
     
            'si trouvé...
            If Not Rg Is Nothing Then
     
                Adr = Rg.Address
     
                Do
     
                    'redimensionne par rapport au nombre de jours dans le mois
                    ReDim Preserve TB_mouvements(0 To Lgn)
     
                    TB_mouvements(Lgn).Article = Rg.Offset(, -2).Value
                    TB_mouvements(Lgn).Qte = Rg.Offset(, -1).Value
                    TB_mouvements(Lgn).Date_mvt = Format(Rg.Value, "dd mmmm yyyy")
     
                    Lgn = Lgn + 1
     
                    Set Rg = Plage.FindNext(Rg)
     
                Loop While Adr <> Rg.Address
     
            End If
     
        Next I
     
        Plage.NumberFormat = "mmmm yyyy"
     
       'pour le test sur la feuille "Feuil2"...
        For I = 0 To UBound(TB_mouvements) - 1
     
            Worksheets("feuil2").Cells(I + 1, 1) = "Article : " & TB_mouvements(I).Article & " Date : " & TB_mouvements(I).Date_mvt & " Quantité : " & TB_mouvements(I).Qte & " --> i : " & I
     
        Next I
     
    End Sub
    Maintenant, question de rapidité il faut voir car avec la proc ci-dessus il faut boucler plusieurs fois (sur tous les jours avec la boucle For Next et sur toutes les occurrences avec la boucle Do-Loop). Tu peux tester le code ci-dessous car il ne fait qu'une passe en faisant une comparaison sur le mois :
    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
     
    Sub Nettoyage_selon_periode_choisie_Avec_Boucle()
     
        Dim TB_mouvements() As TB_Type_mouvements
        Dim Plage As Range
        Dim Cel As Range
        Dim VP_Periode_choisie As Long
        Dim Lgn As Long
        Dim I As Integer
     
        VP_Periode_choisie = DateValue("août 2015")
     
        'défini la plage en colonne D à partir de D1
        With Worksheets("import_mvt")
     
            Set Plage = .Range(.Cells(1, 4), .Cells(.Rows.Count, 4).End(xlUp))
     
        End With
     
        For Each Cel In Plage
     
            If Month(Cel.Value) = Month(VP_Periode_choisie) Then
     
                ReDim Preserve TB_mouvements(0 To Lgn)
     
                TB_mouvements(Lgn).Article = Cel.Offset(, -2).Value
                TB_mouvements(Lgn).Qte = Cel.Offset(, -1).Value
                TB_mouvements(Lgn).Date_mvt = Format(Cel.Value, "dd mmmm yyyy")
     
                Lgn = Lgn + 1
     
            End If
     
        Next Cel
     
       'pour le test sur la feuille "Feuil2"...
        For I = 0 To UBound(TB_mouvements) - 1
     
            Worksheets("feuil2").Cells(I + 1, 1) = "Article : " & TB_mouvements(I).Article & " Date : " & TB_mouvements(I).Date_mvt & " Quantité : " & TB_mouvements(I).Qte & " --> i : " & I
     
        Next I
     
    End Sub
    Les dates pose toujours problème car nous les interprétons d'une certaine façon (visuellement avec un formatage) et Excel d'une autre (Long pour les dates et Single pour les heures)

    Hervé.

  11. #11
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Tout dépend du but visé …

    « - Hé Manu, tu descends ?!
    « - Et pourquoi faire ?‼ »

    Ici c'est pareil … Chercher, certes, mais pourquoi faire ?‼

    Conformément aux règles du forum, sans présentation digne de ce nom - claire & exhaustive - difficile alors de bien répondre !
    Dans le post initial il est question de chercher des dates. Puis, plus loin il est question de supprimer des lignes.
    Dans ce cas un filtre est bien plus efficient pour rechercher des lignes à supprimer, sans boucle …
    Encore une fois, les lignes cachées d'une plage ne sont pas affectées par la copie ou la suppression …

    _____________________________________________________________________________________________________
    Il n'y a pas que les aigles qui atteignent les sommets, les escargots aussi mais ils en bavent !

  12. #12
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    J'ai testé le filtrage qui fonctionne bien dans Excel mais pas avec VBA, les lignes sont toutes masquées (Excel 2003) c'est pour cette raison que je suis resté sur les boucles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Selection.AutoFilter Field:=3, Criteria1:="août 2015"
    Marc, si tu peux poster un exemple que je puisse tester, ça serait sympa !

    Hervé.

  13. #13
    Membre averti
    Homme Profil pro
    Chef d’entreprise
    Inscrit en
    Mai 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Chef d’entreprise

    Informations forums :
    Inscription : Mai 2014
    Messages : 18
    Par défaut
    Je suis d'accord Marc, c'est pour cela que j'ai tenté une question simple au départ :
    "Est-il possible de trouver via Find une "portion" de date "formatée" dans une plage ?"
    Il semblerait bien que la réponse soit "Non".

    Et je remercie beaucoup Hervé au passage, qui a proposé une méthode de contournement qui fonctionne

    [Edit] Avouez que la question était intéressante ;-)

  14. #14
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Mais la réponse est oui ‼ En respectant la logique d'Excel évidemment …

    Pour cela faut-il encore que la colonne des dates soit dans un format uniforme, peut importe lequel …
    Ensuite il faut utiliser la méthode Find sur l'affichage de la colonne (en texte donc) et cela passe sans souci,
    voir les dizaines de discussions traitant ce sujet !
    Donc la question n'est pas vraiment nouvelle, n'intéresse que ceux ignorant le fonctionnement d'Excel …

    Astuce de DocMarti : si la colonne de dates ne contient pas de formule de calculs,
    utiliser cette méthode non pas sur les valeurs mais sur les formules en format Long ou Date
    Là aussi il y a déjà des exemples dans les discussions de ce forum !

    Mais utiliser cette méthode pour supprimer des lignes est moins efficace qu'un filtre nécessitant pas plus de 5 lignes de code ‼

    _____________________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

    _____________________________________________________________________________________________________
    C’est ce que nous pensons déjà connaître qui nous empêche souvent d’apprendre. (Claude Bernard)

  15. #15
    Membre averti
    Homme Profil pro
    Chef d’entreprise
    Inscrit en
    Mai 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Chef d’entreprise

    Informations forums :
    Inscription : Mai 2014
    Messages : 18
    Par défaut
    Et bien c'est bien là tout mon problème :
    Comment Find peut "lire" la valeur formatée de ma colonne ?
    Moi il me retourne systématiquement le numéro de série...
    Si tu as la syntaxe je suis preneur car j'ai essayé tout ce que j'ai trouvé sur plusieurs topics mais rien à faire

    Et l'histoire de supprimer les lignes, c'était une suggestion de contournement : à la base je veux stocker les résultats dans un tableau.

  16. #16
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut




    C'est méthode fonctionne si la simple logique est respectée …

    Tableau ? En clair ? Sans décodeur, car sans tenant & aboutissant …

  17. #17
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Citation Envoyé par Theze Voir le message
    J'ai testé le filtrage qui fonctionne bien dans Excel mais pas avec VBA, les lignes sont toutes masquées (Excel 2003) c'est pour cette raison que je suis resté sur les boucles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Selection.AutoFilter Field:=3, Criteria1:="août 2015"
    Marc, si tu peux poster un exemple que je puisse tester, ça serait sympa !

    Hervé.
    Il faut entrer 2 critères : Criteria1 et Criteria2

    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 Autofilter_Mois()
    AnneeDebut = 2015: MoisDebut = 6
     
    DateDebut = DateSerial(AnneeDebut, MoisDebut, 1)
    DateFin = DateSerial(AnneeDebut, MoisDebut + 1, 0)
     
    CritereDebut = ">=" & Format(DateDebut, "mm/dd/yyyy") 'Date au format américain obligatoire dans Criteria1 et Criteria2
    CritereFin = "<=" & Format(DateFin, "mm/dd/yyyy")
     
    Feuil1.Range("C1").AutoFilter
     
    Feuil1.Range("C1").AutoFilter Field:=3, Criteria1:=CritereDebut, _
    Operator:=xlAnd, Criteria2:=CritereFin
     
    End Sub

  18. #18
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Il faut entrer 2 critères : Criteria1 et Criteria2
    Ok et merci Docmarti, je me suis acharné à tester avec un seul critère

    Hervé.

  19. #19
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut HEU...
    bonjour

    sinon avec la methode find il vu que tu a des mois en lettre "aout" etc...

    j'aurais utiliser le find en string

    set cellule=plage.find("aout 2015" lookat:=xlpart)
    un do loop sur find next(cellule) et voila on rempli une variable tableau ,point barre


    en plus un sujet identique a été traité il ya moins d'un mois
    utilisation de filtre avec une date deb et une date fin exactement comme docmarti te la démontré

    ca se passe ICI

    avant de poster un minimum de recherche t'aurait fait perdre moins de temps
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  20. #20
    Membre averti
    Homme Profil pro
    Chef d’entreprise
    Inscrit en
    Mai 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Chef d’entreprise

    Informations forums :
    Inscription : Mai 2014
    Messages : 18
    Par défaut
    Merci Patrick pour cette suggestion, malheureusement, elle ne fonctionne pas car .Find cherche dans une colonne possédant des dates au format numéro de série. Il ne peut donc pas trouver "du texte" dans "des chiffres" !

    Et je rappelle que je tiens à utiliser .Find et pas un filtre, et ce pour des raisons de performance (beaucoup de tests ont été menés par des "acharnés" qui ont mesuré les temps d’exécution et c'est sans appel )
    C'est pour ça que je n'ai pas cherché dans cette voie ; alors que j'ai fouillé les topics pendant 2 heures à la recherche d'un problème similaire au mien => rien !

Discussions similaires

  1. Traiter une par une les dates contenue dans une cellule
    Par wyzer dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/04/2012, 09h20
  2. [XL-2003] Afficher dans un TexBox la date contenue dans une ListBox
    Par MichaSarah dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 24/05/2010, 02h18
  3. Réponses: 10
    Dernier message: 12/06/2007, 10h32
  4. Compter les Dates différentes dans une requête Access
    Par maxireus dans le forum Modélisation
    Réponses: 2
    Dernier message: 11/05/2007, 00h02
  5. [date] Recherche dans une plage de dates
    Par astro84 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 28/06/2005, 17h13

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