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 :

Utilisation de cells.find


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 143
    Points : 38
    Points
    38
    Par défaut Utilisation de cells.find
    Bonjour à tous,

    J'ai un fichier Excel avec dans une colonne tous les jours de l'année.
    J'aimerais grâce à une macro me positionner par défaut sur la cellule du jour actuel. J'ai fait le code suivant qui est très simple mais à chaque fois que je l'exécute, j'ai l'erreur suivante : "Variable objet ou variable de bloc With non définie".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub test()
     
        Dim nom As String
     
        nom = Left(Date, 2) & "/" & Mid(Date, 4, 2)
        Cells.Find(What:=nom).Activate
     
    End Sub
    Pourriez-vous m'aider ?

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 491
    Points : 542
    Points
    542
    Par défaut
    bonsoir,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Sub test()
        Dim CEL As Range
        Dim nom As String
     
        nom = Left(Date, 2) & "/" & Mid(Date, 4, 2)
        Set CEL = Cells.Find(What:=nom)
         MsgBox CEL.Address
    End Sub

  3. #3
    Membre éprouvé
    Avatar de JackOuYA
    Inscrit en
    Juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1 040
    Points : 1 191
    Points
    1 191
    Par défaut
    bonsoir,


    sans analyser tout on code cela est à revoir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nom = Left(Date, 2) & "/" & Mid(Date, 4, 2)
    la fonction Date te renvoi une donnée de Type Date, le type Date n'est pas une chaine de caractére et ne convient donc pas comme paramétre des fonctions Mid ou Left qui sont des fonctions de chaines...

    utilise plutôt les fonctions Day,Month ou Year...
    JacqueS.

    Ps: je ne télécharge les piéces jointes qu'en dernier recours .(et encore...)

    Pour devenir mon ami laissez moi un message

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    752
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 752
    Points : 832
    Points
    832
    Par défaut
    J'ajouterais qu'il n'est pas très optimisé d'appeler 2 fois la fonction Date, et qu'il vaut mieux l'utiliser une seule fois et stocker son résultat dans une variable.

    Dans un cadre plus général, il est inutile d'accéder plusieurs fois à la même fonction ou à la même propriété si c'est pour en ressortir à chaque fois le même résultat. Petit exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim a As String, b As String
    a = "texte qui sert à rien"
    b = "texte qui ne sert pas plus"
    If Sheets("truc").Range("A1").Value <>a Then
        a = Sheets("truc").Range("A1").Value
        b = Sheets("truc").Range("A1").Value
    End If
    En optimisé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim a As String, b As String, contenu As String
    a = "texte qui sert à rien"
    b = "texte qui ne sert pas plus"
    contenu = Sheets("truc").Range("A1").Value
    If contenu <>a Then
        a = contenu
        b = contenu
    End If

  5. #5
    Membre émérite

    Homme Profil pro
    Technicien Métrologie R&D
    Inscrit en
    Janvier 2007
    Messages
    1 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien Métrologie R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 610
    Points : 2 523
    Points
    2 523
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    With Worksheets(1).Range("a1:a365")
        Set c = .Find(Date, LookIn:=xlValues)
        If Not c Is Nothing Then
            Cells(c.Row, c.Column).Select
        End If
    End With

  6. #6
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 143
    Points : 38
    Points
    38
    Par défaut
    Merci à tous.
    Pour information, Daranc ton programme ne me donnait rien, j'ai utilisé tout bêtement les fonctions day et month :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub test()
     
        Dim nom As String
     
        nom = day(Date) & "/" & month(Date)
        Cells.Find(What:=nom).Activate
        ActiveCell.Offset(0, 1).Activate
     
    End Sub

  7. #7
    Membre émérite

    Homme Profil pro
    Technicien Métrologie R&D
    Inscrit en
    Janvier 2007
    Messages
    1 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien Métrologie R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 610
    Points : 2 523
    Points
    2 523
    Billets dans le blog
    1
    Par défaut
    c'est que tes dates ne sont pas des dates mais des textes .Les dates sont des nombre dans un format spécial : Si tu tapes en A1 d'une nouvelle feuille 10/08 excel afficheras 10/08/08 ou 10/08/2008 (ça dépends des ooptions par défaut)
    tu tires vers le bas les dates s'incrémentent dans le même format si tu choisi l'une des cellule et que tu la passe au format standard excel affiche un nombre du style 38522 c'est le nombre de jour passé depuis le 01/01/1900 sur PC et depuis le 01/01/1904 sur MAC (j'ai limité la plage à a1:a365 = un an)

Discussions similaires

  1. Utilisation d'un cells.find avec texte et variable
    Par remi2305 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 11/05/2015, 10h55
  2. Utilisation de Cells.Find
    Par Therradan dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 17/04/2015, 15h00
  3. [VBA-E] utilisation de cells
    Par flamel dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 23/12/2006, 10h49
  4. utilisation de std::find( string )
    Par ccensam dans le forum SL & STL
    Réponses: 1
    Dernier message: 24/11/2006, 22h07
  5. Réponses: 4
    Dernier message: 08/08/2006, 13h44

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