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 :

erreur 13 vba


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mai 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Maroc

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Mai 2018
    Messages : 3
    Par défaut erreur 13 vba
    bonjour

    je sus novice en vba, je suis entrain de faire une macro pour automatiser des calculs mais j'ai l'erreur d'incompatibilité

    le code est le suivant:
    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
     
    Subsolartime1()
    Set myrange= Range("Feuil1!B:J")
    Dim i, j As Integer
    Dim v As Variant
    i = 5
     
     v = "= c[-1]"
     ActiveCell.FormulaR1C1 = v +Application.WorksheetFunction.VLookup(i, myrange, 5, 0) / 60
    Selection.AutoFillDestination:=ActiveCell.Range("A1:A25")
     ActiveCell.Range("A1:A25").Select
     ActiveWindow.SmallScroll Down:=21
     activeCell.Offset(29,0).Range("A1").Select
     ActiveWindow.SmallScroll Down:=-27
    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.

    L'opérateur de concaténation (collage de chaines de caractères) est le signe & et pas le signe + en VBA

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveCell.FormulaR1C1 = v & Application.WorksheetFunction.VLookup(i, myrange, 5, 0) / 60
    "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
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Si une correspondance est trouvée, ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.WorksheetFunction.VLookup(i, myrange, 5, 0) / 60
    retournera un nombre (disons par exemple 1.3245)
    et donc :
    puisque
    FormulaR1C1 sera v & 1.3245, ce qui donne "= c[-1]1.3245"
    Euh ...

  4. #4
    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
    Bonjour Jacques,

    Citation Envoyé par unparia Voir le message
    [...]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.WorksheetFunction.VLookup(i, myrange, 5, 0) / 60
    retournera un nombre (disons par exemple 1.3245)[...]
    ou... une erreur 13 "incompatibilité de type" si VLookup renvoie du texte, par exemple, et c'est cette erreur qui est spécifiée dans le message initial du demandeur...


    Citation Envoyé par unparia Voir le message
    [...]
    FormulaR1C1 sera v & 1.3245, ce qui donne "= c[-1]1.3245"
    Là, je te rejoins à moitié, car le résultat pourrait être un nombre entier et je perçois donc l'intention initiale (reconstituer une adresse R1C1), mais effectivement, la formule serait de toute façon caduque.

    @Aresassociated

    Il serait intéressant que tu nous dises en français (pas en pseudo vba ) ce que tu souhaites obtenir, car je pense que la méthode pourrait être plus simple que celle employée.

    Et puisque tu débute en VBA, n'hésite pas à passer par des variables intermédiaires pour pouvoir facilement vérifier si ton code renvoie le résultat attendu. Par exemple, placer le résultat du VLookup dans une variable te permettra de voir si ton résultat est bien un nombre divisible par 60.
    "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...
    ---------------

  5. #5
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour Pierre
    Peut-être (je me suis laissé avoir par ton premier message, relatif à l'utilisation de l'opérateur & de concaténation) , mais alors, dans ce cas :
    - seule la variable v ( "= c[-1]" ) spécifie l'adresse
    - c'est bien l'opérateur + d'addition et non l'opérateur "&" de concaténation (sinon, la formule n'aurait aucun sens)
    - le résultat retourné par vlookup (entier ou décimal) serait toujours bon (si numérique)

    Mais l'incompatibilité de type dénoncée a en effet probablement pour cause le fait que vlookup tente d'utiliser une cellule ne contenant pas un numérique

  6. #6
    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
    Citation Envoyé par unparia Voir le message
    [...]
    - c'est bien l'opérateur + d'addition et non l'opérateur "&" de concaténation (sinon, la formule n'aurait aucun sens)[...]
    Non, pas dans le code suivant en tout cas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveCell.FormulaR1C1 = v +Application.WorksheetFunction.VLookup(i, myrange, 5, 0) / 60
    L'opérateur + est erroné, puisque v est du texte.

    L'adresse spécifiée dans v est assez étrangement exprimée puisqu'elle exprimer une colonne entière. Ca veut dire que l'on prend la valeur qui se trouve dans la cellule de gauche.

    Bref, sans explications plus détaillées du demandeur sur ce qu'il cherche à réaliser, je ne perds pas mon temps en vaines palabres et supputations
    "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...
    ---------------

  7. #7
    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
    Vu comme cela, je suis d'accord avec toi , et je comprendrais alors mieux la formule qui est recréée. Resterait alors le problème du VLookup car il me semblerait plus intéressant de l'inclure dans la formule et d'éviter la boucle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .formular1c1 = "=c[-1]+vlookup(" & i & ",Feuil1!c2:c10,5,0)/60)"
    Mais avec ces adaptations, le code n'est pas nickel. Il faudrait éviter les activecell, les smallscroll en casdade...

    Bref, j'en reviens à ce que je disais: je préfère attendre le complément d'info du demandeur
    "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...
    ---------------

  8. #8
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Ceci marche (attention : tant la cellule active que celle de destination doivent être en format numérique).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     Dim toto As Integer
     toto = 10
     ActiveCell.FormulaR1C1 = "= c[-1] + " & toto
    Le + doit se trouver dans la chaîne, pas la variable.

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mai 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Maroc

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Mai 2018
    Messages : 3
    Par défaut erreur vba 13
    dans mon code vlookup et v sont des nombres et donc je ne comprends pas la raison de l'erreur. S'il vous plait est ce que quelqu'un pourrait maider

  10. #10
    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
    Dans ton code, v n'est pas un nombre, mais une chaîne (censée représenter une formule).

    Dis-nous ce que tu souhaites réaliser en français, pas en donnant du code qui ne fonctionne pas.

    Que cherches-tu à réaliser avec ton code?
    "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...
    ---------------

  11. #11
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Pardonnez moi d'être encore présent, mais cette discussion présente plusieurs aspects :
    1) l'incompatibilité de type dénoncée :
    Elle est probablement due (comme le signale à juste titre Pierre Fauconnier, à la présence d'une valeur non numérique en colonne de gauche)
    2) La construction de la formule.
    Une formule n'est jamais qu'une chaîne de caractères et DOIT n'être traitée QUE comme telle :
    En respectant ce principe fondamental :
    - l'opérateur "+" (s'il s'agit d'une addition) DOIT être dans une chaîne de caractères
    - le résultat de WorksheetFunction.Vlookup est par contre un numérique et non une chaîne de caractères. Si, dans sa (trop) grande tolérance, CVA/Excel transforme spontanément en chaîne de caractères un numérique entier, il n'en va pas de même en ce qui concerne un décimal. Il convient donc de rester RIGOUREUX et de transposer systématiquement ce résultat en chaîne de caractères (puisqu'il sera une partie d'une chaîne de caractères). Et ceci (ce dernier aspect) : quelle que soit la finalité de la formule.

    Ainsi (exemple où il s'agirait bien d'une opération à effectuer) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim myrange As Range
    Set myrange = Range("Feuil1!B:J")
    Dim i As Integer, j As Integer
    Dim v As String
    Set myrange = Range("Feuil1!B:J")
    i = 5
    et : soit (si l'on veut utiliser la variable tremplin v :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    v = "= c[-1]"
     ......FormulaR1C1 = v & " + " & Str(Application.WorksheetFunction.VLookup(i, myrange, 5, 0) / 60)
    Soit, si l'on veut écrire directement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ......FormulaR1C1 = "= c[-1] + " & Str(Application.WorksheetFunction.VLookup(i, myrange, 5, 0) / 60)
    3) L'étrangeté du choix ainsi fait :
    Une telle formule n'en est pas une à part entière, dans la mesure où l'une de ses deux parties n'est pas elle-même une expression Excel, mais le résultat d'une fonction.
    Pour être plus clair : une fois appliquée, son résultat ne varierait pas si l'on modifiait les valeurs utilisées..
    Sur ce -->> A la pêche (c'est l'heure).

Discussions similaires

  1. erreur fonction vba
    Par ferronimus dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 26/06/2007, 14h14
  2. [VBA] Erreur 2501 VBA
    Par egg3774 dans le forum VBA Access
    Réponses: 3
    Dernier message: 22/06/2007, 14h46
  3. Réponses: 6
    Dernier message: 09/06/2006, 00h19
  4. Traitement d'erreur dans VBA
    Par charleshbo dans le forum VBA Access
    Réponses: 9
    Dernier message: 10/02/2006, 14h03
  5. Récupération d'erreur en VBA
    Par User dans le forum Access
    Réponses: 3
    Dernier message: 13/09/2005, 17h08

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