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 :

saisir des formules avec une plage variable de données [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 48
    Points : 28
    Points
    28
    Par défaut saisir des formules avec une plage variable de données
    Bonjour,

    Je dois traiter des données sur une plage avec un nombre de lignes variable.
    Je souhaite intégrer des calculs (moyenne, maxi, centile...) pour exploiter mes données automatiquement (nombreux fichiers et plus de 5000 lignes de données par fichier).
    Mon problème c'est de rentrer ma plage variable dans les formules.
    J'ai nommé ma plage P, mais je ne sais pas quelle syntaxe utiliser pour saisir ma plage dans les formules.
    J'ai retrouvé les formules à partir de l'enregistreur de macro, mais il faut saisir les valeurs de lignes et colonnes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    range("A2").formula = "=average(p)"
    ne fonctionne pas (je recopie de tête, ce n'est peut être pas tout à fait ça, mais c'est l'esprit...).
    Dans ce cas je souhaite faire la moyenne de ma plage p dans la cellule A2.

    Je précise que ma plage est définie par le biais de la première cellule et de la combinaison CTRL + SHIFT + TOUCHE DOWN

    En espérant avoir été assez clair, merci d'avance

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 907
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 907
    Points : 28 882
    Points
    28 882
    Billets dans le blog
    53
    Par défaut
    Bonsoir,
    Si j'ai bien compris, tu souhaites utiliser comme argument, une plage nommée dans une formule ou une fonction.
    La syntaxe pour utiliser une plage nommée comme argument d'une fonction est la même que pour une cellule ou un groupe de cellules.
    Exemple pour une plage nommée 'Janvier'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Sub LaSomme()
     Debug.Print Application.WorksheetFunction.Sum(Range("Janvier"))
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 48
    Points : 28
    Points
    28
    Par défaut
    Bonjour,

    merci pour votre réponse.

    Une question, si la moyenne de la plage p est bien calculée où s'inscrit elle ,
    dans la cellule active de la feuille ?
    J'ai testé ceci mais ça ne fonctionne pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub moyenne()
    Dim p As Range
    Range("b2").Select
     
    Set p = Range(Selection, Selection.End(xlDown))
    Range("b2").Select
        Range(Selection, Selection.End(xlDown)).Select
     
     
     Debug.Print Application.WorksheetFunction.Average(Range("p"))
     
     
     
    End Sub
    Erreur définie par l'application ou par l'objet

    Comment faire pour donner la cellule cible où doit s'inscrire le résultat de la moyenne de la plage ?

    Merci d'avance

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 907
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 907
    Points : 28 882
    Points
    28 882
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Attention on ne parle plus de la même chose. La réponse que j'ai donnée était pour une plage nommée.
    Ce que vous souhaitez ici, c'est de définir une variable objet dont l'adresse de la plage serait calculée dynamiquement.
    Dans ce cas, c'est ce code qu'il faut adopter. (Il est inutile d'utiliser la méthode Select qui de plus ralenti la procédure)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Sub moyenne()
     Dim p As Range
     Set p = Range("b2:b" & Range("b2").End(xlDown).Row)
     Debug.Print Application.WorksheetFunction.Average(p)
    End Sub
    J'ai utilisé dans l'exemple l'instruction Debug.print, mais cela pourrait être MsgBox ou Range("A1") =

    Petite remarque : Il est préférable de définir le classeur et la feuille en plus du range pour éviter des problèmes dans le cas où un autre classeur ou une autre feuille serait actif.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 48
    Points : 28
    Points
    28
    Par défaut
    Bonsoir Corona,

    Je testerai le code demain au bureau.
    En attendant, plusieurs questions.
    Si je veux que la valeur de la moyenne s'inscrive en cellule c5 par exemple, il faut coder ainsi ? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub moyenne()
     Dim p As Range
     Set p = Range("b2:b" & Range("b2").End(xlDown).Row)
     range("c5")= Application.WorksheetFunction.Average(p)
    End Sub

    Dans la définition de la plage P à quoi correspond "b2:b" ?

    Bonne fin de soirée

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 907
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 907
    Points : 28 882
    Points
    28 882
    Billets dans le blog
    53
    Par défaut
    Bonsoir,
    C'est exact pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    range("c5")= Application.WorksheetFunction.Average(p)
    C'est la cellule C5 de la feuille active qui recevra le résultat de la fonction.
    Dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set p = Range("b2:b" & Range("b2").End(xlDown).Row)
    Cela équivaut à dire que p (qui est égal à un Range) = range("B2:B" + nombre de lignes) soit, s'il y a des lignes remplies jusqu'à B8, le résultat sera "B2:B8"
    parce-que Range("b2").End(xlDown).Row) renverra 8
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 48
    Points : 28
    Points
    28
    Par défaut
    Bonjour,

    Je viens de tester, ça fonctionne.

    Merci beaucoup pour le coup de pouce.

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

Discussions similaires

  1. [XL-2007] Realiser un TCD avec une plage variable
    Par TRESOALEX dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 27/04/2013, 00h20
  2. Réponses: 11
    Dernier message: 05/06/2008, 11h04
  3. verrouiller des cellules avec une formule
    Par tomy7 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 11/03/2008, 16h01
  4. Créer un graph avec une plage de donnée variable
    Par nono le golfeur dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 18/06/2007, 17h15
  5. Réponses: 1
    Dernier message: 08/11/2006, 12h16

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