[VBA-excel]Extraire une période de dates [Résolu]

Signaler
Messages postés
6
Date d'inscription
mardi 15 mai 2007
Statut
Membre
Dernière intervention
15 mai 2007
-
Messages postés
6
Date d'inscription
mardi 15 mai 2007
Statut
Membre
Dernière intervention
15 mai 2007
-
Bonjour tout le monde, j'essaye de réaliser une macro mai bien sur tout ne marche pas lol
jvous explique...


je dispose d'un fichier excel contenant plus de 8000 entreprises avec entre autre une colonne contenant les dates d'inscription. Ma macro doit me permettre parmi les 8000 individus de choisir ceux inscrits entre par exemple 01/01/1991 et le 31/03/1991 et me supprime les autres.


 Pour cela g créer un userform où je saisie ma date de début de la période (date1) et ma date de fin (date2).


Ma macro contient des érreurs, car si je tape du 01/01/1991 au 31/03/1991 elle va fonctionner
Par contre si je saisie du 01/01/1991 au 01/06/1991 elle va me garder seulement les dates du premier jour de chaque moi ( 01/01/1991, 01/02/1991.....01/05/1991) ou encore si je saisie du 01/01/1991 au 31/03/1992 je vai obtenir les dates de 1991 jusquau 31/03/1991 seulement et celle du 01/01/1992 au 31/03/1992 et toute celle entre sont supprimés.


C'est assez dur de l'expliquer, mais pour d'autres renseignements n'hésitez pas
merci d'avance de votre aide car je bloque dur la...




voici la macro en question :


Private Sub ok2_Click()
Dim val As String
Dim pl As Integer
Dim pc As Byte
Dim dn1 As Date
Dim dn2 As Date


pl = 2
pc = 6


dn1 = date1 'textbox1
dn2 = date2 'textbox2


Sheets("Resultat").Activate
For pl = 2 To nb_ligne()
dn = Cells(pl, pc)
vna = Mid(dn, 7, 4)
vnb = Mid(dn, 4, 2)
vnc = Mid(dn, 1, 2)
vn1a = Mid(dn1, 7, 4)
vn1b = Mid(dn1, 4, 2)
vn1c = Mid(dn1, 1, 2)
vn2a = Mid(dn2, 7, 4)
vn2b = Mid(dn2, 4, 2)
vn2c = Mid(dn2, 1, 2)
If dn <> "" Then
    If vna >= vn1a And vna <= vn2a Then
        If vnb >= vn1b And vnb <= vn2b Then
            If vnc >= vn1c And vnc <= vn2c Then
            Else
                Rows(pl).Delete
                pl = pl - 1
            End If
        Else
            Rows(pl).Delete
            pl = pl - 1
        End If
    Else
        Rows(pl).Delete
        pl = pl - 1
    End If
Else
Exit Sub
End If
Me.Hide
date1.Value = ""
date2.Value = ""
Next pl
End Sub

11 réponses

Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
56
Salut,
Bah si la cellule est vide c'est normal que Cdate n'appraississe pas. Mais ca t'aurais pu trouver tout seul tout de même
Private Sub CommandButton1_Click()
Dim Inscription As Date
Dim DateDeb As Date
Dim DateFin As Date
Dim LaLigne As Long
   DateDeb = CDate("16/01/2007")
   DateFin = CDate("30/04/2007")
   'je pense qu'il faut partir du bas car si tu
   'supprime des ligne les numero de ligne se réorganise
   'et tu risque de sauter des lignes
   For LaLigne = NbLigne To 2 Step -1
       'on =rajoute cette condition
       If Not IsEmpty(Range("F" & LaLigne)) Then
           Inscription = CDate(Range("F" & LaLigne).Text)
           If (Inscription < DateDeb) Or (Inscription > DateFin) Then Call Rows(LaLigne).Delete(xlUp)
       End If
   Next
End Sub , ----
[code.aspx?ID=41455 By Renfield]

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
56
Salut,
Pourquoi tu décortique la date si elle est directement contenu dans la cellule.
Est ce que.
Dans quelle colonne se trouve la date d'inscription.

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
1079
Date d'inscription
jeudi 14 novembre 2002
Statut
Membre
Dernière intervention
1 janvier 2012

Ohh, il est bien commenté ton code. ;o) Bon allons-y :
Déjà, je ne comprends pas pourquoi tu décomposes en années mois jour et que tu ne fais pas :

If dn < dn1 Or  dn >dn2 Then
        Rows(pl).Delete
        pl = pl - 1
End If

A la place de tout décomposer

++
 Moustachu
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
56
Salut,
Tiens regardes ceci.

Private Sub CommandButton1_Click()
Dim Inscription As Date
Dim DateDeb As Date
Dim DateFin As Date
Dim LaLigne As Long
   DateDeb = CDate("16/01/2007")
   DateFin = CDate("30/04/2007")
   'je pense qu'il faut partir du bas car si tu
   'supprime des ligne les numero de ligne se réorganise
   'et tu risque de sauter des lignes
   For LaLigne = NbLigne To 2 Step -1
       Inscription = CDate(Range("F" & LaLigne).Text)
       If (Inscription < DateDeb) Or (Inscription > DateFin) Then Call Rows(LaLigne).Delete(xlUp)
   
   Next
End Sub , ----
[code.aspx?ID=41455 By Renfield]

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
6
Date d'inscription
mardi 15 mai 2007
Statut
Membre
Dernière intervention
15 mai 2007

bonjour moustachu
enfait jle décompose parce que sinon il va me le comparer comme un nombre du style 01011991 enfin jpense. Enfait jve qu'il me compare l'année si c la même le mois et si c le même le jour. Mais enfait jsai pa tro comment faire autrement...
Messages postés
6
Date d'inscription
mardi 15 mai 2007
Statut
Membre
Dernière intervention
15 mai 2007

salut julien,
Merci, jvai essayer ce code. Au fait jsui nouveau dc je sai pa tro a quoi sert de cliquer sur réponse accepter...
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
56
Salut,
Non mais t'inquiètes c'est juste ma signature.
En revanche Lorsque tu estimeras que ton problème est résolu, c'est là où il faudra penser à appuyer sur réponse acceptée sur le ou les posts qui t'auront aidé.

NOTE: tu es nouveau alors prends les bonnes habitudes dès maintenant et évite le langage SMS

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
6
Date d'inscription
mardi 15 mai 2007
Statut
Membre
Dernière intervention
15 mai 2007

re julien,
le programme me met incompatibilité de type à la ligne :
    Inscription = CDate(Range("F" & LaLigne).Text)

Peut-être est-ce du au fait que ma colonne F est de format personnalisé (jj/mm/aaaa)?

matt^^
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
56
Re,
Que vaut Range("F" & LaLigne).Text au moment ou ca te donne cette erreur?

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
6
Date d'inscription
mardi 15 mai 2007
Statut
Membre
Dernière intervention
15 mai 2007

Re,
Incription ="00:00:00"
Range("F" & LaLigne).Text =""

matt^^
Messages postés
6
Date d'inscription
mardi 15 mai 2007
Statut
Membre
Dernière intervention
15 mai 2007

Merci julien,
lol désolé je suis un peu tête en l'air parfois, la procédure fonctionne bien


Encore merci de ton aide

A++
matt^^