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 :

trié des date avec une boucle for each


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2009
    Messages : 43
    Par défaut trié des date avec une boucle for each
    Bonsoir a tous,
    j ai un problème pour extraire des ligne entière d un tableau avec comme critère les date.
    j ai crer un user qui recupere la date de début et la date de fin et je voudrai extraire toute les ligne entre ces deux date malheureusement ca ne se pase pas comme je le voudrai !!!

    j ai mis un petit bout du code si quelle pourai m aider ce serai génial


    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
     
    DateDebut = TextBoxDateDebut.Value
    DateDeFin = TextBoxDateFin.Value
     
             CelSourceDeTri = "b8:b" & WSachat.Range("a65536").End(xlUp).Row
     
                For Each CelSourceTest In WSachat.Range(CelSourceDeTri)
     
     
                   If CelSourceTest.Value >= DateDebut And CelSourceTest.Value <= DateDeFin Then
     
                    WSachat.Range("a" & CelSourceTest.Row & ":k" & CelSourceTest.Row).Copy
                CelDestination.PasteSpecial (xlPasteValuesAndNumberFormats)
     
     
                    End If
     
                Next
    d avance merci
    Alex

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    D'abord, mets les balises pour afficher ton code (signe #)
    ca ne se pase pas comme je le voudrai !!!
    Quoi notamment? si tu peux détailler ce que tu obtiens.

    Si tu essaie de faire cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    DateDebut = CDate(TextBoxDateDebut.Value)
    DateDeFin = CDate(TextBoxDateFin.Value)
    ...
    If CelSourceTest.Value >= DateDebut And CelSourceTest.Value <= DateDeFin Then
    ...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2009
    Messages : 43
    Par défaut
    Bonsoir mercatog,

    j ai essayé de mettre le cdate ca fonctionne mais me donne un résulta incorrect
    j ai mis dans mon tableau une dizaine de ligne avec en colonne "b" les date dont je m appuie pour faire le tri.

    apres avoir coriger comme tu me la envoyé je fait un tri sur

    date de début 01/01/09 date de fin 30/01/09 dans mon tableau il n y a que deux ligne en janvier qu il aurai du extraire et il m en extracté une autre qui n a rien avoir avec les critère demander

  4. #4
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Laquelle?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2009
    Messages : 43
    Par défaut
    Le 09/05/09 et il a bien pris la ligne et copié dans un autre onglet

  6. #6
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Si tu mettais dans le test ceci,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        If DateDiff("d", DateDebut, CelSourceTest.Value) > 0 And DateDiff("d", CelSourceTest.Value, DateDeFin) > 0 Then

  7. #7
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Bonjour

    Tes variables sotn au format dates suite à la preconisation de mercatog

    Mais je pense qu'il faudrait aussi passer la cellule au format date
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If cdate(CelSourceTest.Value) >= DateDebut And cdate(CelSourceTest.Value) <= DateDeFin Then

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2009
    Messages : 43
    Par défaut
    Bonjour jfontaine,

    rien a faire j ai également essayé de déclarer avec cdate mais ca donne toujours le meme résulta ainsi que retirer les date et mettre des nombre mes c est pareil, il n'extrait qu une seul ligne en l occurrence la plus grosse.

    je pensais également que m a cellule de destination écrasais aussi la précédente je pense que c est correct.

    je remet toujours le bout du 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
     
    Sub ExtractionDonneDateADate()
     
     
        Dim DateDebut As Long
        Dim DateDeFin As Long
        Dim NomOnglet As String
        Dim CelSourceDeTri As String
        Dim CelSourceTest As Range
        Dim CelDestination As Range
     
        'Set CelDestination = WSdestination.Range("a65536").End(xlUp).Offset(1, 0)
        Set CelDestination = WSdestination.Range("a1")
     
     
             DateDebut = UserFormExtractDateADate.TextBoxDateDebut.Value
             DateDeFin = UserFormExtractDateADate.TextBoxDateFin.Value
    '            DateDebut = CDate(TextBoxDateDebut.Value)
    '            DateDeFin = CDate(TextBoxDateFin.Value)
     
     
             CelSourceDeTri = "b8:b" & WSachat.Range("a65536").End(xlUp).Row
     
                For Each CelSourceTest In WSachat.Range(CelSourceDeTri)
     
     
                   If CelSourceTest.Value >= DateDebut And CelSourceTest.Value <= DateDeFin Then
    '                If CDate(CelSourceTest.Value) >= DateDebut And CDate(CelSourceTest.Value) <= DateDeFin Then
                    WSachat.Range("a" & CelSourceTest.Row & ":k" & CelSourceTest.Row).Copy
                CelDestination.PasteSpecial (xlPasteValuesAndNumberFormats)
     
     
                    End If
     
                Next
        Unload UserFormExtractDateADate
    voila d avance merci

    Alex

  9. #9
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    fais un test avec cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If cdate(CelSourceTest.Text) >= DateDebut And cdate(CelSourceTest.Text) <= DateDeFin Then

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2009
    Messages : 43
    Par défaut
    toujour incorrect, j ai mis date de début et date de fin 01/08/09 => 31/08/09
    et il ne m a extrait que le 28/08/09 alors que dans le tableau j ai quatre date entre le periode demander 18,19,26 et 28 /08/09

  11. #11
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Le probleme vient plutot que tu ne changes pas l'adresse de ta cellule de destination. (CelDestination)
    Il est donc normal qu'a la fin de la macro elle soit egal a la derniere valeur trouvée

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2009
    Messages : 43
    Par défaut
    j ai essayé deux méthode avec un offset

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set CelDestination = WSdestination.Range("a65536").End(xlUp).Offset(1, 0)
    et sans

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set CelDestination = WSdestination.Range("a1")
    je ne voit pas quelle serrai la bonne !

  13. #13
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    il te faut utiliser la premiere solution mais dans la boucle et non avant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    For Each CelSourceTest In WSachat.Range(CelSourceDeTri)
     
     
    If CelSourceTest.Value >= DateDebut And CelSourceTest.Value <= DateDeFin Then
    ' If CDate(CelSourceTest.Value) >= DateDebut And CDate(CelSourceTest.Value) <= DateDeFin Then
    CelDestination = WSdestination.Range("a65536").End(xlUp).Offset(1, 0)
    WSachat.Range("a" & CelSourceTest.Row & ":k" & CelSourceTest.Row).Copy
    CelDestination.PasteSpecial (xlPasteValuesAndNumberFormats)
     
     
    End If
     
    Next

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2009
    Messages : 43
    Par défaut
    YES

    Un tout grand merci pour ton aide précieuse,

    c était tout simplement ca, mettre la destination dans la boucle !!

    encore merci

    Alex

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

Discussions similaires

  1. legend avec une boucle for et des cell
    Par casabpm dans le forum MATLAB
    Réponses: 3
    Dernier message: 25/02/2012, 14h02
  2. Réponses: 1
    Dernier message: 14/08/2011, 04h24
  3. cibler des clips imbriqués et placés avec une boucle for
    Par pierroM dans le forum ActionScript 1 & ActionScript 2
    Réponses: 7
    Dernier message: 01/02/2009, 22h05
  4. [MySQL] Traitement des variables d'une boucle for
    Par liryc78 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 06/03/2006, 20h53
  5. : remplir des zones de texte avec une boucle For
    Par Haro_GSD dans le forum Access
    Réponses: 3
    Dernier message: 20/09/2005, 21h23

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