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 :

Plantage de mon code sur #NAME?


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    futur retraité
    Inscrit en
    Février 2016
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : futur retraité

    Informations forums :
    Inscription : Février 2016
    Messages : 40
    Points : 26
    Points
    26
    Par défaut Plantage de mon code sur #NAME?
    Bonjour

    Je suis en train de traiter une feuille XLSX ( issue d'une transformation par PDF2EXCEL2007 depuis de mon relevé bancaire PDF )
    Mon code se plante avec comme message d'erreur :

    'Erreur d'execution '13'
    Incompatibilité de type'

    sur la ligne en gras

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim Cellule as Range
    Dim RibBoolean as Boolean
    Dim Nocompte as String
    ..
    ..
    If Cellule.Offset(0, 0) Like "RIB :" And RibBoolean = False Then
         RibBoolean = True   
         Nocompte = Replace(Cellule.Offset(0, 0), " RIB :", "")
    End If
    Next
    ..
    ..

    Exactement sur la ligne n°138 de la feuille Excel à traiter
    #NOM? ( suivi d'une icône "La formule contient du texte non reconnu" )
    mais sur la barre de formules : "=+GP20131020664564901"

    Meme en remplacant le "=" par "" ( avec cellule.offset(0,0) = Replace(Cellule.offset(0,0),"=","")

    Une piste ?

    Merci et bonne soirée !

  2. #2
    Expert éminent sénior
    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
    Points : 18 677
    Points
    18 677
    Par défaut

    Bonjour, bonjour !

    Aucun rapport avec l'erreur mais Offset(0, 0) ne sert strictement à rien ‼

    C'est comme entrer dans un ascenseur et appuyer sur le bouton de l'étage actuel …

    Comme le code est incomplet, commencer déjà par vérifier le contenu la variable Cellule

    ______________________________________________________________________________________________________
    Je suis Paris, Charlie, Bruxelles, …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  3. #3
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    la valeur de ta cellule est en erreur car elle "ressemble" à une formule faisant référence à la valeur positive d'une zone nommée "GP20131020664564901"
    si tu n'enlèves que le "=", il restera le + ... Excel va donc interpréter ça également comme une formule faisant référence à cette zone nommée qui n'existe pas.

    pour corriger, il faut faire un replace sur "=+" via la propriété .formula :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(1, 1).Formula = Replace(Cells(1, 1).Formula, "=+", "")
    ensuite, il existe la propriété IsError qui te permet de vérifier si une cellule contient une formule en erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox IsError(Cells(1,1).Value)

  4. #4
    Membre habitué
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Décembre 2012
    Messages : 129
    Points : 149
    Points
    149
    Par défaut
    A mon avis =+GP20131020664564901 fait que Excel cherche la valeur de la cellule GP20131020664564901, qui n'existe pas. D'où le #NOM?

    Ensuite dans ton vba, #NOM? n'est pas considéré comme un string ce qui t'empêche de lui appliquer les méthode tel que replace ou like.

    Tu devrais d'ailleurs bien préciser Cellule.value pour ne pas essayer d'appliquer les méthodes citées à un objet range, ce qui n'est pas non plus possible. Vba est "gentil" et comprends que tu veux bien la propriété value de l'objet range, mais je ne sais pas si c'est toujours le cas.

  5. #5
    Expert éminent sénior
    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
    Points : 18 677
    Points
    18 677
    Par défaut

    Non ce n'est pas toujours le cas ! Parfois VBA choisit la propriété Text au lieu de Value

    Certainsi ont séché plusieurs jours tellement persuadés qu'il s'agissait d'un bug et non d'une erreur de leur part !
    C'est vrai le VBA étant tellement permissif et effectuant généralement bien le trans-typage de données …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  6. #6
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Ca fait plusieurs fois en peu de temps que le débat .Value Or Not .Value se présente sur le forum

    Etant partisan du typage systématique, je me range du côté de Marc-L et AlainTech (les derniers contributeurs que j'ai vu défendre l'idée)


    seulement, les détracteurs ont souvent exprimé le souhait d'avoir une exemple

    le voici, pas compliqué quand on a bien compris la différence entre ces deux propriétés (sans parler de .Value2 !) :

    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
    Sub toto()
    Dim i As String
    i = "06000"
     
    With Cells(1, 1)
        .NumberFormat = "00000"
        .Value = i
    End With
     
    MsgBox Cells(1, 1) = i
    MsgBox Cells(1, 1).Value = i
    MsgBox Cells(1, 1).Text = i
    MsgBox Cells(1, 1).Value = Cells(1, 1).Text
     
    End Sub

  7. #7
    Expert éminent sénior
    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
    Points : 18 677
    Points
    18 677
    Par défaut




    Et là tu n'as même pas de plantage, c'est encore plus vicieux !
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    futur retraité
    Inscrit en
    Février 2016
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : futur retraité

    Informations forums :
    Inscription : Février 2016
    Messages : 40
    Points : 26
    Points
    26
    Par défaut
    Bonjour !

    Resolu avec la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Cellule.Formula = Replace(Cellule.Formula, "=+", "")
    ................Merci !

  9. #9
    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
    Citation Envoyé par joe.levrai Voir le message
    Ca fait plusieurs fois en peu de temps que le débat .Value Or Not .Value se présente sur le forum
    Etant partisan du typage systématique, je me range du côté de Marc-L et AlainTech (les derniers contributeurs que j'ai vu défendre l'idée)
    seulement, les détracteurs ont souvent exprimé le souhait d'avoir une exemple
    le voici, pas compliqué quand on a bien compris la différence entre ces deux propriétés (sans parler de .Value2 !) :
    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
    Sub toto()
    Dim i As String
    i = "06000"
     
    With Cells(1, 1)
        .NumberFormat = "00000"
        .Value = i
    End With
     
    MsgBox Cells(1, 1) = i
    MsgBox Cells(1, 1).Value = i
    MsgBox Cells(1, 1).Text = i
    MsgBox Cells(1, 1).Value = Cells(1, 1).Text
     
    End Sub
    Bonjour Joe

    Quoique je sois aussi iun inconditionnel du typage systèmatique, je suis toujours à la recherche d'un cas où Range (seul) ne renvoie pas la propriété .Value.
    Dans cet exemple, Cells(1, 1) et Cells(1, 1).Value renvoient la même chose.
    Ça démontre simplement que .Value et .Text sont différents et surtout que
    lorsqu'on veut affecter une String à une cellule, Edit : au lieu de [il faut impérativement employer .Text] lire : il faut être prudent, et formater la cellule au préalable
    car .Value interprète certaines chaines comme des nombres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub toto()
    Dim i As String
      i = "06000"
      Cells(1, 1).Value = i
      Cells(2, 1).NumberFormat = "@"
      Cells(2, 1).Value = i
      MsgBox "A1 : " & TypeName(Cells(1, 1).Value) & vbCr & _
             "A2 : " & TypeName(Cells(2, 1).Value)
    End Sub
    .
    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

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 07/09/2016, 22h12
  2. [WD-2003] Installation de mon code sur plusieurs documents rapidement.
    Par toniob44 dans le forum VBA Word
    Réponses: 12
    Dernier message: 20/05/2012, 20h36
  3. [Batch] comment mettre mon code sur une seule ligne
    Par fk04 dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 17/03/2010, 13h01
  4. [XL-2003] problème pour executer mon code sur un autre pc
    Par jess59 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 04/06/2009, 09h24
  5. [Système] Exécuter mon code sur un autre site
    Par pas30 dans le forum Langage
    Réponses: 2
    Dernier message: 21/08/2007, 15h49

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