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 Type Mismatch dans une procédure Find lorsque certaines cellules affichent des erreurs [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Comptable
    Inscrit en
    Mars 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Comptable
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2013
    Messages : 6
    Par défaut Problème Type Mismatch dans une procédure Find lorsque certaines cellules affichent des erreurs
    Bonjour le forum,

    Je me permet de venir ici chez les pros pour poser ma question. Je ne suis pas informaticien, en général j'arrive à résoudre mes problèmes en consultant différents forums mais ici le problème semble plus ardu puisqu'on n'arrive pas à m'aider...

    J'ai une macro qui est censée passer en revue toutes les cellules de différentes sheets (j'ai choisi For Each ... in ActiveWorkbook.Sheets auquel j'ai soustrait certains sheets avec un If Not). A chaque fois qu'elle trouve une occurence, elle copie une cellule de ma sheet "traduction". Le résultat obtenu est que tous les termes sont traduits automatiquement sur base d'une liste de mots (3 colonnes, une par langue).

    Pour cette traduction, on utilise la fonction .Cells.Find().

    Mon problème est que, depuis que j'ai recopié mon code dans mon fichier définitif, j'obtiens une erreur "Run-time error '13': Type mismatch".
    J'ai effectué de nombreux tests. En fait mon code avait été développé dans un fichier séparé où il ne traduisait que 2-3 pages. Il fonctionnait parfaitement.
    Maintenant qu'il doit traduire une quinzaine de pages, ça plante.

    J'ai essayé de trouver sur quelles sheets le problème se passait (car avec le Debug, je n'obtiens rien). Il semblerait que les sheets concernées soient celles qui contiennent des messages d'erreurs:
    - evolution (si on ne fait pas le lien avec Bob-OLE (macro complémentaire faisant le lien entre mon programme de comptabilité et Excel et grâce à laquelle je peux récupérer automatiquement des données). Si la macro complémentaire n'est pas active, elle renvoie un message #NAME?)
    - dividende (idem)
    - tax1 (4 formules renvoie actuellement #DIV/0!) car je n'ai encore rien complété comme données. Division par 0 impossible.
    - tax4 (dans ma colonne AK, il y a une autre division par 0 car les données ne sont pas complétées).

    Lorsque je n'ai pas ces pages contenant des erreurs, la macro fonctionne telle qu'elle est actuellement.

    Pour les divisions par 0, je peux créer un If (... = 0; 0; formule) directement dans Excel pour qu'elles n'affichent jamais de message d'erreur. Par contre, pour le lien avec Bob-OLE, la décision appartient à l'utilisateur de lier ou non le fichier Excel.

    Un utilisateur d'un autre forum m'avait proposé les solutions suivantes:
    • For Each c In Ws.UsedRange _ On Error Resume Next --> ça ne fonctionne pas. Ca me bousille certaines formules en allant y copier du texte. Je ne comprends même pas sur quelle base il copie ou non du texte.
    • Set trouve = Sheet02.Cells.SpecialCells(xlCellTypeConstants).Find(c, lookat:=xlWhole) --> le message d'erreur Type mismatch continue


    Dites-moi que vous avez une idée lumineuse

    Je vous annexe mon fichier de travail. La macro s'appelle traduction() et se trouve dans ThisWorbook.

    Merci d'avance,
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Bonjour

    Si tu ne veux pas traduire les formules

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    For Each c In Ws.UsedRange
    If  c.HasFormula = True Then GoTo suivant

    Si tu préfères vérifier si le résultat dans c est une erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    For Each c In Ws.UsedRange
    If IsError(c) Then GoTo suivant

  3. #3
    Membre du Club
    Homme Profil pro
    Comptable
    Inscrit en
    Mars 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Comptable
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2013
    Messages : 6
    Par défaut
    Citation Envoyé par Docmarti Voir le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    For Each c In Ws.UsedRange
    If  c.HasFormula = True Then GoTo suivant
    Merci Docmarti. En adaptant ton idée de c.HasFormula, j'y suis arrivé. Afin de ne pas trop me compliquer la tâche, j'ai juste inversé la condition:
    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
     
        For Each c In Ws.UsedRange
            If c.HasFormula = False Then
                    If c <> "" Then
                    'méthode find, ici on cherche la valeur exacte (LookAt:xlWhole)
                    Set trouve = Sheet02.Cells.Find(c, lookat:=xlWhole)
     
                    'traitement de l'erreur possible: si on ne trouve pas rien (--> double négative --> revient à dire si on trouve)
                    If Not trouve Is Nothing Then
     
                    'traitement pour le cas pour où la valeur est trouvée
                    'il prend comme valeur la "colf" +1 car il y a un décalage entre le nombre de colonne de ma sheet traductions et le numéro renvoyé dans mon CboLanguage
                    c = Sheet02.Cells(trouve.Row, colf + 1)
                    End If
     
                    'on s'en fout de mettre un message s'il n'a effectivement rien trouvé
                End If
            End If
    Et visiblement ça fonctionne... reste à appeler cette procédure au bon endroit maintenant
    Je vais finir par l'avoir...

    Encore merci pour vos contributions !

  4. #4
    Membre chevronné
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2012
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 214
    Par défaut
    Bonjour
    Est-ce que une solution simple comme
    remplacer ='C:\Users\s.devers\AppData\Roaming\Microsoft\AddIns\BOBExcel.xla'!AccountBalance($A9;D$1;$A$2;1);"")
    par :=SIERREUR('C:\Users\s.devers\AppData\Roaming\Microsoft\AddIns\BOBExcel.xla'!AccountBalance($A9;D$1;$A$2;1);"")

    Peut être envisagé ?

  5. #5
    Membre du Club
    Homme Profil pro
    Comptable
    Inscrit en
    Mars 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Comptable
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2013
    Messages : 6
    Par défaut
    Citation Envoyé par sogedic Voir le message
    Bonjour
    Est-ce que une solution simple comme
    remplacer ='C:\Users\s.devers\AppData\Roaming\Microsoft\AddIns\BOBExcel.xla'!AccountBalance($A9;D$1;$A$2;1);"")
    par :=SIERREUR('C:\Users\s.devers\AppData\Roaming\Microsoft\AddIns\BOBExcel.xla'!AccountBalance($A9;D$1;$A$2;1);"")

    Peut être envisagé ?
    Oui, je vais l'intégrer. Comme le IF pour les divisions par 0.

    Merci

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 26/04/2014, 19h04
  2. ALTER TABLE sur un champ de type SET dans une procédure
    Par flaplante dans le forum Requêtes
    Réponses: 2
    Dernier message: 17/08/2006, 04h40
  3. Réponses: 1
    Dernier message: 20/07/2006, 17h03
  4. Réponses: 4
    Dernier message: 16/12/2005, 16h25
  5. Problème Alter view dans une procédure stockée
    Par adjava dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 20/07/2005, 17h45

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