Aide à la création d'une macro : fonctions datedif et delete

Bonjour à tous,

Bien que connaissant un peu la logique nécessaire au codage, je ne maîtrise pas la syntaxe VBA.

J'aimerai créer une macro qui permettrait de supprimer les lignes ayant pour date (en colonne A) une date dont l'intervalle avec la date d'aujourd'hui est supérieur à 4 mois.

Je sais qu'il est possible (et simple) de procéder à ce genre de trie sans utiliser de macro mais je dois automatiser cette action dans le cadre de mon stage.

Voici le code que j'ai construit (et qui ne fonctionne pas) en péchant par ci par là des bout de code sur le forum :

Sub deleteAdvanceDate()

Dim varDate As Date

varDate = Range("A2").Select // la première date est en A2

Do While Not (IsEmpty(ActiveCell)) // tant que la cellule active est non vide

If (DateDiff("d", varDate, Date) > 120) Then // si l'écart entre la date d'aujourd'hui et celle de la cellule active est supérieur à 120 j

ActiveCell.EntireRow.Delete // suppression de la ligne correspondante

End If

ActiveCell.Offset(1, 0).Select // on passe à la ligne suivante

Loop // et on reboucle

End Sub

Voilà donc je pense que la logique utilisée est bonne, après je pense avoir fait des erreurs sur la syntaxe.

Merci à vous si vous avez l'amabilité de prendre un peu de votre temps pour répondre à ma question

louisP

voici un code qui fonctionne,

Sub deleteAdvanceDate()

Dim varDate As Date
varDate = Range("A2").Value
Range("a2").Select ' la première date est en A2

Do While Not (IsEmpty(ActiveCell)) ' tant que la cellule active est non vide
    If (DateDiff("d", ActiveCell.Value, Now) > 120) Then ' si l'écart entre la date d'aujourd'hui et celle de la cellule active est supérieur à 120 j
        ActiveCell.EntireRow.Delete ' suppression de la ligne correspondante
    Else
        ActiveCell.Offset(1, 0).Select ' on passe à la ligne suivante
    End If

Loop ' et on reboucle

End Sub

tu dois sans doute bien connaître le javascript je suppose

ici les commentaires commencent par une apostrophe

ensuite, on ne peut pas coupler un objet comme vardate avec une cellule qui bouge, il faut reprendre la valeur à chaque pas

autre problème : la suppression de la ligne fait qu'on n'a pas besoin du coup d'incrémenter

teste ceci et améliore

Merci beaucoup, ça fonctionne

juste une petite chose : tu avais inversé les arguments de datedif : il faut mettre en premier Now puis la date dont on cherche à savoir si elle est décalée de 120 jours (en avance) par rapport à aujourd'hui.

Voici le code définitif pour ceux qui seraient éventuellement intéressés :

Sub deleteAdvanceDate()

Dim varDate As Date

varDate = Range("A2").Value

Range("a2").Select ' la première date est en A2

Do While Not (IsEmpty(ActiveCell)) ' tant que la cellule active est non vide

If (DateDiff("d", Now, ActiveCell.Value) > 120) Then ' si l'écart entre la date d'aujourd'hui et celle de la cellule active est supérieur à 120 j

ActiveCell.EntireRow.Delete ' suppression de la ligne correspondante

Else

ActiveCell.Offset(1, 0).Select ' on passe à la ligne suivante

End If

Loop ' et on reboucle

End Sub

Voilà, et encore un grand merci

Parfait !

je pensais que tu voulais effacer un historique ...

Rechercher des sujets similaires à "aide creation macro fonctions datedif delete"