VBA - Utiliser résultat Inputbox et méthode Find
Bonsoir à tous !
je viens à vous car j'aurais besoin d'un peu d'aide sur un code VBA. J'ai cherché sur Internet mais je n'ai pas trouvé vraiment de réponses à mon soucis.
Ce que j'aimerais faire avec cette macro c'est lancer une inputbox. Dedans on rentre une date. Ensuite avec la méthode Find on regarde si la date est bien présente dans la feuille et si c'est le cas on supprime alors toutes les colonnes où il y a la date.
Je pense qu'il manque pas grand chose pour que mon code fonctionne, le soucis c'est qu'il ne trouve pas la date que je rentre (alors qu'elle est bien présente dans la feuille).
Si vous avez des idées quant à l'origine de ce problème je suis preneur !
Voici mon code
Sub supprimer_un_mois()
' déclaration des variables
Dim k As Integer
Dim mois_suppr As Range
Dim mois As String
' Sheet1 activée, c'est dans cette feuille que se trouve le mois que je veux supprimer
Sheets("Sheet1").Activate
'mon inputbox où on rentre un mois sous le format donné
mois = Application.InputBox("Quel mois souhaitez vous supprimer ?", "SUPPRESION D'UN MOIS", "mmm aaaa", , , , , Type:=2)
'méthode find qui est censé récupéré le mois que l'on a rentré
Set mois_suppr = Sheets("Sheet1").Cells.Find(mois, Lookat:=xlWhole, searchorder:=xlByRows)
'vérification que ce qui a été rentré est bien une date
If IsDate(mois) Then
Rep = MsgBox("Êtes vous sur de vouloir supprimer le mois " & mois, vbOKCancel)
If Rep = vbOK Then
'petit message pour rassurer les futurs utilisateurs de ce fichier, tout n'est pas perdu !
MsgBox "Le classeur a été sauvegardé avant la suppression, si vous souhaitez récupérer les données effacées fermez le classeur sans enregistrer et ouvrer la version la plus récente"
If mois_suppr Is Nothing Then
MsgBox "Le mois que vous souhaitez supprimer n'est pas dans la feuille des données"
'mon soucis, il m'affiche toujours cette MsgBox précédante, même quand le mois cherché est dans la feuille...
Else
'boucle pour chercher toutes les cellules de la ligne 2 dans lesquelles il y a le mois cherché et en supprimer les colonnes
For k = 100 To 1 Step -1
If Cells(2, k).Value = mois Then
Columns(k).Delete
End If
Next
End If
End If
Else
MsgBox "Erreur ! Veuillez rentrer une date valide sous le format attendu"
End If
'des suggestions ? :D
End Sub
Je vous remercie d'avance pour avoir pris la peine de me lire et si possible m'éclaircir un peu sur ce soucis !
Bonne fin de soirée
Ratchetc
Bonjour,
Ta recherche avec Find porte sur une donnée de type String.
Si ta zone de recherche contient des dates, elle n'est pas près d'aboutir !
Chaîne ou Date ?
Bonjour,
merci pour ta réponse. Effectivement cela vient peut être d'une mauvaise déclaration de variable.
Je devrais plutôt déclarer
Dim mois as Date
?
Chaîne ou Date ?
Tu parles peut être de mon inputbox mois ? Car je l'ai mis de Type:=2 pour une chaine de texte. Je ne crois pas qu'il y a des dates et dans mon esprit un peu naif une date c'est aussi une chaîne de caractère. Tu penses que le Type n'est pas le bon ?
Tu avais raison, c'était tout bêtement une mauvaise déclaration de variable, petite erreur d'étourderie !
avec
Dim mois as Date
ça fonctionne !
Merci à toi, et bonne journée !
Bonsoir,
j'en profite pour prévenir que la solution ne fonctionnait que partiellement. Mais il semblerait que j'ai trouvé une solution qui fonctionne totalement.
MFerrand m'avait mis sur la piste, le soucis était sur le type de mes variables.
Dans mes petites heures de recherche sur les forums je n'ai pas trouvé beaucoup de réponses sur mon cas. Donc j'expose rapidement ma solution si jamais quelqu'un bloque comme moi.
Mon soucis était que je n'arrivais pas à exploiter la donnée que rentre l'utilisateur dans une application.inputbox pour faire une méthode find.
La principale raison était que dans l'inputbox je demande à rentrer une date. Puis j'utilise cette date dans la méthode find pour la chercher dans ma feuille.
Le soucis étant que:
1) Si je déclare mon application.inputbox (test) comme une date:
Dim Test as Date
, si je rentre une date ça marche mais si je ne rentre pas de date ça bug et la macro s'arrête (or je veux aussi prendre en compte la saisie: si la personne se trompe sur la donnée qu'elle rentre elle est avertie et peut recommencer)
2) Si je déclare mon application.inputbox comme String
Dim Test as Date
si je rentre pas une date ou n'importe quoi la suite de mon test marche, on me prévient que le format de ma saisie est pas bon ect (msgBox que j'avais demandé d'afficher). Par contre si je rentre une date impossible de la retrouver car dans ma méthode find elle est de type... String
Il faut donc dans ces cas là, convertir la saisie application.inputbox (Test)
Bref voilà ma solution
Dim k As Integer
Dim mois_suppr As Range
Dim mois As String
' Sheet1 activée, c'est dans cette feuille que se trouve le mois que je veux supprimer
Sheets("Sheet1").Activate
'mon inputbox où on rentre un mois sous le format donné. Même si on rentre sous le format que j'ai donné, ça reste une variable String
mois = Application.InputBox("Quel mois souhaitez vous supprimer ?", "SUPPRESION D'UN MOIS", "mmm aaaa", , , , , Type:=2)
'vérification que ce qui a été rentré est bien un format date
If Not IsDate(mois) Then
MsgBox "Annulé. Ou vérifiez que vous avez rentré une date valide sous le format attendu"
End If
If IsDate(mois) Then
'on convertit la variable en date
mois = CDate(mois)
'on introduit la variable mois_suppr que maintenant car c'est que maintenant que mois est une date. Pour what:= on précise le CDate(mois)
Set mois_suppr = Sheets("Sheet1").Cells.Find(what:=CDate(mois), Lookat:=xlWhole, searchorder:=xlByRows)
Rep = MsgBox("Êtes vous sur de vouloir supprimer le mois " & mois, vbOKCancel)
Et ça marche ! Je ne suis pas encore super à l'aise sur la logique VBA sur ce coup mais je pense avoir compris l'ensemble.
Bref à bon entendeur
Bonne soirée
Bonsoir,
Ton code est un peu confus... En tout cas, cherchant une date (une date est un nombre dans Excel) avec la méthode Find, tu aurais intérêt à mettre l'argument : LookIn:= xlFormulas.
Cordialement