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

Rechercher des sujets similaires à "vba utiliser resultat inputbox methode find"