Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2019 chercher une date dans une colonne vba

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

escudo

XLDnaute Nouveau
bonjour,
j'aimerais chercher une date dans une colonne s'elle n'existe pas donc un message s'affiche .
le problème c'est que j'ai un code il marche tres bien si la valeur cherchée est un texte les dates il ne les reconnaisse pas.

Dim VAR As Variant
VAR = Sheets("CLOTURE").Range("B1")

Set rg2 = Sheets("ETAT_ST").Columns("a").Find(what:=CDate(VAR), LookIn:=xlValues, lookat:=xlWhole, searchorder:=xlByRows)
If rg2 Is Nothing Then
rep = MsgBox("Inventaire Non réalisé !!" & Chr(10) & "Veuillez Réaliser un inventaire pour le mois écoulé !!", vbCritical): Exit Sub
End If

si var est un texte le code fais son travail si var et une date rien ne se passe.

merci de m'aider.
 
Solution
Bonsoir,
Vos dates dans "ETAT_ST" sont des chaines non des dates.
Si vous faites en A5 Format de cellules et standard, vous obtenez ça :

En Standard une date devrait donner un nombre et non un texte, comme ceci :


d'où deux choix :
1- Vous gardez ainsi mais vous faites :
VB:
c = Application.Match("" & Feuil2.Range("B1") & "", Feuil1.Columns(1), 0)
2- ou vous gardez la formule actuelle mais vous retaper les dates correctement dans CLOTURES.
En PJ une simulation de la seconde option.

(NB : Dans la PJ j'ai viré tout ce qui est inutile pour le problème qui nous préoccupe.
Le fichier est alors beaucoup moins lourd et peut être livré directement.
C'est plus pérenne qu'un fichier sur site qui disparaitra sous...
Bonsoir,
Vos dates dans "ETAT_ST" sont des chaines non des dates.
Si vous faites en A5 Format de cellules et standard, vous obtenez ça :

En Standard une date devrait donner un nombre et non un texte, comme ceci :


d'où deux choix :
1- Vous gardez ainsi mais vous faites :
VB:
c = Application.Match("" & Feuil2.Range("B1") & "", Feuil1.Columns(1), 0)
2- ou vous gardez la formule actuelle mais vous retaper les dates correctement dans CLOTURES.
En PJ une simulation de la seconde option.

(NB : Dans la PJ j'ai viré tout ce qui est inutile pour le problème qui nous préoccupe.
Le fichier est alors beaucoup moins lourd et peut être livré directement.
C'est plus pérenne qu'un fichier sur site qui disparaitra sous peu, pensez aux lecteurs futurs )
 

Pièces jointes

Re,
Si le problème vient d'un copier coller intempestif ou d'un export d'un outil tiers, cela risque d'être pénible à chaque fois de faire les modifs.
Alors autant transformer ces textes éventuels en vrai dates avec en début de macro :
VB:
' On transforme les dates en texte par des dates en nombres en colonne A
T = Range("A5:A" & [A10000].End(xlUp).Row)
For i = 1 To UBound(T)
    T(i, 1) = CDate(T(i, 1))
Next i
[A5].Resize(UBound(T, 1), UBound(T, 2)) = T
 

Pièces jointes

Bonsoir
ce qui est bien avec les date conformes (même en texte)
c'est que tu peut convertir tout d'un coup de manière simple
exemple
VB:
Sub test()
    With [A1:A26]
        t = .Value
        .NumberFormat = "dd/mm/yyyy"
        .Value = t
    End With
End Sub
que c'est il passé?
je crée une variable tableau(t) avec la plage de cellule (.value)
je remet un numberformat date sur les cellule de la plage
et je repose le tableau dedans
en fait vba est très gentil il a fait la conversion quand les dates sont arrivées dans la variable(t)
voila si les dates se retrouvent à gauche c'est que ça a fonctionné

patrick
 
re
apres si c'est des importations par tiers
et bien on se casse pas la tête on teste les deux formats
en prenant soin bien évidemment de convertir en texte anonymement dans la sub la valeur de B
VB:
Sub CLOTURE()
    Dim c, c2
    With Application

        c = .IfError(.Match(CLng(CDate(Feuil2.Range("B1"))), Feuil1.Columns(1), 0), 0)
        c2 = .IfError(.Match(CStr((Feuil2.Range("B1"))), Feuil1.Columns(1), 0), 0)
    End With
    If c2 > 0 Then c = c2

    If c > 0 Then
        rep = MsgBox("Etes vous sûr de cloturer cette période", vbYesNo + vbQuestion)
        If rep = vbYes Then
            Call transfert
        ElseIf IsError(c) Then
            rep = MsgBox("Inventaire non réalisé" & Chr(10) & "Veuillez réaliser un inventaire pour le mois écoulé", vbInformation)
            Exit Sub
        End If
    End If
End Sub
 
Bonsoir à tous 🙂,

Sans vergogne et tel un parasite, je profite de vos codes pour suggérer, sans honte aucune, ces quelques lignes 😎 :
VB:
Sub CLOTURE()
Dim n
   n = Application.IfError(Application.Match(CLng(CDate(Feuil2.Range("B1"))), Feuil1.Columns(1), 0), 0)
   n = n + Application.IfError(Application.Match(CStr((Feuil2.Range("B1"))), Feuil1.Columns(1), 0), 0)
   If n Then
      If MsgBox("Etes vous sûr de clôturer cette période ?", vbYesNo + vbQuestion + vbDefaultButton2) = vbYes Then transfert
   Else
      MsgBox "Inventaire non réalisé" & Chr(10) & "Veuillez réaliser un inventaire pour le mois écoulé.", vbInformation
   End If
End Sub
 
Bonjour les cadors,
Jolie compet ! 🙂
Par contre je trouve malsain de conserver dans un fichier des dates sous format texte.
Tôt ou tard le demandeur retrouvera le même souci avec les mêmes cellules.
Autant remettre tout d'aplomb. Une date est un nombre, un texte est un texte.
 
Bonjour,
Par simple curiosité, pouvez vous nous dire comment ces données sont arrivées là ?
Comme ce ne sont pas des dates, donc pas d'origine XL, viennent elles d'un import d'un outil tiers, d'un import d'un site web ... ?
Le but serait que cet import se fasse correctement, ce serait plus simple. 🙂
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
17
Affichages
1 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…