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 d'une plage nommée avec un "underscore" en VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Inscrit en
    Décembre 2006
    Messages
    897
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 897
    Par défaut Utilisation d'une plage nommée avec un "underscore" en VBA
    Bonjour,

    OK, le "undescore" a un usage spécifique dans le VBE.

    Mais le correcteur comprend bien le texte voulu tout comme en mode exécution directe ou l'interpréteur affiche bien la valeur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      ? Range("_Annee").Value
    Mais "erreur 400" lors de l’exécution de la macro.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        Dim SemDecalage As Integer
     
        MsgBox Range("_Annee").Value
        SemDecalage = NumWeek(DateSerial(Range("_Annee").Value, 9, 1)) - 1
    Cette valeur nommée "_Année" existe dans presque tous les classeurs.

    Quelle solution me proposez-vous ?
    1) Changer le nom de la variable et donc aussi dans toutes les formules : un recherche & remplacer devrait suffire
    2) Aller chercher la référence de la cellule contenant la plage nommée. (plus simple mais non spécifique)
    3) vos solutions...

    Merci à vous.

    ESVBA

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 169
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    A mon avis, le problème vient de la fonction NumWeek dont vous n'avez pas publié le code

    L'essai ci-dessous ne renvoie aucune erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub t()
        Dim SemDecalage As Integer 
        SemDecalage = DatePart("ww", DateSerial(Range("_Annee").Value, 1, 1), vbMonday, vbFirstFourDays)
        MsgBox SemDecalage
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre émérite
    Inscrit en
    Décembre 2006
    Messages
    897
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 897
    Par défaut
    Bonjour Philippe,

    merci de te pencher sur le problème.

    le code de "NumWeek()" est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function NumWeek(Jour As Date) As Integer
        NumWeek = DatePart("ww", Jour, vbMonday, vbFirstFourDays)
    End Function
    Ce qui pose problème est le contenu de "jour".

    Ta formule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SemDecalage = DatePart("ww", DateSerial(Range("_Annee").Value, 1, 1), vbMonday, vbFirstFourDays)
    provoque une "erreur 400".

    L'erreur est aussi sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     MsgBox Range("_Annee").Value
    alors que dans la fenêtre d'exécution immédiate, il n'y a pas d'erreur.

    J'ai supprimé la plage nommée, fermé le classeur, ré-ouvert ce dernier et recréé la plage nommée. Toujours le même problème.

    Est-ce un problème de version ?
    Sous 2010, je n'avais pas ce problème. Et me souviens d'avoir déjà utilisé "_Annee" sans problème.
    J'ai d'ailleurs un problème avec une plage nommée (vieille de 15 ans) qui ne fonctionne plus dans un autre classeur. Mais pour un autre post.

    ESVBA

  4. #4
    Membre Expert Avatar de Nain porte koi
    Homme Profil pro
    peu importe
    Inscrit en
    Novembre 2023
    Messages
    1 179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : peu importe

    Informations forums :
    Inscription : Novembre 2023
    Messages : 1 179
    Par défaut
    Hello,

    je ne reproduis pas l'erreur avec 365, que ce soit avec votre code ou celui de Philippe.
    Y'a quoi exactement dans "_Annee" ?
    c'est une seule cellule ou un range ?

  5. #5
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 171
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    Quand on a des erreurs bizarres en VBA (style code qui a toujours fonctionné ne fonctionnant plus) un des premiers réflexes à avoir est de vérifier ses références
    dans l'éditeur Visual Basic
    Menu Outils - Références
    s'il y en a une marquée MANQUANT, ça peut perturber n'importe quel code basique VBA

  6. #6
    Membre émérite
    Inscrit en
    Décembre 2006
    Messages
    897
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 897
    Par défaut Merci de votre intérêt
    Bonjour Nain porte quoi (porte, apporte la solution ?),

    c'est une seule cellule qui est référencée dans une feuille paramétrage comme ceci :
    Nom : i1.png
Affichages : 149
Taille : 23,3 Ko

    Bonjour tototiti2008,
    rien de manquant.
    Nom : i2.png
Affichages : 147
Taille : 17,6 Ko

    J'ai fait une réparation du fichier mais ça n'apporte rien.

    Je pense à un bug de mon fichier.
    Je me vois mal refaire le fichier sans faire de nombreuses, très nombreuses copies d'éléments et donc importer le "bug".

    Le bug est de localiser le problème pour éviter de l'importer.

    Si vous avez une idée.

    Merci.

    ESVBA

  7. #7
    Membre Expert Avatar de Nain porte koi
    Homme Profil pro
    peu importe
    Inscrit en
    Novembre 2023
    Messages
    1 179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : peu importe

    Informations forums :
    Inscription : Novembre 2023
    Messages : 1 179
    Par défaut
    OK, mais vous avez oublié une question
    Y'a quoi exactement dans "_Annee" ?

  8. #8
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 171
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    Oui, il semble que l'erreur 400 montre un fichier corrompu, d'une manière ou d'une autre
    Difficile de t'aider sans disposer du fichier

  9. #9
    Membre émérite
    Inscrit en
    Décembre 2006
    Messages
    897
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 897
    Par défaut Bonsoir à tous
    je reviens sur mon problème.

    Nain porte koi, c'est un nombre qui représente l'année gérée.
    A partir de cette valeur de l'année, les dates sont générées et les comparaisons sont faites.


    J'ai le même problème avec le fichier au format xlsx.

    Maintenant, comment faire pour éviter de réimporter un bug dans un nouveau fichier ?

    J'ai déjà fait cela sur un autre fichier, en réimportant des morceaux et ça n'a pas améliorer les choses. Bilan : des dizaines d'heures perdues pour rien.

    ESVBA

  10. #10
    Membre Expert Avatar de Nain porte koi
    Homme Profil pro
    peu importe
    Inscrit en
    Novembre 2023
    Messages
    1 179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : peu importe

    Informations forums :
    Inscription : Novembre 2023
    Messages : 1 179
    Par défaut
    Je tenterai un turyuc... Ouvrir avec libreoffice, l'enregistrer en .ods, l'ouvrir et faire excel et tester

Discussions similaires

  1. Réponses: 5
    Dernier message: 08/11/2016, 09h16
  2. Utilisation d'une Procédure Stockée avec BO
    Par kfmystik dans le forum Designer
    Réponses: 2
    Dernier message: 02/12/2008, 10h04
  3. utilisation d'une API java avec du C#, est ce possible
    Par iamspacy dans le forum C++/CLI
    Réponses: 1
    Dernier message: 29/05/2007, 08h00
  4. [Wamp] Utilisation d'une dll VB avec php
    Par Tony_P dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 13/03/2007, 16h32
  5. utilisation d'une progress bar avec un timer
    Par devock dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 22/12/2006, 12h57

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