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

OpenOffice & LibreOffice Discussion :

Macro utilisée comme formule


Sujet :

OpenOffice & LibreOffice

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Novembre 2022
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Novembre 2022
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Macro utilisée comme formule
    Bonjour à tous,

    Je cherche à faire des sommes conditionnelles de cellules provenant d'un nombre de pages variables d'un classeur.

    Par exemple, obtenir la somme des cellules B1 de l'ensemble des feuilles du classeur dont la cellule A1 répond à un critère donné (A1>0).

    Le nombre de feuilles du classeurs est amené à varier très régulièrement.

    J'ai donc essayé de construire une fonction codée comme macro, avec l'idée:

    Somme_feuilles_actives(Cellule de la feuille ou se trouve la condition à vérifier, valeur à laquelle comparer ce critère, référence de la cellule à ajouter à la somme)

    Par exemple, la formule, =Somme_feuilles_actives("A1","oui","C1"), renverrait la somme des cellules C1 des feuilles du documents dont la cellule A1 contient la valeur "oui".

    Ce qui m'a donné:

    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
    22
    23
    24
    25
    26
    27
     
    Function Somme_feuilles_actives(cellcritere as String, critere as string, celltoadd as String)
     
    Dim LaSomme as Double
    Dim Ensemble_Feuilles
    Dim oFeuille
    Dim ocellule
    Dim ocellule2
    Dim i As integer
     
    Ensemble_Feuilles=ThisComponent.getSheets()
     
    For i=0 to Ensemble_Feuilles.getCount()-1
     
    	oFeuille=Ensemble_Feuilles.getbyindex(i)
    	ocellule=oFeuille.getCellRangeByName(cellcritere)
     
    	if ocellule.getString()=critere then
    		ocellule2=oFeuille.getcellrangebyname(celltoadd)
    		LaSomme = LaSomme + ocellule2.getValue()
    	endif
     
    Next
     
    Somme_feuilles_actives=LaSomme
     
    End Function
    Jusque là, pas de problème, j'ai galéré un peu mais mon code fonctionne.

    Par contre lorsque je cherche à m'en servir comme fonction, je m'aperçois que les valeurs des cellules dans lesquelles j'ai utilisé cette fonction ne se mettent à jour que lorsque je viens intervenir manuellement sur leur contenu, mais pas du tout lorsque les valeurs des feuilles cibles changent.

    Comment faire pour que cette formule se comporte comme un formule standard de Libre Office et laisse les cellules se valoriser automatiquement ?

    Une idée?

    En vous remerciant pour vos conseils,

  2. #2
    Membre averti Avatar de Amélie Ladoque
    Inscrit en
    Novembre 2004
    Messages
    264
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 264
    Points : 327
    Points
    327
    Par défaut
    Sans voir le document servant à cette macro, je ne vois pas ce qu'on pourrait vous répondre.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Novembre 2022
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Novembre 2022
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Malheureusement, je ne peux pas vous joindre le fichier sur lequel je travaille.

    Cela dit, je ne pense pas qu'il y ait besoin de mon fichier pour comprendre mon souci.

    Simplement, sans utiliser "Recalculer" ou la touche fonction F9, la valeur de la cellule utilisant ma fonction ne se met pas à jour.

    Sur Excel, la solution était de déclarer "Application.Volatile" en début de fonction, mais cela ne fonctionne pas sur Libre Office.

    Je cherche toujours une solution, si certains ont une idée...

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    273
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 273
    Points : 373
    Points
    373
    Par défaut Application.Calculation = xlAutomatic
    Application.Calculation = xlAutomatic

  5. #5
    Membre averti Avatar de Amélie Ladoque
    Inscrit en
    Novembre 2004
    Messages
    264
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 264
    Points : 327
    Points
    327
    Par défaut
    Citation Envoyé par eloxford Voir le message
    Malheureusement, je ne peux pas vous joindre le fichier sur lequel je travaille.
    Bien sûr on ne réclame jamais le vrai document.
    C'est à vous de fabriquer quelque chose de dépersonnalisé qui permette de reproduire.



    Citation Envoyé par eloxford Voir le message
    Cela dit, je ne pense pas qu'il y ait besoin de mon fichier pour comprendre mon souci.
    Vous pensez mal dans ce cas.
    Si c'était si simple, vous auriez eu une solution depuis le temps.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    273
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 273
    Points : 373
    Points
    373
    Par défaut Application.Calculation = xlAutomatic
    Bonsoir,
    Dans la macro il faut déclarer Application.Calculation = xlAutomatic pour rendre le calcul automatique
    Cordialement

  7. #7
    Membre averti Avatar de Amélie Ladoque
    Inscrit en
    Novembre 2004
    Messages
    264
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 264
    Points : 327
    Points
    327
    Par défaut
    Citation Envoyé par mach1974 Voir le message
    il faut déclarer Application.Calculation = xlAutomatic pour rendre le calcul automatique
    C'est du VBA, ça ne marchera pas avec Calc.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    273
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 273
    Points : 373
    Points
    373
    Par défaut si si
    VBA fonctionne avec CALC depuis longtemps

  9. #9
    Membre averti Avatar de Amélie Ladoque
    Inscrit en
    Novembre 2004
    Messages
    264
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 264
    Points : 327
    Points
    327
    Par défaut
    Nom : capture.png
Affichages : 261
Taille : 57,1 Ko

  10. #10
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 073
    Points : 9 521
    Points
    9 521
    Par défaut
    Hello,
    je n'ai peut-être pas tout compris mais il me semble qu'il n'y a pas besoin de code basic pour faire ce qui est demandé, une simple formule suffit. Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(A1="oui";SOMME(Feuille1.C1:Feuille3.C1);0)
    Si la cellule A1 est égale à oui on fait la somme des cellules C1 de toutes les feuilles de Feuille1 à Feuille3 sinon on met 0
    Nom : testEloxford.gif
Affichages : 242
Taille : 71,9 Ko

    Sachant que dans la cellule C1 de la feuille2 il y a 2 et dans la cellule de la feuille3 il y a 5

    Ami calmant, J.P

  11. #11
    Membre du Club
    Homme Profil pro
    Chef d'entreprise
    Inscrit en
    Octobre 2016
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef d'entreprise

    Informations forums :
    Inscription : Octobre 2016
    Messages : 41
    Points : 64
    Points
    64
    Par défaut
    Bonjour.
    Citation Envoyé par eloxford Voir le message
    Sur Excel, la solution était de déclarer "Application.Volatile" en début de fonction, mais cela ne fonctionne pas sur Libre Office.
    Je cherche toujours une solution, si certains ont une idée...
    Tu peux utiliser la fonction de cellule . Elle a la particularité de s'actualiser à chaque fois que le classeur est modifié. Il y a de fortes chances (je n'ai pas testé) que cela force la réévaluation des formules.
    De mémoire cela fonctionne aussi lorsqu'elle est utilisée comme formule nommée et passée en argument à ta fonction codée.
    A+

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/03/2022, 19h40
  2. utiliser comme variable le resultat d'une formule
    Par macduss dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 10/02/2010, 11h02
  3. [CR 9] Utilisation des formules
    Par Joleroy dans le forum Formules
    Réponses: 9
    Dernier message: 13/09/2004, 08h11
  4. Macro utilisant une macro...
    Par Gogoye dans le forum C
    Réponses: 2
    Dernier message: 29/10/2003, 14h22
  5. Réponses: 3
    Dernier message: 19/07/2002, 15h01

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