IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

RANGE.FIND ne fonctionne pas pour une DATE [XL-2010]


Sujet :

Macros et VBA Excel

  1. #41
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Salut,

    Je croyais que la variable iLastcol désignait la dernière colonne.
    Si ton champ de recherche ne comprend que des nombres, sous format date ou autre, il convient que celui-ci soit uniforme.
    Dans le cas contraire, il faudrait, après la recherche, définir le format sur une cellule spécifique.
    Quoi qu'il en soit, et c'est la base du processus que nous considérons avec Theze, il faut, avant la recherche, uniformiser le format du champ en "General" (ou autre "0").

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


  2. #42
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    981
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 981
    Points : 1 028
    Points
    1 028
    Billets dans le blog
    36
    Par défaut
    Merci MarcelG,

    Grâce à ton aide et celle de tous les autres contributeurs, ça avance, mais comment

    CLng(#1/1/1900#) => 2
    oRgSelect.NumberFormat = "General" sur $C$2 (01/01/1900) => 1

    Nom : crit1.PNG
Affichages : 220
Taille : 30,0 Ko
    Nom : crit2.PNG
Affichages : 168
Taille : 7,2 Ko
    Nom : crit3.PNG
Affichages : 151
Taille : 7,5 Ko
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus

    Mes réponses vous ont aidés, un clic sur leur pouce vert
    Bonjour chez vous

  3. #43
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Bonjour,
    Citation Envoyé par informer Voir le message
    CLng(#1/1/1900#) => 2
    oRgSelect.NumberFormat = "General" sur $C$2 (01/01/1900) => 1
    C'est un très vieux bug connu d'Excel, les dates Excel ne sont en concordance avec celles du VBA qu'a partir du 1er mars 1900, parce qu'Excel considère que la veille est le 29 février 1900 (alors que 1900 n'est pas bissextile !!!).

    EDIT : Dans Excel, les dates du 00/01/1900 au 29/02/1900 ne sont pas valides, elles sont décalées d'un jour, il suffit de mettre ces dates au format long pour s'en rendre compte.
    As-tu vraiment besoin de date antérieure au 1er mars 1900 ?
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  4. #44
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    981
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 981
    Points : 1 028
    Points
    1 028
    Billets dans le blog
    36
    Par défaut
    Merci beaucoup Patrice740 pour l'info !
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus

    Mes réponses vous ont aidés, un clic sur leur pouce vert
    Bonjour chez vous

  5. #45
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    981
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 981
    Points : 1 028
    Points
    1 028
    Billets dans le blog
    36
    Par défaut
    Encore un grand merci à tous. J'en ai fini avec mon problème

    Pour ce que cela vaut et pour une éventuelle autre solution, ma routine de MAJ des plages de risques
    • Total
    • Ouverts
    • Clos
    • Réalisés


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    public Function fHistoriser
     
        Set oRgRiskMatrix = oShtVersion.Range("h3:k8") '-> plage 6x4
     
        lLastRow = oShtGraphe.Range("a" & oShtGraphe.Range("a:a").Rows.Count).End(xlUp).Row
        lLastCol = oShtGraphe.Cells(3, oShtGraphe.Columns.Count).End(xlToLeft).Column - 1
     
        Set oRgSelect = oShtGraphe.Range(Cells(3, 2), Cells(3, lLastCol)): Debug.Print "oRgSelect.Address = " & oRgSelect.Address
        oRgSelect.NumberFormat = "General"
     
        dDate = Date
        Set oRgFind = oRgSelect.Find(What:=CLng(dDate), LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns)
        If Not oRgFind Is Nothing Then
            oRgSelect.NumberFormat = "m/d/yyyy"
            Set oRgFind = oRgFind.Resize(lLastRow, 1):
            If fSetValue(oRgFind, oRgRiskMatrix, dDate) = True Then GoTo End_
        End If
    End Function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Private Function fSetValue(poRgTarget As Range, poRgSource As Range, pdDate As Date) As Boolean
     
        Dim oRg As Range
        Dim bFind As Boolean
        Dim i As Integer
     
        bFind = False
     
        i = 1
        For Each oRg In poRgTarget.Rows
           Debug.Print oRg.Address
           If oRg.NumberFormat = "m/d/yyyy" Then
               oRg.Resize(6, 1).Value = poRgSource.Columns(i).Value
               bFind = True
               i = i + 1
           End If
        Next
     
    Exit_:
        fSetValue = bFind    
    End Function
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus

    Mes réponses vous ont aidés, un clic sur leur pouce vert
    Bonjour chez vous

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 3 PremièrePremière 123

Discussions similaires

  1. Réponses: 0
    Dernier message: 20/07/2017, 17h06
  2. Réponses: 3
    Dernier message: 17/06/2016, 15h44
  3. [XL-2007] Formule qui ne fonctionne pas pour une certaine ligne.
    Par ESVBA dans le forum Excel
    Réponses: 11
    Dernier message: 20/01/2016, 11h56
  4. Réponses: 2
    Dernier message: 02/02/2011, 10h23
  5. Fonction DISTINCT ne fonctionne pas sur une date
    Par cramouille dans le forum Access
    Réponses: 5
    Dernier message: 25/10/2006, 15h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo