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 :

[E-03] modifier un range dans un module


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 153
    Par défaut [E-03] modifier un range dans un module
    bonjour

    dans une feuille , je fais des , cela fonctionne très bien

    mais pas moyen de faire la même chose dans un module

    si je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ligne = ActiveWorkbook.Sheets("maFeuille").Range("B5")
    ou
    je récupère bien le contenu

    mais impossible de faire le chemin inverse
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveWorkbook.Sheets("maFeuille").Range("B5")  = "test"

    merci d'avance

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Dis-nous ce que tu veux obtenir qu'on ait une idée sur la difficulté que tu rencontres... Par exemple, dans la ligne suivante, qu'attends-tu dans ligne
    ligne = ActiveWorkbook.Sheets("maFeuille").Range("B5")
    Enfin, tu parles bien des modules de VBA ?
    Bref, je n'ai rien compris à ton problème (et apparemment je ne suis pas le seul )

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 153
    Par défaut
    pour résumer je souhaite pouvoir faire

    dans un module(function), mais le code s'arrête

    alors que dans un microsoft excel objets, cela fonctionne tres bien

    les autres lignes étaient juste des exemples de ce qui fonctionnent

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Bon, alors qu'appelles-tu Module ? Un procédure (fonction ou macro) ? Où se trouve cette ... procédure ? Dans la feuille de code de la feuille de calculs ou dans un module standard ?
    Je crois avoir compris mais dans le doute...
    Tu dis

  5. #5
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 153
    Par défaut
    dans mon vbaproject, il y a les microsoft excel objets qui correspond au événement de chaque feuille et en dessous un répertoire modules

    dans un module, j'ai une function test

    et cette function je l'appelle dans la feuille excel en faisant

    et j'aimerais pour faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function test()
    Range("B5") = "test"
    End Function
    bien évidement, ceci est un exemple

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Bref, tu veux faire appel à une fonction récursive dont on ne sort jamais ? Parce que c'est ce que je comprends
    Bon, je vais laisser la place à "d'autres"
    Désolé

  7. #7
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 153
    Par défaut
    elle est appelé quand on la demande

    elle fait juste puis s'arrête ...

  8. #8
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Une fonction est faite pour renvoyer "quelque chose". Là, tu demandes à ta fonction d'écrire dans une cellule, non de renvoyer une donnée.
    Je crois bien avoir vu passer la solution pour, depuis une fonction de feuille, exécuter une macro qui pourrait, elle, faire ce que tu demandes. Sans certitude.
    Maintenant, attention "test" (je sais que c'est exemple mais...) est une fonction d'Excel. En écrivant "=Test" dans une cellule, il est clair que, pour Excel, il manque quelque chose (!)
    Remplace test par blurp ou Gasp mais n'utilises pas test

    Je regarde si je trouve quelque chose pour ton pb.

  9. #9
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 153
    Par défaut
    oui en réalité ce n'est pas test, et ma fonction renvoie une valeur qui s'inscrit dans la case où la fonction est appelé

    mais j'aimerai pouvoir stocker aussi une valeur qui est calculé dans cette fonction et la stocker dans une cellule pour pouvoir l'utiliser ultérieurement

    j'ai aussi essayé quelque chose comme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("maFeuille").Cells(5, 2).Value = "test"
    mais rien

  10. #10
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Effectivement, depuis une fonction tu ne peux pas faire ce que tu demandes. Mais il me semble qu'il y a malgré tout une solution. Je teste un truc et je reviens.
    A+

    Edit
    Pas trouvé de solution. Il me semble cependant qu'un modérateur avait donné une solution... Reste plus qu'à attendre qu'il passe par là

  11. #11
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 153
    Par défaut
    j'ai cherché et regardé beaucoup de sujet contenant range et module mais rien

  12. #12
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Ce n'est pas une question de range ou de module.

    Une fonction, appelée depuis une formule de cellule, ne peut modifier le contenu de la feuille.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  13. #13
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Merci Alain. Il me semble que nous avions déjà discuté de ce problème et qu'une solution "détournée" avait été proposée. Je n'arrive pas à retrouver le Thread (au moins pour vérifier que je ne me trompe pas)

  14. #14
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    J'ai, moi-même, cherché à contourner cette limitation.
    N'y suis pas arrivé.

    Ce qui ne veut pas dire que ce n'est pas possible.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  15. #15
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Une solution de rechange :
    Dans la feuille de calculs Feuil1 :
    - Un bouton de la boîte à outils Contrôles
    - Dans la cellule C3, la formule "=LaFunction()"
    Dans la feuille de code de la feuil1 (-> Editeur VBA -> 2 clics sur le nom de la feuille)
    - Le code du bouton (2 clics sur le bouton en mode création)
    - La procédure Worksheet_Calculate
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub CommandButton1_Click()
        test
    End Sub
     
    Private Sub Worksheet_Calculate()
        Range("B5") = Range("$C$3").Value
    End Sub
    Dans un module standard,
    - La fonction
    - La Macro Test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Function LaFunction()
    LaFunction = Worksheets("Feuil2").Range("A1").Value
    End Function
     
    Sub test()
        Worksheets("Feuil2").Range("A1") = InputBox("saisir n'importe quoi")
        Application.CalculateFull
    End Sub
    Le bouton exécute la macro Test
    La macro test charge une valeur dans la cellule A1 de feuil2
    La Fonction Worksheet_Calculate opère la mise à jour des données
    - Lafunction (qui fait référence à A1 de Feuil2) change la valeur de la cellule C3 de feuil1, qui la contient
    - Affecte à B5 la valeur de C3

    En espérant que ça puisse te convenir
    Bonne nuit

  16. #16
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 153
    Par défaut
    merci je vais essayer

Discussions similaires

  1. [AC-2003] Est-il possible de modifier en vba des données contenues dans un module ?
    Par elgordopresto dans le forum Access
    Réponses: 2
    Dernier message: 22/01/2015, 12h46
  2. Modifier un formulaire dans un module OpenERP
    Par siwawa dans le forum Odoo (ex-OpenERP)
    Réponses: 1
    Dernier message: 20/03/2014, 00h22
  3. [PHP 5.3] modifier Range dans une requête GET HTTP
    Par moukit233 dans le forum Langage
    Réponses: 2
    Dernier message: 18/10/2012, 17h41
  4. Find Range dans module de classe
    Par ylemasson dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/10/2011, 11h45
  5. [1.x] modifier l'ordre des champs dans un module admin-generator
    Par belgacem.tlili dans le forum Symfony
    Réponses: 8
    Dernier message: 12/08/2010, 10h25

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