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 :

range de colonne variable dans macros vba [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 4
    Par défaut range de colonne variable dans macros vba
    Bonjour,

    Depuis de nombreux jours je parcours tout les forums possible sur VBA mais je ne trouve pas de réponse à mon problème...

    J'ai une première feuille avec 11 actions avec leurs rendement rangés par colonne et j'aimerai calculer la moyenne des rendements de chaque action en redirigeant les resultats dans un tableau sur une autre feuille où la les actions sont rangées par ligne.

    Pour le moment j'ai le code suivant:

    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
    Public Sub test() 
    Dim moyenne As Double 
    Dim rendement As Range 
    Dim i As Integer, j As Integer 
    Set plage = Range("P5", "Z63") 
     
     
    For i = 1 To 12 
    For j = 1 To 11 
     
    ThisWorkbook.Sheets("feuil1").Cells(5, j).Select 
    Set rendement = Range(Selection, Selection.End(xlDown)) 
    moyenne = WorksheetFunction.Average(rendement) 
     
     
    ThisWorkbook.Sheets("Résultats").Cells(i, 2).Value = moyenne 
     
    Next j 
    Next i 
     
     
    End Sub

    Les résultats s'inserent dans le tableau mais c'est le meme resultat qui est affiché pour les 11 actions..

    Pourriez vous m'aider s'il vous plait, je desespère..

    Cordialement!

  2. #2
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    Bonjour,

    Voici un code qui semble convenir à ta demande.
    Je n'ai pas vu d'utilisation de la plage P5:Z63
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Public Sub test()
    Dim moyenne As Double
    Dim rendement As Range
    Dim i As Integer, j As Integer
        Set plage = Range("P5", "Z63")
        For j = 1 To 11
            ThisWorkbook.Sheets("Feuil1").Cells(5, j).Select
            Set rendement = Range(Selection, Selection.End(xlDown))
            moyenne = WorksheetFunction.Average(rendement)
            ThisWorkbook.Sheets("Résultats").Cells(j, 2).Value = moyenne
        Next j
    End Sub
    Cordialement.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 4
    Par défaut
    merci de ta réponse! malheureusement le code que tu m'as proposé ne marche pas, j'ai un message d'erreur qui s'affiche : erreur d'execution "9" l'indice n'appartient à la selection.

    j'ai essayé ce code pour calculer la moyenne des rendements d'une action, et il marche bien:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Public Sub test()
    Dim moyenne As Double
    Dim rendement As Object
     
    Set rendement = Range("P5", "P63")
    moyenne = WorksheetFunction.Average(rendement)
     
    ThisWorkbook.Sheets("Résultats").Range("B2").Value = moyenne
    End Sub
    mais je n'arrive pas a faire la boucle pour que soit calculée la moyenne des rendements des ttes les actions..
    la liste des rendements commence en P5 jusqu'en Z63 c'est pour ca que j'avais écrit set plage=Range("P5", "Z63")

  4. #4
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    Quel est le nom précis de tes 2 feuilles (il est conseillé d'éviter les accents ou les espaces) ?

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    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 : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Les constantes sont peut-être à modifier
    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
    Option Explicit
    Const shtFromName As String = "Feuil2"
    Const shtDestName As String = "Resultat"
    Const FromStartRow As Byte = 5
    Public Sub test()
     With ThisWorkbook
      Dim shtFrom As Worksheet: Set shtFrom = .Worksheets(shtFromName)
      Dim shtDest As Worksheet: Set shtDest = .Worksheets(shtDestName)
     End With
     Dim addr As String
     Dim LastRow As Long
     Dim moyenne As Double
     Dim i As Integer, j As Integer
      shtFrom.Activate
      For j = 1 To 11
       LastRow = shtFrom.Cells(FromStartRow + 1, j + 1).End(xlDown).Row
       moyenne = WorksheetFunction.Average(shtFrom.Range(Cells(FromStartRow + 1, j + 1), Cells(LastRow, j + 1)))
       With shtDest
       .Range("A" & j) = shtFrom.Cells(FromStartRow, j + 1)
       .Range("B" & j) = moyenne
       End With
      Next j
    End Sub
    [EDIT]
    Je viens de me rendre compte qu'une variable addr trainait par là par erreur et on peut aussi se passer de la variable moyenne
    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
    Option Explicit
    Const shtFromName As String = "Feuil2"
    Const shtDestName As String = "Resultat"
    Const FromStartRow As Byte = 5
    Public Sub test()
     With ThisWorkbook
      Dim shtFrom As Worksheet: Set shtFrom = .Worksheets(shtFromName)
      Dim shtDest As Worksheet: Set shtDest = .Worksheets(shtDestName)
     End With
     Dim LastRow As Long
     Dim i As Integer, j As Integer
      shtFrom.Activate
      For j = 1 To 11
       LastRow = shtFrom.Cells(FromStartRow + 1, j + 1).End(xlDown).Row
       WorksheetFunction.Average(shtFrom.Range(Cells(FromStartRow + 1, j + 1), Cells(LastRow, j + 1)))
       With shtDest
       .Range("A" & j) = shtFrom.Cells(FromStartRow, j + 1)
       .Range("B" & j) = WorksheetFunction.Average(shtFrom.Range(Cells(FromStartRow + 1, j + 1), Cells(LastRow, j + 1)))
       End With
      Next j
    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

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 4
    Par défaut
    j'ai la feuille sur laquelle j'écris mon code "Données" et celle sur laquelle j'aimerais envoyer mes résultats "Résultats"

    j'ai joint mon fichier pour plus de clarté

    edit:merci corona, mais le code ne marche pas..erreur 1004
    Fichiers attachés Fichiers attachés

  7. #7
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    La liste des rendements commence en P5 jusqu'en Z63 (feuille "Données").
    Le code suivant réalise le calcul de la moyenne des rendements des toutes les actions et place les résultats dans la feuille "Résultats".
    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
    Public Sub test()
    Dim Ws1 As Worksheet
    Dim Ws2 As Worksheet
    Dim moyenne As Double
    Dim rendement As Range, MaPlage As Range
    Dim j As integer
        Set Ws1 = Worksheets("Données")
        Set Ws2 = Worksheets("Résultats")
        Set MaPlage = Ws1.Range("P5", "Z63")
        j = 2
        For Each Col In MaPlage.Columns
            moyenne = WorksheetFunction.Average(Col)
            Ws2.Cells(j, 2).Value = moyenne
            j = j + 1
        Next Col
    End Sub
    Cordialement.
    Fichiers attachés Fichiers attachés

  8. #8
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    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 : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Citation Envoyé par Lbn23 Voir le message
    j'ai la feuille sur laquelle j'écris mon code "Données" et celle sur laquelle j'aimerais envoyer mes résultats "Résultats"
    j'ai joint mon fichier pour plus de clarté
    edit:merci corona, mais le code ne marche pas..erreur 1004
    C'est assez étonnant parce-que je teste toujours les codes des réponses que j'envoie.
    Si tu pouvais me dire à quelle ligne à lieu l'erreur, ce serait bien.
    As-tu modifié une ou plusieurs des constantes qui se trouvent en tête de module comme je te l'ai suggéré ?
    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

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

Discussions similaires

  1. [XL-2003] Plage de recherche variable dans macro VBA
    Par CampaSC dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/07/2011, 18h27
  2. colonne variable dans un range
    Par fxleo dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 23/01/2008, 11h57
  3. [Etat]Nombre de colonnes variables dans un état
    Par milou161185 dans le forum IHM
    Réponses: 15
    Dernier message: 27/03/2007, 16h39
  4. Variable dans Requête Vba Access
    Par dorschner dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 31/08/2006, 21h52
  5. [VBA-E] Problème de tableau dans macro VBA
    Par Chouls dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 12/06/2006, 15h20

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