XL 2013 Supprimer des lignes en fonction de la réponse InputBox

QsecX

XLDnaute Nouveau
Bonjour,
Je vous explique mon problème.
J'ai une extraction excel de tickets (environ 3000). Avec une premier macro j'ai mis en page comme je voulais en gardant que les colonnes qui m' intéressé.

J'ai ensuite créé un bouton ou je rentre le mois et l'année de création du ticket " avril 2016" qui correspond à une de colonnes qui j'ai gardé dans ma mise en page.
Mon problème maintenant est le suivant: J'aimerais qu'il me supprime toutes les autres lignes qui ne contienne pas "avril 2016".
Pour information, le format de ma colonnes création du ticket est: 20 avril 2016.

Voila voila, je commence tout juste ce style de macro. Je ne m'y connais pas beaucoup et mes recherches ne m'ont pas encore permis de trouver ma solution.
Merci d'avance.
 

jp14

XLDnaute Barbatruc
Re : Supprimer des lignes en fonction de la réponse InputBox

Bonjour et bienvenue sur le forum

Ci joint un fichier avec des macros

La première demande le mois et l'année, et demande une confirmation de la suppression des données.
La deuxième supprime la date en utilisant un tableau, cette méthode est très rapide.
La troisième supprime les lignes sans date.

A modier :Col1 = "A" ' colonne qui contient les dates

A tester

JP
 

Pièces jointes

  • Classeur2.xlsm
    182.3 KB · Affichages: 51
  • Classeur2.xlsm
    182.3 KB · Affichages: 37

Robert

XLDnaute Barbatruc
Repose en paix
Re : Supprimer des lignes en fonction de la réponse InputBox

Bonjour le fil, bonjour le forum,

Adapté de l'idée de JP, une autre proposition avec le code ci-dessous :

Code:
Option Explicit

Private Sub CommandButton1_Click()
Dim BE As Variant 'déclare la variable BE (Boîte d'Entrée)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim DT As String 'déclare la variable DT (DaTe)
Dim I As Integer 'déclare la variable I (Incrément)

ActiveCell.Select 'enlève le focus au bouton
DEB: 'étiquette
BE = Application.InputBox(Prompt:="Veuillez indiquer la date mm/aaaa", Type:=2, Default:=Format(Now, "mm/yyyy")) 'définit la bôite d'entrée BE
If BE = False Then Exit Sub 'si bouton "Annuler", sort de la procédure
If IsDate(BE) = False Then 'condition si BE n'est pas une date
    MsgBox "Date invalide !" 'message
    GoTo DEB 'retoure à la boîte d'entrée via l'étiquette "DEB"
End If 'fin de la condition
If Range("A2").Value = "" Then Exit Sub 'si A2 est vide (donc si le tableau est vide)
If MsgBox("Attention vous aller supprimer des données. Voulez vous continuer ?", 1) = vbNo Then Exit Sub 'si "Non"au message, sort de la procédure
TV = Range("A1").CurrentRegion 'définit le tableau des valeurs TV
DT = CStr(Month(BE) & "/" & Year(BE)) 'définit la date DT (convertie la valeur de BE en texte)
For I = UBound(TV, 1) To 2 Step -1 'boucle inversée sur toute les lignes du tableau des valeurs TV (de la derniere à la seconde)
    If CStr(Month(TV(I, 1)) & "/" & Year(TV(I, 1))) = DT Then Rows(I).Delete 'si les dates (converties en texte) concordent la ligne est effacée
Next I 'prochaine ligne de la boucle
End Sub

[Édition]
JP a eu la gentillesse de me signaler une erreur dans le code proposé ci-dessus. Il faut remplacer la ligne :

Code:
 If CStr(Month(TV(I, 1)) & "/" & Year(TV(I, 1))) = DT Then  Rows(I).Delete 'si les dates (converties en texte) concordent la ligne  est effacée
par :
Code:
 If CStr(Month(TV(I, 1)) & "/" & Year(TV(I, 1))) <> DT Then  Rows(I).Delete 'si les dates (converties en texte) ne concordent pas, la ligne  est effacée
À modifier dans le fichier en pièce jointe donc...
 

Pièces jointes

  • QsecX_v01.zip
    40.1 KB · Affichages: 30
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 488
Messages
2 088 861
Membres
103 979
dernier inscrit
imed