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 :

Moyenne de tableaux en VBA


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2017
    Messages : 38
    Par défaut Moyenne de tableaux en VBA
    Bonjour à tous !

    Voila je débute vraiment en VBA et je viens vers vous car j'aimerai améliorer un programme et la je ne vois vraiment pas comment faire :

    J'ai un tableau sur chaque feuille et j'aimerai recopier en page 7 la moyenne des tableaux des feuilles précédentes .

    En gros j'aurais en D2 de ma feuille 7 la moyenne de tout les D2 des feuilles précédentes ... j'ai bidouillé 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
    23
    24
    25
    26
    27
     
    Sub moy_tab()
     
    Dim Sh As Worksheet
     
        reponse = InputBox(Prompt:=" recopier les valeurs moyennes sur quelle page ? ")
        Set Sh = Sheets(reponse)
     
        Range("D2").Select
        'calcul de moy depend du nombre de machine étudiées : si on a 5 fiche il faudra prolonger la formule suivante avec
        'Sheet5!RC etc
     
        'Si le tableau est plus grand il faut redimensionner
     
        ActiveCell.FormulaR1C1  =AVERAGE(Sheet1!RC,Sheet2!RC,Sheet3!RC,Sheet4!RC)
     
        Range("D2").Select
     
        Selection.AutoFill Destination:=Range("D2:D864"), Type:=xlFillDefault
     
        Range("D2:D864").Select
     
        Range("D2:D864").Select
     
        Selection.AutoFill Destination:=Range("D2:CW864"), Type:=xlFillDefault
     
    End Sub
    Sauf que voila si j'augmente considérablement le nombre de feuilles, il faut modifier le programme de façon assez fastidieuse ...

    Je galère vraiment la, quelqu'un pour m'aider ?

    Merci d'avance

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    utilises la structure d'un calcul 3D : =MaFONCTION(PremiereFeuille:DerniereFeuille!Position)

    toutes les feuilles qui sont placées (dans la barre d'onglet des feuilles) entre ces deux feuilles seront incluses dans le calcul

    Dès lors, tu veilles simplement à toujours avoir la feuille de départ et d'arrivée qui ne change ni de position, ni de nom, et toute feuille qui tu vas intercaler entre elles seront automatiquement intégrées au calcul de ta moyenne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveCell.FormulaR1C1 = "=AVERAGE(Feuil1:Feuil4!RC)"

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2017
    Messages : 38
    Par défaut
    Merci beaucoup pour ton aide !
    j'ai essayé de modifier un petit peu le code mais excel ne semble pas encore apprécier ...
    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 MaFONCTION(PremiereFeuille, DerniereFeuille)
     
    Dim Sh As Worksheet
     
        reponse = InputBox(Prompt:=" recopier les valeurs moyennes sur quelle page ? ")
        Set Sh = Sheets(reponse)
     
        Range("D2").Select
        'calcul de moy depend du nombre de machine étudiées : si on a 5 fiche il faudra prolonger la formule suivante avec
        'Sheet5!RC etc
     
        'Si le tableau est plus grand il faut redimensionner
     
        ActiveCell.FormulaR1C1 =AVERAGE(PremiereFeuille:DerniereFeuille!RC)
     
        Range("D2").Select
     
        Selection.AutoFill Destination:=Range("D2:D864"), Type:=xlFillDefault
     
        Range("D2:D864").Select
     
        Range("D2:D864").Select
     
        Selection.AutoFill Destination:=Range("D2:CU864"), Type:=xlFillDefault
     
    End Function
    Je ne vois pas pourquoi ... un dernier coup de main ?

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Pourquoi avoir changé la façon de faire ? Ta syntaxe n'était pas bonne.

    En gros, tu remplaçais ta ligne par la mienne ET tu changeais le nom des feuilles, j'avais mis des noms bidons pour bien comprendre

    En reprenant tes noms de feuilles (De Sheet1 à Sheet4 si c'est bien leur nom) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveCell.FormulaR1C1 = "=AVERAGE(Sheet1:Sheet4!RC)"
    Et vu que derrière tu fais un autofill pour recopier ta formule, autant tout faire d'un coup !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("D2:CU864").FormulaR1C1 = "=AVERAGE(Sheet1:Sheet4!RC)"
    EDIT : et si tu n'as pas besoin de conserver les formules, on peut les remplacer ensuite par leur résultat, ce qui donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    With Range("D2:CU864")
        .FormulaR1C1 = "=AVERAGE(Sheet1:Sheet4!RC)"
        .Value = .Value
    End With

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2017
    Messages : 38
    Par défaut
    Pardon excuse moi c'est vrai que je fais un peu n'importe quoi la ...
    je ne me suis pas bien exprimé : en gros j'aimerai pouvoir demander à l'utilisateur la première et la dernière page

    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
    Sub moy_tab()
     
    Dim Sh As Worksheet
    Dim pr As Worksheet
    Dim der As Worksheet
     
     
        reponse = InputBox(Prompt:=" recopier les valeurs moyennes sur quelle page ? ")
        Set Sh = Sheets(reponse)
        p = InputBox(Prompt:=" premiere page ? ")
        d = InputBox(Prompt:=" derniere page ? ")
     
     
        'Si le tableau est plus grand il faut redimensionner
    Set pr = Sheets(p)
    Set der = Sheets(d)
     
    With Range("D2:CU864")
        .FormulaR1C1 = "=AVERAGE(pr:der!RC)"
        .Value = .Value
    End With
     
    End Sub

  6. #6
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    p = InputBox(Prompt:=" premiere page ? ")
    d = InputBox(Prompt:=" derniere page ? ")
    With Range("D2:CU864")
        .FormulaR1C1 = "=AVERAGE(" & p & ":" & d & "!RC)"
        .Value = .Value
    End With
    Mais bonjour les erreurs dues aux saisies dans les InputBox!...

    EDIT : A lire pour éviter les erreurs

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2017
    Messages : 38
    Par défaut
    c'est vrai que la InputBox je maitrise pas encore super bien
    En tout cas , merci infiniment à tout les deux pour votre aide précieuse : Ca fonctionne du tonnerre !
    Très bonne journée à tous !

  8. #8
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Regarde ce test, et modifie ta Sub en conséquence

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub essai()
    Dim reponse As String, Sh As Worksheet
    Do
        reponse = InputBox(Prompt:=" recopier les valeurs moyennes sur quelle page ? ")
    Loop While FeuilleExiste(ThisWorkbook, reponse) = False
    Set Sh = Sheets(reponse)
    MsgBox Sh.Name
    End Sub
     
    Function FeuilleExiste(wk As Workbook, stFeuille) As Boolean
     On Error Resume Next
     FeuilleExiste = Not (wk.Sheets(stFeuille) Is Nothing)
    End Function

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

Discussions similaires

  1. Les tableaux sous VBA access
    Par comewithme dans le forum IHM
    Réponses: 8
    Dernier message: 04/04/2014, 23h57
  2. Générer & Remplir des tableaux en VBA
    Par eurlzoo dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 15/11/2013, 21h17
  3. [XL-2003] moyenne mobile centrée en vba
    Par HERBINE dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 25/09/2011, 10h45
  4. [Debutant] Tableaux en VBA
    Par hugo69 dans le forum Access
    Réponses: 3
    Dernier message: 19/01/2007, 20h30

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