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 :

XL-2010 Erreur - Propriété ou méthode non gérée par cet objet


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    acheteur
    Inscrit en
    Mai 2023
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : acheteur
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2023
    Messages : 4
    Points : 4
    Points
    4
    Par défaut XL-2010 Erreur - Propriété ou méthode non gérée par cet objet
    Bonjour
    Je débute sur VBA, je maitrise mal la syntaxe et j’ai du mal à réaliser un code assez simple.
    A l’aide de ce forum et de l’enregistreur, j’ai créé un code qui a pour objet :
    1. à partir du classeur ouvert, d’en ouvrir un second : OK
    2. de recherche dans une colonne la dernière cellule vide puis d’y affecter une valeur égale à N+1 par rapport à la valeur précédente : OK
    3. de copier – coller cette valeur ainsi affectée, dans mon classeur d’origine : KO
    Mon code bloque sur cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HADDOCK.Sheets("Projet").Range("B15").FormulaR1C1 = BDD.Sheets("BDD").ActiveCell.Offset(0, 0).Value
    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
    20
    21
    Sub Enregistrer_Projet()
    ' cette macro ouvre le classeur BDD, affecte un numéro de chrono N+1 par rapport au précédent, 
    ' puis enregistre et referme BDD et colle dans le fichier depuis lequel la macro s'exécute, le numéro de chrono ainsi attribué.
    
    Dim BDD As Workbook, HADDOCK As Workbook
    Set HADDOCK = ThisWorkbook
    
        Workbooks.Open Filename:= _
            "G:\dse\1 - DAT GHT 49\SI ACHATS\OUTIL LOCAL\HADDOCK BASE DE DONNEES.xlsx"
        Range("A1").Select
    
    Set BDD = ActiveWorkbook
        BDD.Sheets("BDD").Cells(Rows.Count, 1).End(xlUp)(2).Select
        ActiveCell.Offset(0, 0).FormulaR1C1 = ActiveCell.Offset(-1, 0) + 1
        
        HADDOCK.Sheets("Projet").Range("B15").FormulaR1C1 = BDD.Sheets("BDD").ActiveCell.Offset(0, 0).Value
    
        ActiveWorkbook.Save
        ActiveWindow.Close
        HADDOCK.Save
    End Sub
    Pourriez-vous m’aider et m’expliquer la cause de l’erreur ?
    Merci.

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 594
    Points : 34 263
    Points
    34 263
    Par défaut
    Salut,

    FormulaR1C1 s'attend à recevoir une formule, donc une chaîne de caractères qui débute par le signe "=".

    Est-ce bien ton cas ?
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Candidat au Club
    Homme Profil pro
    acheteur
    Inscrit en
    Mai 2023
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : acheteur
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2023
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par Jean-Philippe André Voir le message
    FormulaR1C1 s'attend à recevoir une formule, donc une chaîne de caractères qui débute par le signe "=".
    Est-ce bien ton cas ?
    Ah ben non en effet. Dans ActiveCell.Offset(-1, 0) + 1 il y a simplement un nombre entier positif qui se met dans ma cellule dans la ligne de code précédente : ActiveCell.Offset(-1, 0) + 1

    Par quoi puis-je remplacer FormulaR1C1 ?

  4. #4
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2022
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Octobre 2022
    Messages : 685
    Points : 1 156
    Points
    1 156
    Par défaut
    Bonjour,

    Activecell n'est pas un membre de WorkSheet mais de Application (il y a une cellule active pour la session Excel). Donc effectivement la propriété ActiveCell n'est pas gérée par l'objet BDD.Sheets("BDD").

    Après on sent bien effectivement un manque de maîtrise

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set HADDOCK = ThisWorkbook
    ne sert à rien. ThisWorkBook est un objet WorkBook tout à fait honorable et peut être manipulé en tant que tel. Il ne bougera pas en cours d'exécution contrairement à ActiveWorkbook. Si tu y tiens tu peux changer son codename et le renommer Haddock dans la fenêtre de propriété mais on ne va peut-être pas tout compliquer du premier coup.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Workbooks.Open Filename:= "G:\dse\1 - DAT GHT 49\SI ACHATS\OUTIL LOCAL\HADDOCK BASE DE DONNEES.xlsx"
    Set BDD = ActiveWorkbook
    peut avantageusement être remplacé par par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set BDD = Workbooks.Open (G:\dse\1 - DAT GHT 49\SI ACHATS\OUTIL LOCAL\HADDOCK BASE DE DONNEES.xlsx")
    qui va faire l'ouverture ET l'affectation de BDD sans risque d'interférence

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        BDD.Sheets("BDD").Cells(Rows.Count, 1).End(xlUp)(2).Select
        ActiveCell.Offset(0, 0).FormulaR1C1 = ActiveCell.Offset(-1, 0) + 1
    Donc tu te places après la dernière cellule remplie de la colone A et tu fais un +1 vs la ligne précédente.
    là 1. il faut éviter d'utiliser les select et active, c'est mal 2. ça tombe bien on réutilise la cellule plus loin on va la stocker dans une range.
    De plus comme tu travailles sur la valeur, on va utiliser value plutôt que formula.
    Accessoirement un offset(0,0) ne sert à rien on se déplace de 0 dans les deux axes, donc autant s'en passer.
    Ça donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        Dim Numero as Range
        Set Numero = BDD.Sheets("BDD").Cells(Rows.Count, 1).End(xlUp)(2)
        Numero.Value = Numero.Offset(-1, 0).Value + 1
        ThisWorkBook.Sheets("Projet").Range("B15").Value = Numero.Value
    Idem pour les active
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        ActiveWorkbook.Save
        ActiveWindow.Close
    maintenant qu'on tient notre classeur par BDD, on oublie tout ce qui est active...
    Pas testé, j'espère qu'il n'y a pas trop de coquilles, je te laisse réassembler tout ça

  5. #5
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2022
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Octobre 2022
    Messages : 685
    Points : 1 156
    Points
    1 156
    Par défaut
    Bonjour Jean-Philippe

    je prends le risque de contredire un modérateur
    FormulaR1C1 s'attend à recevoir une formule, donc une chaîne de caractères qui débute par le signe "="
    Non on peut tout à fait affecter directement une valeur numérique (0, 666, 34+55) ou un string quelconque ("toto") qui seront donc pris comme une value, mais sans provoquer d'erreur.
    Mais effectivement si on affecte "R[-1]C+1" alors qu'on voulait mettre "=R[-1]C+1" on va être déçu ...

  6. #6
    Candidat au Club
    Homme Profil pro
    acheteur
    Inscrit en
    Mai 2023
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : acheteur
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2023
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Ces réponses dépassent mes espérances ! Voilà résolue une macro qui m'a pris la tête cet après-midi.

    Je vous remercie des explications. J'attends une formation débuter en VBA... D'ici là c'est dur !

    Constant

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 10/09/2015, 09h08
  2. erreur 438 : propriété ou méthode non gérée par cet objet
    Par saninx dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 25/08/2015, 13h38
  3. Erreur : propriété ou méthode non gérée par l'objet
    Par Ptikir dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/09/2009, 16h31
  4. Erreur 438 propriété ou méthode non gérée par cet objet
    Par aba_tarn dans le forum VBA Access
    Réponses: 0
    Dernier message: 22/02/2008, 11h30
  5. Erreur:Propriété ou méthode non gérée par cet objet.
    Par nodogeid dans le forum VBA Access
    Réponses: 2
    Dernier message: 22/05/2007, 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