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

Excel Discussion :

.SpecialCells(xlCellTypeLastCell).Address : résultat différent selon comment le code est lancé


Sujet :

Excel

  1. #1
    Membre expérimenté
    Homme Profil pro
    Développeur VBA
    Inscrit en
    Avril 2017
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur VBA
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2017
    Messages : 122
    Par défaut .SpecialCells(xlCellTypeLastCell).Address : résultat différent selon comment le code est lancé
    Bonjour


    Pour information, j'ai un souci ressemblant avec le renseignement d'une formule matricielle. Peut-être que la raison est la même, mais ce n'est pas certain : https://www.developpez.net/forums/d2.../#post11843870


    Dans un nouveau classeur, j'ai tapé un texte quelconque en D6 du seul onglet du classeur. Mon but est de retrouver la dernière ligne utilisée du classeur : 6.

    Je constate un résultat différent que je ne m'explique pas selon que le même code [SpecialCells(xlCellTypeLastCell).Address] est lancé directement depuis l'éditeur VBE ou depuis une formule dans une cellule qui lance la même fonction.
    De ce que je comprends, l'instruction "SpecialCells(xlCellTypeLastCell)" n'est pas prise en compte suite à un appel par formule, ou je m'en sers mal / je n'ai pas compris quelque chose.



    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
    Sub sAdresseB2(sComment As String)
        sComment = Right(Space(25) & sComment, 25)
        Debug.Print sComment & "  --->  " & "B2=>" & Range("B2").SpecialCells(xlCellTypeLastCell).Address & _
            "  -  usedRange=>" & Format(Range("B2").Parent.UsedRange.SpecialCells(xlCellTypeLastCell).Address, "!@@@@@@@@@@") & _
            "  -  cells=>" & Range("B2").Parent.Cells.SpecialCells(xlCellTypeLastCell).Address
    End Sub
     
    Function fAdresseB2(sComment As String) As Long
        Call sAdresseB2(sComment)
    End Function
     
    Sub test()
        Call sAdresseB2("procedure VBA")                             ' OK, la dernière cellule est bien évaluée -> lancement depuis le code
        Call fAdresseB2("lancé par fonction VBA")                    ' OK, appeler la fonction depuis le code fonctionne aussi
        Range("C3").Formula = "=fAdresseB2(""lancé par formule"")"   ' KO, appeler la fonction depuis une formule dans une cellule
    End Sub
    Dans la fenêtre d'exécution du VBE, voici ce que j'ai tapé et obtenu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ?Application.Version
    16.0
    call test
                procedure VBA  --->  B2=>$D$6  -  usedRange=>$D$6        -  cells=>$D$6
       lancé par fonction VBA  --->  B2=>$D$6  -  usedRange=>$D$6        -  cells=>$D$6
            lancé par formule  --->  B2=>$B$2  -  usedRange=>$C$3:$D$6   -  cells=>$1:$1048576
    ?Range("B2").SpecialCells(xlCellTypeLastCell).row + Range("B2").SpecialCells(xlCellTypeLastCell).rows.Count -1
     6
    Dans le cas ou le code est lancé par une formule, j'imagine bien qu'il est possible de faire la somme du numéro de ligne de la première cellule du usedRange et d'y ajouter le nombre de ligne du usedRange -1. Je trouve cela bien lourd.

    Quelqu'un sait-il m'expliquer comment je peux obtenir le bon numéro de dernière ligne (6) lorsque la fonction est lancée depuis la formule d'une cellule ?
    Quelqu'un peut-il m'expliquer la logique des 3 lastCell.address lorsque la fonction est lancée depuis une formule dans une cellule ?

  2. #2
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Bonjour,

    Il faut mettre ta fonction dans un module.

  3. #3
    Membre expérimenté
    Homme Profil pro
    Développeur VBA
    Inscrit en
    Avril 2017
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur VBA
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2017
    Messages : 122
    Par défaut
    Bonjour

    Oui, les fonctions et procédures sont dans un module, j'ai tenté aussi d'ajouter public en tête de ligne de déclaration des fonctions et procédures.

Discussions similaires

  1. [XL-2016] Résultat différent avec code modifié
    Par Eric26 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 23/05/2018, 16h27
  2. Réponses: 5
    Dernier message: 30/06/2015, 14h14
  3. Code identique, résultats différents
    Par chalme dans le forum Langage
    Réponses: 2
    Dernier message: 13/06/2012, 09h56
  4. Réponses: 12
    Dernier message: 20/03/2009, 16h06
  5. Réponses: 3
    Dernier message: 28/08/2008, 10h47

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