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 :

Problème macro tâche du jour [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 9
    Par défaut Problème macro tâche du jour
    Bonjour à toutes et à tous,

    Suite aux remarques pertinentes de "Marc-L", je recrée correctement mon sujet.

    J'ai un fichier Excel me permettant de noter et archiver les tâches que j'ai à effectuer.
    J'ai récupéré une macro permettant, à l'ouverture du fichier, de m'avertir des tâches à réaliser le jour même.
    Cependant, si le tableau est vide ou que la date du jour n'apparaît pas dans la colonne "D", un message d'erreur apparait (Erreur d'exécution '13': Incompatibilité de type.)
    J'aimerais par conséquent savoir si il est possible de palier à cela ?

    Voici la macro en question :

    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 Sub Workbook_Open()
    Application.ScreenUpdating = False
    Dim recl As String
    Dim i As Long
    Const OK_BUTTON = 0
    Const AUTO_DISMISS = 0
     
    Set objShell = CreateObject("Wscript.Shell")
    recl = ""
    For i = 2 To Range("a65536").End(xlUp)
    If Sheets("Travail à faire").Range("D" & i).Value = Date And Sheets("Travail à faire").Range("D" & i).Value <> "" Then
    recl = recl & vbNewLine & Range("B" & i) & " " & ":" & " " & Range("C" & i)
    End If
    Next i
    Application.ScreenUpdating = True
    If recl <> "" Then
    objShell.Popup "A faire aujourd'hui :" & vbNewLine & recl, AUTO_DISMISS, "Avertissement", OK_BUTTON ' Passer par popup pour éviter la limitation à 1023 caractères
    Else
    End If
     
    End Sub
    Et la ligne surlignée lorsque j'ouvre le débogeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For i = 2 To Range("a65536").End(xlUp)
    Merci d'avance à ceux qui pourront m'aider et bonne journée !

    Cordialement.

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut




    Alors, bis repetita, sans connaître la ligne déclenchant l'erreur,
    cette erreur survient lorsque torchons & serviettes sont mélangées ! Le type de données ne correspond pas à celui attendu …



  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 9
    Par défaut
    Message original édité.
    Le débogeur me surligne cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For i = 2 To Range("a65536").End(xlUp)
    Sur mon tableau, les lignes aprés la 40 sont masquées, cela peut-il poser problème à la commande "range" ?

  4. #4
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Tout est dit pourtant dans mon précédent message …

    Là c'est de la belle boulette : sans rapport avec des lignes masquées mais juste un problème de logique !

    La variable i étant déclarée en Long, que renvoie donc la propriété End ?


    Au passage, 65536 est le numéro de la dernière ligne … dans Excel 2003 !

    _________________________________________________________________________________________________
    Il n'y a pas que les aigles qui atteignent les sommets, les escargots aussi mais ils en bavent !

  5. #5
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 9
    Par défaut
    Comme écrit dans le message original :

    Citation Envoyé par Wazapala Voir le message
    J'ai récupéré une macro
    Par conséquent, ce n'est pas moi qui l'ai créée et aussi simple soient ces erreurs, je n'ai pas les connaissances requises pour les solutionner au premier coup d'œil.

    Quoi qu'il en soit, j'ai supprimé la propriété "End" et je ne reçois plus de message d'erreur par contre, le pop-up listant les tâches du jour ne s'affiche plus !

    J'ai également tenté de déclaré la variable i en Integer, sans succès.

    Si j'ai bien compris, la propriété "End" renvoie un objet Range qui représente la cellule à la fin de la région.

  6. #6
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Récupérer une macro qui n'a jamais pu fonctionner est donc une très mauvaise idée !

    Rien à voir donc avec cette présentation initiale :

    Citation Envoyé par Wazapala Voir le message
    Cependant, si le tableau est vide ou que la date du jour n'apparaît pas dans la colonne "D", un message d'erreur apparait
    Car tableau vide ou pas, date présente ou pas, jamais en l'état la ligne fonctionnera sans déclencher une erreur !

    Le problème ne vient donc pas de la variable i mais bien de l'objet Range n'étant pas une valeur numérique !
    C'est comme si Madame en train d'étendre du linge demande de lui apporter une corbeille de pinces à linge
    et tu reviens avec une boîte de clous !
    Oui, la propriété End pointe bien sur un objet Range, donc logiquement ne peut être intégrée dans une boucle numérique …

    Donc pour balayer d'une ligne jusqu'à la dernière ligne - et non pas cellule ! - il faudrait certainement
    coller la propriété Row à la propriété End

    _________________________________________________________________________________________________
    Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. (Confucius)

  7. #7
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 9
    Par défaut
    Si le tableau n'est pas vide et que la colonne "D" contient quelque part la date du jour, la macro fonctionne correctement !! Pour preuve :
    Nom : ex tab.JPG
Affichages : 239
Taille : 47,4 Ko

    D'accord, je vais essayer de comprendre comment fonctionne la propriété "Row" pour l'utiliser.

  8. #8
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Cela "fonctionne" car coup de bol ! Le 7/9/2014 correspond en fait à la valeur numérique 41889.

    Donc comme le code est mauvais car sans propriété précisée à la cellule désignée par Range.End,
    VBA en lecture choisit souvent par défaut la valeur de la cellule :
    la boucle commence à la ligne n°2 et se poursuit donc jusqu'à la ligne n°41889 !
    Super efficace lorsqu'il y a uniquement la ligne n°2 à traiter ‼

    Vu ?!

    Donc pour être un tant soit peu logique, ajouter enfin au bout de cette ligne .Row

    _________________________________________________________________________________________________
    Deux choses sont infinies : l’Univers et la bêtise humaine.
    Mais en ce qui concerne l’Univers, je n’en ai pas encore acquis la certitude absolue ! (Albert Einstein)


  9. #9
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 9
    Par défaut
    Bonjour,

    J'ai finalement modifié la ligne de commande posant problème comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For i = 2 To Range("D1048576").End(xlUp).Row + 1
    (Modification de la commande Range et rajout de Row + 1)

    Et maintenant, tout a l'air de fonctionner correctement !

    Cordialement.

  10. #10
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut




    Bonjour,

    le "+ 1" ne sert à rien, à part lire une ligne vide ‼ Pourtant j'ai été clair … Pourquoi la colonne D, pourquoi pas la colonne A ?

    Enfin lire seulement une ligne en trop est bien mieux comparativement aux 41 000 précédemment !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VBA-Excel] Macro de mise à jour de Report
    Par strifer dans le forum Macros et VBA Excel
    Réponses: 22
    Dernier message: 13/07/2006, 11h23
  2. [VBA-E] Problème macro excel
    Par pontus21 dans le forum Macros et VBA Excel
    Réponses: 32
    Dernier message: 19/05/2006, 18h38
  3. Problème récurrent de mise à jour
    Par r@phy dans le forum Access
    Réponses: 8
    Dernier message: 10/02/2006, 13h19
  4. Problème d'une mise à jour
    Par Hamdi dans le forum Access
    Réponses: 2
    Dernier message: 17/09/2005, 13h57
  5. problème de mise a jour
    Par leeloo076 dans le forum ASP
    Réponses: 3
    Dernier message: 15/04/2004, 16h09

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