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: erreur de type "mismatch"


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2017
    Messages : 17
    Par défaut Problème: erreur de type "mismatch"
    Bonjour à tous,

    Lors de l'execution d'une macro sous VBA, je reçois le message d'erreur "Runtime Error Type Mismatch" mais ne parviens pas à en trouver la cause.

    Auriez-vous une idée de ce qui pourrait causer ce problème ?

    Merci

    Voici le code 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
    Sub suite()
     
    Worksheets("Fev-18 PF").Activate
    nb_lignes = Worksheets("Fev-18 PF").Range("A1").End(xlDown).Row
     
     
    For i = 2 To nb_lignes
     
        If Worksheets("Onglet central - hors PV=0").Range("O" & i).Value <> 0 And Worksheets("Fev-18 PF").Range("I" & i).Value < 5 Then
        x = Worksheets("Fev-18 PF").Range("J" & i).Value
        y = Worksheets("Onglet central - hors PV=0").Range("O" & i).Value
        Worksheets("Fev-18 PF").Range("J" & i).Value = x / y
        End If
     
    Next i
     
    End Sub

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    On suppose (puisque tu ne le dis pas) que tu as le problème sur la ligne 12. Vérifie que x et y sont bien des valeurs numériques.

    au delà de ça, on pourrait réaliser cela par formule. Y-a-t'il un intérêt particulier à réaliser cela par vba?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #3
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Salut,
    Je rejoins Pierre et n'interviens que pour ajouter : de l'importance de systématiquement déclarer ET typer chacune des variables.
    Bonne suite!

  4. #4
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2017
    Messages : 17
    Par défaut
    Merci beaucoup pour vos réponses.

    Le problème se situe en ligne 13 (pardon pour l'oubli) et j'ai bien vérifié que mes données étaient de type numérique sur Excel.

    En effet, cela peut facilement se faire par formule, mais la macro que je vous ai isolé plus haut est en fait intégrée à une procédure plus complète, c'est pourquoi j'ai privilégié l'utilisation de VBA.

    Merci Pijaku, j'ai rectifié cela.

    Cependant le problème persiste.

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Sur la ligne 13 End If, j'ai des doutes.

    Type Mismatch (erreur 13) survient, notamment, lorsque tu utilises des variables qui n'ont pas les types adéquats lors d'un traitement.

    Nom : 2018-05-03_195802.png
Affichages : 1843
Taille : 7,0 Ko

    Dans la mesure où il n'y a à mon avis que ta division qui peut poser un problème de ce type, j'ai identifié que x et/ou y ne sont pas numériques.

    Comment as-tu vérifier que tes valeurs sont correctes? Comportent-elles des décimales? Si oui, quel séparateur? As-tu vérifié leur type dans Excel ou dans VBA? Dans la mesure où c'est dans VBA que tu as le problème, il me semble logique que ce soit dans VBA que tu vérifies que tes variables sont bien numériques.

    Je rejoins Franck (nous nous rejoignons donc... ) sur le typage des variables, qui passe par leur déclaration (un option explicit en début de module et une déclaration explicite dans la procédure). Cela permet de bloquer si tu essaies de passer autre chose à une variable qu'une valeur du même type qu'elle. Ici, pour l'exemple, je déclare x et y en double, mais il y a d'autres types numériques.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dim x as double, y as double
    Méfie-toi de VBA qui est très permissif et assigne le type qui correspond à la valeur passée lors de la première affectation d'une valeur à une variable non déclarée.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

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