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 :

Incompatibilité de type FormulaLocal [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Janvier 2018
    Messages : 5
    Par défaut Incompatibilité de type FormulaLocal
    Bonjour à tous,

    Je bloque sur un petit problème depuis quelques jours, je pense que la solution est toute bête... J'ai une erreur "Incompatibilité de type" sur ma ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cell.FormulaLocal = "=SOMME.SI.ENS(" & colComptage & ";" & colNature & ";" & Nature & ";" & colSens & ";" & Sens & ";" & colMois & ";" & Mois & ")"
    Voici un extrait de ma macro :
    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
    19
    Dim FL1 As Worksheet, FL2 As Worksheet, Cell As Range, Plage As Range
    Dim Nature As Range, Mois As Range, Sens As Range
    Dim colNature As Range, colMois As Range, colSens As Range, colComptage As Range 
     
    Set FL1 = ThisWorkbook.Sheets("Résultat")
    Set FL2 = ThisWorkbook.Sheets("Traitement")
     
    Set Plage = FL1.Range("D2:M3")
    Set colNature = FL2.Columns("A:A")
    Set colMois = FL2.Columns("D:D")
    Set colSens = FL2.Columns("E:E")
    Set colComptage = FL2.Columns("F:F")
     
    For Each Cell In Plage
    	Set Nature = Cells(1, Cell.Column)
    	Set Mois = Cells(Cell.Row, 2)
    	Set Sens = Cells(Cell.Row, 3)
    	Cell.FormulaLocal = "=SOMME.SI.ENS(" & colComptage & ";" & colNature & ";" & Nature & ";" & colSens & ";" & Sens & ";" & colMois & ";" & Mois & ")"
    Next
    Pour résumer, dans la feuille "Résultat", le tableau permet de calculer le nombre d'évènements par Type/Mois/Sens grâce aux données de la feuille "Traitement".

    Sur la feuille traitement, je prépare la colonne "Mois" pour l'avoir en lettre (je pense pouvoir l'intégré directement dans la macro mais en attendant système D), "Sens" qui récupère le sens de la "Localisation", j'ai crée une colonne "Comptage" pour la formule somme.si.ens.

    Si besoin, le fichier est joint.

    En vous remerciant par avance,

    Iliass
    Fichiers attachés Fichiers attachés

  2. #2
    Membre émérite
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Par défaut
    Bonjour,

    Les balises CODE existent ; il et fort dommage de ne pas les utiliser.

    "colComptage" est un objet Range.
    "FormulaLocal" est une propriété de type String.
    La fonction "SOMME.SI.ENS" prend pour premiers arguments des références à des cellules.

    Pourriez-vous nous expliquez de quelle façon l'interpréteur VBA est censé obtenir une String qui fait référence à un Range alors que lui donner seulement l'objet Range ?

    Pour être plus clair, lorsque vous écrivez :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "=SOMME.SI.ENS(" & colComptage
    VBA l'interprète de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "=SOMME.SI.ENS(" & CStr(colComptage.Value)
    Ne pensez-vous pas qu'il serait préférable de fournir l'adresse de la plage de données plutôt que sa valeur... ?!?

    Cdt

  3. #3
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Janvier 2018
    Messages : 5
    Par défaut
    Tout d'abord, merci du temps accordé et de la réponse, j'ai compris le problème, j'appelle donc la propriété Address des mes variables colXXX qui me renvoie la valeur String représentant la référence de ma plage.


    J'ai donc modifié comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cell.Formula.Local = "=SOMME.SI.ENS(" & colComptage.Address & ";" & colNature.Address & ";" & Nature & ";" & colSens.Address & ";" & Sens & ";" & colMois.Address & ";" & Mois & ")"
    Maintenant, j'ai une erreur 424 Objet Requis =/ Je pense que c'est un problème de colonne "active", la propriété renvoie la valeur de la colonne (A:A par exemple) mais pas de quelle feuille.

    J'ai modifié en utilisant les balises CODE, en effet, c'est dommage de ne pas les utiliser si elles existent !

    Merci

  4. #4
    Membre émérite
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Par défaut
    Sur quelle ligne se produit l'erreur ?

    Difficile de vous aider sans savoir ce que contiennent les cellules auxquelles vous faîtes référence (Nature, Sens et Mois).
    Je suppose qu'il manque des guillemets pour que votre formule soit valide... mais ça pourrait être totalement autre chose

    Cdt

  5. #5
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Janvier 2018
    Messages : 5
    Par défaut
    L'erreur se produit sur la ligne fraichement modifiée après vos remarques (j'ai joint mon fichier avec mon premier message)

  6. #6
    Membre émérite
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Par défaut
    Je n'ouvre pas les fichiers joints lorsque ce n'est pas utile.

    Stockez donc votre formule dans une variable de type String (avant d'essayer de l'implémenter dans FormulaLocal) et affichez-la via une MsgBox (ou faîtes un Debug.Print) puis postez le résultat.

    Un problème possible est que, dans votre boucle For, vous ne spécifiez pas la feuille dans laquelle vous allez chercher vos valeurs : c'est "FL1.Cells" ou "FL2.Cells" ?
    Et j'imagine que ce que vous appelez 'Mois' est une chaîne de caractère. Si c'est bien le cas, il faut ajouter des guillemets autour de cette valeur lorsque vous l'utilisez en tant que critère dans SOMME.SI.ENS. Idem pour les autres critères qui sont des chaînes de caractères.

    Cdt

  7. #7
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Citation Envoyé par iliass-13 Voir le message

    J'ai donc modifié comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cell.Formula.Local = "=SOMME.SI.ENS(" & colComptage.Address & ";" & colNature.Address & ";" & Nature & ";" & colSens.Address & ";" & Sens & ";" & colMois.Address & ";" & Mois & ")"
    Ne mets pas de point entre Formula et Local.
    Remplace
    par

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

Discussions similaires

  1. FormulaLocal incompatibilité de type
    Par shipuden64 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 10/04/2015, 12h11
  2. Message incompatibilité de type
    Par Daniel MOREAU dans le forum Access
    Réponses: 5
    Dernier message: 10/10/2005, 20h57
  3. incompatibilité de type
    Par zooffy dans le forum Access
    Réponses: 2
    Dernier message: 13/06/2005, 15h12
  4. Incompatibilité de types dans un formulaire
    Par ahage4x4 dans le forum ASP
    Réponses: 3
    Dernier message: 03/05/2005, 15h39
  5. [XSD] Incompatibilité des types xs:ID et xs:IDREF ?
    Par Cpt.FLAM dans le forum Valider
    Réponses: 6
    Dernier message: 08/04/2005, 14h54

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