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 :

Suppression de lignes si valeur non incluse entre 2 dates


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    autre
    Inscrit en
    Juin 2017
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Juin 2017
    Messages : 15
    Par défaut Suppression de lignes si valeur non incluse entre 2 dates
    Bonjour,

    Étant novice, je viens demander votre aide après plusieurs tentatives infructueuses mon côté...

    J'aimerais que ma macro supprime les lignes où les dates se trouvant dans la colonne A n'ont pas été sélectionnées l'utilisateur.

    Cependant, mon bout de code suivant ne fait rien... Et je ne comprends pas pourquoi pour le moment


    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
    'Demande la date de début
    Dim DateDebut As Date
    DateDebut = InputBox("Veuillez entrer la de début :", "")
     
    'Demande la date de fin
    Dim DateFin As Date
    DateFin = InputBox("Veuillez entrer la date de fin :", "")
     
    'Affiche le choix des dates
    MsgBox "Votre choix: de " & DateDebut & " à " & DateFin & ""
     
     
        'Efface les lignes hors date
       For i = 2 To 1 Step -1
            If Cells(i, 1).Value < DateDebut Or Cells(i, 1) > DateFin Then
                Rows(i).Delete shift:=xlUp
            End If
        Next i

    Voilà le résultat qu j'aimerais en image:

    Nom : PB_DATE_01.png
Affichages : 1304
Taille : 25,0 Ko

    Nom : PB_DATE_02.png
Affichages : 1262
Taille : 18,9 Ko

    Nom : PB_DATE_03.png
Affichages : 1266
Taille : 19,3 Ko

    Nom : PB_DATE_04.png
Affichages : 1223
Taille : 6,3 Ko

  2. #2
    Membre extrêmement actif Avatar de mjpmjp
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    1 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2012
    Messages : 1 133
    Par défaut
    bonjour,
    c'est ta boucle...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    For i = 2 To 1 Step -1
    i est le numéro de ligne
    pour faire simple (pour tester)
    @+JP
    Caractéristiques (WEB) phpMyAdmin 4-74 , PHP 5-631 , Apache 2-427 , MySQL 5-719
    Présentation NAS DS-3615xs + 20Go , DSM 6.1.6-15266 Up1 , 12 * WD 4To WD4000F9YZ (10 raid 6+ )+(2 raid 1+) , LinkSys comutateur-switch lgs528p-eu , Onduleur UPS 720W Power Boxx Lcd (4*UPS + 4*MOD)
    Mes contributions (EXCEL) Form GRAPHIQUE: Gestion des boutons , Liste Onglet dynamique...GESTION de FILM

  3. #3
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Bonjour,

    Le problème vient effectivement de i = 2 to ... (tu voulais probablement écrire i = 20 to ...)
    Le step -1 est très bien, quand on supprime des lignes il est bien plus simple de partir de la dernière.

    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
    Option Explicit
    Sub Test()
    Dim DateDebut As Date
    Dim DateFin As Date
    Dim i As Long
    Dim d As Long
      'Demande la date de début
      DateDebut = InputBox("Veuillez entrer la de début :", "")
      'Demande la date de fin
      DateFin = InputBox("Veuillez entrer la date de fin :", "")
      'Affiche le choix des dates
      MsgBox "Votre choix: de " & DateDebut & " à " & DateFin & ""
      'Dernière ligne
      d = Range("A" & Rows.Count).End(xlUp).Row
      'Efface les lignes hors date
      For i = d To 1 Step -1
        If Cells(i, 1).Value < DateDebut Or Cells(i, 1) > DateFin Then
          Rows(i).Delete shift:=xlUp
        End If
      Next i
    End Sub

  4. #4
    Membre averti
    Homme Profil pro
    autre
    Inscrit en
    Juin 2017
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Juin 2017
    Messages : 15
    Par défaut
    Bonjour à vous et merci de votre retour.

    J'ai tenté plusieurs fois d'adapter mon code avec vos conseils, mais je n'y arrive toujours pas. Est-ce que peut-être le problème est ailleurs dans mon code ? Si quelque chose vous saute aux yeux , faites moi signe svp

    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
    Sub CSE_DEV_2()
    '
    ' CSE_DEV_2 Macro
    '
     
    '
        ChDir "\\S013576V\Logs"
        Workbooks.OpenText Filename:="\\..........\............\aefad_stats.log", Local:=True, Origin:= _
            xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote _
            , ConsecutiveDelimiter:=True, Tab:=False, Semicolon:=False, Comma:= _
            False, Space:=True, Other:=False, FieldInfo:=Array(Array(1, 5), Array(2, 1), _
            Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1)), TrailingMinusNumbers:=True
        ChDir "C:\Users\...............................\aefad_stats_DEV_Delta.csv"
     
        ' Début ne pas afficher alertes
        Application.DisplayAlerts = False
     
     
        ' Début Enregistrer sous
        ActiveWorkbook.SaveAs Filename:= _
            "C:\Users\...............................\aefad_stats_DEV_Delta.csv\aefad_stats_DEV_Delta.csv", _
            FileFormat:=xlCSV, Local:=True, CreateBackup:=False
     
     
     
    'Début de la variable permetant de compter le nombre de ligne non-vide
    Dim MaxColA As Long
    MaxColA = Range("A" & Rows.Count).End(xlUp).Row
     
     
    'Demande la date de début
    Dim DateDebut As Date
    DateDebut = InputBox("Veuillez entrer la de début :", "")
     
    'Demande la date de fin
    Dim DateFin As Date
    DateFin = InputBox("Veuillez entrer la date de fin :", "")
     
    'Affiche le choix des dates
    MsgBox "Votre choix: de " & DateDebut & " à " & DateFin & ""
     
     
        'Efface les lignes hors date
       For i=1 to 20
            If Cells(i, 1).Value < DateDebut Or Cells(i, 1) > DateFin Then
                Rows(i).Delete shift:=xlUp
            End If
        Next i
     
    'Début mise en forme de la date
        Columns("A:A").Select
        Selection.NumberFormat = "yyyy-mm-dd;@"
     
     
    'Début triage par date puis heure, soit Colonne A puis Colonne B
        ActiveWorkbook.Worksheets("aefad_stats_DEV_Delta").Sort.SortFields.Add Key:= _
            Range("A1:A" & MaxColA), SortOn:=xlSortOnValues, Order:=xlAscending, _
            DataOption:=xlSortNormal
        ActiveWorkbook.Worksheets("aefad_stats_DEV_Delta").Sort.SortFields.Add Key:= _
            Range("B1:B" & MaxColA), SortOn:=xlSortOnValues, Order:=xlAscending, _
            DataOption:=xlSortNormal
     
     
    'Debut - Ajoute la valeur Developpement a la colonne G (SOLUTION 1)
    'Dim MaxColA As Long
    'MaxColA = Range("A" & Rows.Count).End(xlUp).Row
    'Range("G1:G" & MaxColA).Value = "Developpement"
     
     
    'Debut - Ajoute la valeur Developpement a la colonne G (SOLUTION 2)
    ActiveSheet.UsedRange.Columns(7).Value = "Developement"
     
     
     
     
     
        ' Début Enregistrer sous
        ActiveWorkbook.SaveAs Filename:= _
            "C:\Users\...............................\aefad_stats_DEV_Delta.csv", _
            FileFormat:=xlCSV, Local:=True, CreateBackup:=False
     
     
               ActiveWindow.Close
     
        ' Début afficher alertes
        Application.DisplayAlerts = True
     
    End Sub

  5. #5
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour et bienvenu,

    Il te faut absolument partir de la dernière ligne pour arriver à la 1ère en utilisant un pas de -1.
    Dans le cas contraire, les enregistrements vont changer de ligne et ton code ne sera pas efficace.

  6. #6
    Membre averti
    Homme Profil pro
    autre
    Inscrit en
    Juin 2017
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Juin 2017
    Messages : 15
    Par défaut
    Merci à vous .
    La macro fonctionne.

    Cependant, elle fait environ 25 minutes pour passer. J'ai plus ou moins 550'000 lignes à contrôler et il me semble que c'est "long"... Est-ce normal ?

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

Discussions similaires

  1. [XL-2010] Comparer valeurs non présentes entre deux colonnes
    Par Ysae68 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 08/08/2014, 19h59
  2. [Flex4] Valeur non incluse dans listes déroulantes
    Par granchef dans le forum Flex
    Réponses: 3
    Dernier message: 06/07/2013, 17h08
  3. Calcul du nombre de jours non ouvrés entre deux dates
    Par allweneed dans le forum Oracle
    Réponses: 6
    Dernier message: 27/04/2010, 17h34
  4. Réponses: 21
    Dernier message: 27/10/2009, 09h18
  5. Valeur calculée difference entre deux dates #NOMBRE!
    Par gracouille dans le forum SharePoint
    Réponses: 3
    Dernier message: 13/06/2008, 11h59

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