Calcul (moy, max, min...) entre deux classeur

Résolu/Fermé
Quoi29 Messages postés 19 Date d'inscription mardi 17 avril 2018 Statut Membre Dernière intervention 5 septembre 2019 - Modifié le 17 avril 2018 à 18:45
Quoi29 Messages postés 19 Date d'inscription mardi 17 avril 2018 Statut Membre Dernière intervention 5 septembre 2019 - 30 avril 2018 à 11:40
Bonjour,

Je suis nouveau sur le forum et suis actuellement entrain d'essayer de me remettre à coder en VBA depuis peu. Je ne me rappel plus comment de manière la plus simple et épurée coder la chose suivante:

J'ai un classeur contenant ma Macro (nom du classeur inconnu). J'ai un deuxième classeur "Classeur2" contenant deux feuilles "Feuille1" et "Feuille2". "Feuille2" contient une colonne "A1:A3000" contenant un grand nombre de valeur sur cette plage.

Je souhaiterais que la cellule "A1" de la "Feuille1" du classeur contenant la Macro récupère la moyenne/le maximum/le minimum (...) de la colonne "A3:A3000". Comment faire? (Je ne veux surtout pas utiliser de boucle for pour le calcul de la moyenne des 3000 valeurs)

Mon idée (qui ne marche pas):
Dim NbRow As Integer
NbRow=3000

With Excel.Application.Workbooks("Classeur2").Sheets("Feuille2")

Excel.Application.ActiveWorkbooks.Sheets("Feuill1").Cells("A1") = WorksheetFunction.Average(Range(.Cells(3, 3), .Cells(3, NbRow)))


Merci pour votre aide en espérant avoir été clair
A voir également:

1 réponse

yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
17 avril 2018 à 20:13
bonjour, "qui ne marche pas": message d'erreur, ?
1
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
17 avril 2018 à 20:22
variante, à adapter:
Option Explicit

Sub test()
Dim NbRow As Long
Dim rg As Range
Dim avg As Double

NbRow = 3000
Set rg = Excel.Application.Workbooks("ccmy.xlsm").Sheets("mexy").Range("c3:c" & NbRow)
avg = Application.WorksheetFunction.Average(rg)
Excel.Application.ThisWorkbook.Sheets("tt").Range("A1") = avg
End Sub
0
Quoi29 Messages postés 19 Date d'inscription mardi 17 avril 2018 Statut Membre Dernière intervention 5 septembre 2019
19 avril 2018 à 10:02
Super merci je vais tester cela aujourd'hui. Je te tiens au courant
0
Quoi29 Messages postés 19 Date d'inscription mardi 17 avril 2018 Statut Membre Dernière intervention 5 septembre 2019
Modifié le 19 avril 2018 à 15:36
Bonjour yg_be,

Ca marche parfaitement, Eureka!

Merci beaucoup pour ton aide
0
Quoi29 Messages postés 19 Date d'inscription mardi 17 avril 2018 Statut Membre Dernière intervention 5 septembre 2019
Modifié le 20 avril 2018 à 12:19
Bonjour yg_be,

J'ai crié victoire trop vite.
Voici comment j'ai incorporé ton code:

'Found the Total and write it in Solution sheet
Set rg = Excel.Application.Workbooks(Imput & ".xlsx").Sheets("Travaille").Range("O3:O" & NbRow)
avg = Application.WorksheetFunction.Sum(rg)
Excel.Application.ThisWorkbook.Sheets("Solution").Range(Column(Version) & "22") = avg
rg.Clear
avg = 0

'Found the Total and write it in Solution sheet
Set rg = Excel.Application.Workbooks(Imput & ".xlsx").Sheets("Travaille").Range("M3:M" & NbRow)
avg = Application.WorksheetFunction.Sum(rg)
Excel.Application.ThisWorkbook.Sheets("Solution").Range(Column(Version) & "24") = avg
rg.Clear
avg = 0

'Found the Total and write it in Solution sheet
Set rg = Excel.Application.Workbooks(Imput & ".xlsx").Sheets("Travaille").Range("P3:P" & NbRow)
avg = Application.WorksheetFunction.Sum(rg)
Excel.Application.ThisWorkbook.Sheets("Solution").Range(Column(Version) & "26") = avg
rg.Clear
avg = 0

'Found the Peak and write it in Solution sheet
Set rg = Excel.Application.Workbooks(Imput & ".xlsx").Sheets("Travaille").Range("D3:D" & NbRow)
avg = Application.WorksheetFunction.Max(rg)
Excel.Application.ThisWorkbook.Sheets("Solution").Range(Column(Version) & "25") = avg
rg.Clear
avg = 0

Lorsque je fais tourner le programme. J'ai l'erreur à la ligne suivante:
avg = Application.WorksheetFunction.Sum(rg)
Avec comme message d'erreur:
"Erreur 1008 le programme ne peut réaliser la fonction sum"

Lorsque je regarde dans mon dossier Excel les cellules O3:O3000 et M3:3000 ont été remplacé par des cases vides. D'où j'imagine le problème de réaliser la fonction sum.
Lorsque j'enlève ton code incorporé mes cellules sont bien présentes et remplis comme il se doit.

Aurais-tu une idée de l'origine de l'erreur?
0
Quoi29 Messages postés 19 Date d'inscription mardi 17 avril 2018 Statut Membre Dernière intervention 5 septembre 2019
20 avril 2018 à 12:18
En enlevant:
rg.Clear
avg = 0
Les colonnes ne disparaissent plus mais cela bloque comme même au même endroit
0