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 :

Macro : suppression ligne sur base de la date


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2014
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Macro : suppression ligne sur base de la date
    Bonjour,

    Je suis nouveau dans la programmation, je suis inscrit dans une petite formation pour adulte.
    Et je bloque.
    J'ai créé une macro qui va extraire des données d'un autre fichiers et qui les copies dans un autre (avec des filtres, mise en page).
    Maintenant j'aimerais rajouter dans cette macro qu'elle me supprime toutes les lignes qui sont différentes de la date du jour.
    J'arrive à le faire pour des lignes avec blanc (enfin je crois)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Application.ScreenUpdating = False
    For i = Range("A65535").End(xlUp).Row To 1 Step -1
    If Cells(i, 7).Value = "" Then
    Rows(i).Delete
    End If
    Next i
    Application.ScreenUpdating = True
    Mais avec la date, je ne trouve pas.
    C'est la première question

    Un grand merci de votre aide.
    JE vous joins aussi le fichier

  2. #2
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonjour DrDim, bonjour le forum,

    Peut-ête comme ça avec un filtre :

    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
    Sub Macro1()
    Dim O As Object 'déclare la variable O (Onglet)
    Dim DL As Integer 'déclare la variable DL (Dernière Ligne))
    Dim PL As Range 'déclare la variable PL (PLage)
    Dim PLV As Range 'déclare la variable PLV (PLage Visible)
     
    Set O = Sheets("Import données brutes") 'définit l'onglet O
    'définit la dernière ligne éditée DL de la colonne 1 (=A) moins la dernière qui contient "Début"...
    DL = O.Cells(Application.Rows.Count, 1).End(xlUp).Row - 1
    Set PL = Range("A1:A" & DL) 'définit la plage PL
    'filtre la colonne A de l'onglet O avec "date différente de la date du jour" comme critère
    O.Range("A1").AutoFilter Field:=1, Criteria1:="<>" & Year(Date) & "/ " & Month(Date) & "/" & Day(Date)
    Set PLV = PL.SpecialCells(xlCellTypeVisible) 'définit la plage PLV (cellule visibles (non filtrées) de la plage PL)
    PLV.EntireRow.Delete 'efface les ligne entières de la plage PLV
    Range("A1").AutoFilter 'supprime le filtre automatique
    If CDate(Range("A1").Value) <> Date Then Rows(1).Delete 'si la date en A1 n'est pas égale à la date du jour, efface la ligne 1
    End Sub

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2014
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci

    C'est presque cela, en fait dans la macro, il ne me laisse que les dates du jour, alors que je voudrais l'inverse.
    Fichiers attachés Fichiers attachés

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 940
    Points : 28 938
    Points
    28 938
    Billets dans le blog
    53
    Par défaut Exporter et supprimer les lignes répondant à des critères
    Bonjour,
    C'est presque cela, en fait dans la macro, il ne me laisse que les dates du jour, alors que je voudrais l'inverse.
    A moins que nous ne parlions pas la même langue, il me semble que c'est exactement ce que tu as demandé
    Maintenant j'aimerais rajouter dans cette macro qu'elle me supprime toutes les lignes qui sont différentes de la date du jour.
    Voici une procédure basée sur la méthode AdvancedFilter qui exporte les données vers la feuille nommée Export et qui ensuite détruit les mêmes lignes de la feuille nommée db
    Les dates à contrôler dans cet exemple se trouve en colonne I, et la formule contenant les critères va se placer 2 colonnes à droite de la plage des données qui doit avoir la première ligne avec les étiquettes de colonnes
    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
    Sub CopyAndDeleteByAdvancedFilter()
     ' Déclaration des variables
     Const myFormula As String = "=I2<>TODAY()" ' Critère calculé
     Dim rngSource As Range, rngTarget As Range, rngCriteria As Range, TypeAction As Integer
     ' Attribution des références aux variables objets
     With ThisWorkbook
      Set rngSource = .Worksheets("db").Range("A1").CurrentRegion
      Set rngTarget = .Worksheets("Export").Range("A1")
     End With
     With rngSource: Set rngCriteria = .Offset(columnoffset:=.Column + .Columns.Count).Resize(2, 1): End With
     ' Placement de la formule dans la zone des critères
     With rngCriteria:  .Cells(1) = "formula": .Cells(2) = myFormula: End With
     ' Exportation et destruction des lignes répondant aux critères avec la méthode AdvancedFilter
     rngTarget.Worksheet.Cells.Clear ' Efface la feuille de la zone cible
     For TypeAction = 2 To 1 Step -1 ' Type action = valeur des constantes xlFilterAction pour argument nommé Action
      With rngSource
      .AdvancedFilter TypeAction, rngCriteria, rngTarget
       If TypeAction = xlFilterInPlace Then
       On Error Resume Next
       .Offset(1).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible).EntireRow.Delete
       .Worksheet.ShowAllData
       On Error GoTo 0
       End If
      End With
     Next
     rngCriteria.Clear: Set rngSource = Nothing: Set rngTarget = Nothing: Set rngCriteria = Nothing
    End Sub
    Si maintenant ta demande est l'inverse, il faut changer le critère calculé par
    ou

  5. #5
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonjour DrDim, Philippe, bonjour le forum,

    Désolé j'avais compris l'inverse...
    Remplace :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    O.Range("A1").AutoFilter Field:=1, Criteria1:="<>" & Year(Date) & "/ " & Month(Date) & "/" & Day(Date)
    par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    O.Range("A1").AutoFilter Field:=1, Criteria1:=xlFilterToday
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If CDate(Range("A1").Value) <> Date Then Rows(1).Delete 'si la date en A1 n'est pas égale à la date du jour, efface la ligne 1
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If CDate(Range("A1").Value) = Date Then Rows(1).Delete 'si la date en A1 est égale à la date du jour, efface la ligne 1

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2014
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Un tres grand merci pour votre réponse et votre pédagogie.

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

Discussions similaires

  1. Suppression ligne sur le plot avec Timeseries
    Par nodules dans le forum 2D
    Réponses: 3
    Dernier message: 10/09/2010, 16h27
  2. VBA - Pb Suppression lignes sur plage filtrée
    Par oracle7556 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 01/06/2010, 21h54
  3. Suppression ligne sur condition
    Par cchampion2fr dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 11/09/2008, 15h39
  4. Supprimer des lignes sur un test de date
    Par cynoq dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 26/11/2007, 17h37
  5. [Registre] Suppression MDP sur base de registre
    Par clao260 dans le forum Windows 2000/Me/98/95
    Réponses: 4
    Dernier message: 12/10/2007, 23h59

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