Chercher une date avec VBA (novice)

Bonjour,

Tout simplement : je cherche une date dans un fichier, il existe une date par mois (il s'agit de "loyers"), le jour du mois n'est pas connu d'avance (ca dépend du contrat).

Donc voilà, j'enregistre une petite macro toute simple, avec Ctrl + f, en cherchant par exemple "03/2019", pour qu'il me renvoie la date en mars 2019. Sur Excel, pas de soucis, il m'affiche bien dans ce cas ci "20/03/2019", en revanche l'exécution de la macro (sa propre macro!) ne fonctionne pas, il ne trouve pas la correspondance. Je pense bien qu'il s'agisse d'un problème de format.

    Application.FindFormat.NumberFormat = "m/d/yyyy"
    Cells.Find(What:="03/2019", After:=ActiveCell, LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=True).Activate
Lorsque j'exécute cette macro dans VBA et que ca plante, je passe ma souris sur ActiveCell, il trouve bien la correspondance, "20/03/2019"...
J'ai parcouru plein de forum, pas trouvé, je suis depuis hier sur ce problème sans relâche, j'ai essayé plein de codes différents sur les forum, ca ne fonctionne toujours pas. J'ai essayé en stockant la valeur dans une variable, en forcant le format, en essayant CDdate, en rajoutant des caractères "joker" (pour les jours que je ne connais pas d'avance), etc...

Pourriez vous vous pencher sur mon problème ?

Merci beaucoup

Manu

98trouver-date.xlsm (26.40 Ko)

Bonjour,

Ce code va mettre ne couleur la/les cellules trouvées dans le mois choisi ...

Si ce traitement te convient ... il ne restera qu'à remplacer le bout de code qui met en couleur (with .... end with) par le traitement que tu désires ...

Un essai ...

Sub Selon_periode_choisie()
Dim Periode_Debut As Long
Dim Periode_Fin As Long
Dim L As Integer

    Application.ScreenUpdating = False

    Periode_Debut = DateValue("03/2017")
    Periode_Fin = DateValue("04/2017")

    With Worksheets("Feuil1").Range("B2:B64")
        .NumberFormat = "General"

        For L = 2 To 64
            If .Cells(L).Value > Periode_Debut Then
                With .Cells(L).Interior
                    .Pattern = xlSolid
                    .PatternColorIndex = xlAutomatic
                    .ThemeColor = xlThemeColorAccent4
                    .TintAndShade = 0.799981688894314
                    .PatternTintAndShade = 0
                End With
            If .Cells(L).Value > Periode_Debut And .Cells(L).Value < Periode_Fin Then Exit For
            End If
        Next L

        .NumberFormat = "dd/mm/yyyy"
    End With
End Sub

ric

Bonjour,

Merci de votre réponse. Je sais que l'on pourrait trouver avec quelque chose comme "if cells(ligne, colonne) = "03/2019" then "... mais je ne souhaite pas utiliser de si, pour le moment du moins, car je comptais mettre la recherche de date dans un Select case, et les Si et Select case ne se marrient pas bien (mais c'est ce vers quoi je me rabatterai si je ne trouve pas de solution effectivement).

Pour info, je comptais mettre dans un Userform un contrôle toupie avec le choix de la date (mois/année), et donc utiliser un Select case à cet effet pour "l'optimalité" du code... je suis persuadé que c'est possible de trouver avec cells.Find ...

Merci

Bonjour ManuBE, Ric,

En retour une modification de ton code. Avec une boîte de message pour indiquer la cellule datée trouvée.

A ôter puis à adapter pour tout autre traitement.

Sub RechDate()
Dim Cel As Range, D As Integer
With ActiveSheet.Range("B1:B500")
    For D = 1 To 31
    On Error Resume Next
    'Exemple pour trouver février 2017, remplacer par tout autre mois et année.
    Set Cel = .Find(CDate(D & "/02/2017"))
    If Not Cel Is Nothing Then
       MsgBox "Cellule " & Cel.Address
     End If
     Next D
End With
End Sub

Bons tests, bonne continuation.

Merci les gars, j'ai fini par trouver par moi-même, la solution est parfois plus simple, on se casse la tête à chercher trop compliqué:

Sub TestDate()
Dim laDate As Variant

 Set laDate = Sheets("fiche").Range("B60:B250").Find("08/2020", , xlValues, xlPart, , , False)

MsgBox laDate.Value

End Sub

Bisous bisous

Bonjour à tous,

Ce code ne fonctionne pas sur ton fichier exemple ...

ric

A nouveau,

@Ric,

Tout à fait exact son dernier code ne fonctionne pas mieux que le premier qu'il a posté pour le fichier proposé.

captmadate

Contrairement au code transmis pour ce besoin avec maintenant une date en cellule K4.

captrechdate

@ManuBE,

Je poste ton fichier modifié en y ajoutant ta dernière macro. Pour que tu puisses mieux voir...

Merci de bien vouloir aussi clore le sujet.

Bonjour,

Effectivement, sur le fichier posté d'essai ca ne marche pas, mais sur mon fichier d'origine ca marche bien. Je déteste ne pas comprendre les choses, donc je pense avoir un début de réponse : il s'agit de la mauvaise gestion (et programmation!) + automatisation des différents formats de date par Excel. VBA en format américain, Excel en format "Français" / Européen, donc ca entraine des bugs par ci par là.

En annexe, le fichier avec la macro qui fonctionne effectivement. Les formats de date sont en anglais australien. Pourquoi me met il "anglais australien", je n'en ai aucune idée, si ce n'est les raisons évoquées ci dessus (gestion, programmation, automatisation).

On ne peut que déplorer la mauvaise gestion des différents formats de dates dans Excel, le code suivant est pourtant, même en format Français, parfaitement compréhensible.

Sub TestDate()
Dim laDate As Variant

 Set laDate = Sheets("fiche").Range("B18:B250").Find("09/2019", , xlValues, xlPart, , , False)
' If Not laDate Is Nothing Then
'    MsgBox "X = " & laDate & Chr(13) & "Cette date est à la cellule " & laDate.Address
' Else
'    MsgBox "Cette date n'est dans aucune cellule de la feuille.", 16
' End If

MsgBox laDate.Value
MsgBox laDate.Offset(0, 1).Value

End Sub

"Dans la feuille Fiche, cherche dans la plage mentionnée l'expression "09/2019", et contente toi d'une partie de celle ci (xlPart)"

Je ne vois pas ce que Excel ne comprend pas en format francais.

Comme dit précédemment, je déteste ne pas comprendre les choses, donc si vous avez des idées / pistes / je suis preneur :)

Bonne journée

Bonjour,

Si tu vis au pays des Kangourous, c'est dans la poche... Ta macro est adaptée.

Enfin de la ligne 18 à la ligne 66. Car tu as deux formats de Date dans la colonne B.

Avant la ligne 18 c'est le format régional et idem après la ligne 66.

Donc plus de 48 échéances sans modif du format de ta colonne B et ta macro n'est plus entièrement valide.

En annexe, le fichier avec la macro qui fonctionne effectivement. Les formats de date sont en anglais australien. Pourquoi me met il "anglais australien", je n'en ai aucune idée, si ce n'est les raisons évoquées ci dessus (gestion, programmation, automatisation).

En fait, Excel ne t'a pas mis l'anglais australien à l'endroit précis ou tu as tes dates, puisque la colonne est formatée dès le départ en format régional.

A moins d'un Marsupilami farceur...

Clos au moins le sujet.

Rechercher des sujets similaires à "chercher date vba novice"