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 :

FormulaR1C1 - Erreur définie par l’objet ou l’application


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier Avatar de Tchicken
    Homme Profil pro
    Responsable d'exploitation informatique
    Inscrit en
    Août 2017
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Responsable d'exploitation informatique

    Informations forums :
    Inscription : Août 2017
    Messages : 108
    Points : 85
    Points
    85
    Par défaut FormulaR1C1 - Erreur définie par l’objet ou l’application
    Bonjour à tous,

    j'essaie de charger une cellule avec une formule :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("PronoStyleValeur").Cells(3, 37).FormulaR1C1 = "=SI(OU(R3=AB3;R3=AC3);SI(AK3>0;AK3-3;0);0)"
    La formule fonctionne très bien si je la saisie directement dans la cellule, mais lors du chargement en VBA, j'ai le message suivant :
    "Erreur définie par l’objet ou l’application"

    D'avance merci de votre aide, Tchicken.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Tchicken Voir le message
    Bonjour,

    AK3 correspond à Cells(3,37), vous avez une référence circulaire dans votre formule. Pour vérifier, placez vous en AK3, et évaluez la formule dans le menu Formules.

    Sinon, à partir de la fenêtre exécution Ctrl-G, si votre formule est en place en AK3, tapez la formule suivante dans la fenêtre exécution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ?activecell.FormulaR1C1
    Vous obtiendrez :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    =IF(OR(RC[-19]=RC[-9],RC[-19]=RC[-8]),IF(RC>0,RC-3,0),0)

  3. #3
    Rédacteur/Modérateur


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 128
    Points : 55 940
    Points
    55 940
    Billets dans le blog
    131
    Par défaut
    Salut.

    Indépendamment des remarques d'Eric (je n'ai pas regardé la formule en elle-même), FormulaR1C1 nécessite que la formule soit exprimée en anglais. Si tu veux l'exprimer en français tu dois utiliser FormulaR1C1Local. C'est cette erreur qui provoque l'arrêt du code avec le message renseigné.

  4. #4
    Membre régulier Avatar de Tchicken
    Homme Profil pro
    Responsable d'exploitation informatique
    Inscrit en
    Août 2017
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Responsable d'exploitation informatique

    Informations forums :
    Inscription : Août 2017
    Messages : 108
    Points : 85
    Points
    85
    Par défaut
    Merci à vous deux, j'ai suivi vos instructions, mais quelque chose m'échappe encore :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("AQ3").FormulaR1C1Local = "=SI(H3>0;SI(OUX(ET(R3=AB3;OUX(AC3=S3;AC3=U3;AC3=W3;AC3=Y3));ET(R3=AC3;OUX(AB3=S3;AB3=U3;AB3=W3;AB3=Y3)));AK3-3;-3);0)"
    en éclaté pour un meilleure compréhension :

    Code formule : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    =SI(H3>0;
        SI(
            OUX(
                ET(R3=AB3;
                    OUX(AC3=S3;AC3=U3;AC3=W3;AC3=Y3)
                    );
                ET(R3=AC3;
                    OUX(AB3=S3;AB3=U3;AB3=W3;AB3=Y3)
                    )
                )
            ;AK3-3
            ;-3
            )
        ;0
        )

    Je ne vois pas de référence circulaire, mais y'a encore quelque chose qui gêne Excel.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Tchicken Voir le message
    Je ne vois pas de référence circulaire
    Dans votre premier message la cellule Cells(3,37) est la même chose que AK3.

  6. #6
    Rédacteur/Modérateur


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 128
    Points : 55 940
    Points
    55 940
    Billets dans le blog
    131
    Par défaut
    Il faut:
    • soit travailler avec FormulaR1C1 et construire la formule avec les références R1C1(*);
    • soit travailler avec Formula et construire la formule avec les références A1.



    Ici, tu utilises .FormulaR1C1Local, mais tu passes les références en A1. Tu dois alors utiliser .Formula.


    (*) Perso, quand je peux éviter, j'évite, car en Excel, on utilise beaucoup plus souvent A1 que R1C1, et je trouve donc qu'il est plus facile de réfléchir avec le même adressage en VBA.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Tchicken Voir le message
    Visiblement, vous n'utilisez pas la méthode pour convertir une formule via la fenêtre exécution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
         With ActiveSheet.Range("AQ3")
              .FormulaR1C1Local = "=SI(LC(-35)>0;SI(OUX(ET(LC(-25)=LC(-15);OUX(LC(-14)=LC(-24);LC(-14)=LC(-22);LC(-14)=LC(-20);LC(-14)=LC(-18)));ET(LC(-25)=LC(-14);OUX(LC(-15)=LC(-24);LC(-15)=LC(-22);LC(-15)=LC(-20);LC(-15)=LC(-18))));LC(-6)-3;-3);0)"
          End With

  8. #8
    Membre régulier Avatar de Tchicken
    Homme Profil pro
    Responsable d'exploitation informatique
    Inscrit en
    Août 2017
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Responsable d'exploitation informatique

    Informations forums :
    Inscription : Août 2017
    Messages : 108
    Points : 85
    Points
    85
    Par défaut
    Merci monsieur Fauconnier, c'est plus facile et plus clair pour moi avec FormulaLocal
    Merci monsieur Kergresse, j'ai bien progressé avec vous deux.

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

Discussions similaires

  1. [XL-2010] VBA : Erreur d’exécution ‘1004’ : Erreur définie par l’application ou par l’objet
    Par Beauchamp_J dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 30/04/2018, 16h42
  2. Réponses: 2
    Dernier message: 20/10/2009, 17h59
  3. Réponses: 2
    Dernier message: 28/10/2008, 10h30
  4. [VBA-E]erreur définie par l'application ou par l'objet
    Par vivelesgnous dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 15/02/2006, 15h51

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