N'arrive pas à récuperer la valeur d'une cellule
geoff's
Messages postés
36
Statut
Membre
-
lermite222 Messages postés 9042 Statut Contributeur -
lermite222 Messages postés 9042 Statut Contributeur -
Bonjour,
Dans un code vba, je souhaite recuperer la valeur de différentes cellules.
En faisant un msgbox de la valeur de la cellule, case vide, donc ca ne fonctionne pas.
Ma question est pourquoi?
Merci d'avance.
Ci-joint le code:
Dans un code vba, je souhaite recuperer la valeur de différentes cellules.
En faisant un msgbox de la valeur de la cellule, case vide, donc ca ne fonctionne pas.
Ma question est pourquoi?
Merci d'avance.
Ci-joint le code:
Sub moyenne()
Dim i As Integer
Dim total As Integer
Dim moy As Integer
Dim Lig As Integer
Dim Col As Integer
Lig = 1
Col = 1
i = 0
total = 0
Set WBCollection = New Collection
WBCollection.Add "C:\Excel\02_06_13\Prod Client.xlsm"
WBCollection.Add "C:\Excel\02_07_13\Prod Client.xlsm"
Set test = Workbooks.Open("C:\Excel\Test")
For Lig = 5 To 6
For Col = 15 To 16
i = 0
total = 0
moy = 0
For Each wkb In WBCollection
Set myWk = Workbooks.Open(wkb)
total = total + myWk.Sheets("General").Cells(Lig, Col).Value
MsgBox (myWk.Sheets("General").Cells(Lig, Col))
MsgBox (total)
i = i + 1
myWk.Close
Set myWk = Nothing
Next
moy = total / i
test.Sheets("moyenne").Cells(Lig, Col) = moy
Next Col
Next Lig
test.Close
End Sub
8 réponses
-
Bonjour,
Comprend pas ! pourquoi des collections ?
Tu veux faire une moyenne de différentes cellules sur deux classeurs ?
A+
-
La collection c'est que je fais la moyenne de plusieurs valeurs ds la meme cellule mais ds des fichiers excel différents. Quelque chose à voir ac mon pb tu pense?
-
Oui, mais tu te mélange les pinceaux !! :=)
Si je lis entre les lignes...
Tu veux la moyenne des plages O5:P6
Cumulées ou deux résultats ?
-
Euh, comprend pas trop :)
Pour t'expliquer j'ai 2 fichiers excel je veux en avoir un troisième qui serait la moyenne des 2 premiers.
Donc pour chaque cellule, je prends la valeur dans chaque fichier excel, fait la moyenne et met ca ds un troisième fichier.
Clair ou pas?
Sinon pourquoi je me mélange les pinceaux? que fais-je de mal :)? -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Essaye quelque chose comme ça...
Sub moyenne() Dim Wkb As Workbook Dim Classeurs Dim M() As Single Dim A As Range Dim i As Integer Classeurs = Array("C:\Excel\02_06_13\Prod Client.xlsm", "C:\Excel\02_07_13\Prod Client.xlsm") ReDim M(UBound(Classeurs) - 1) For i = 0 To UBound(Classeurs) - 1 With Workbooks.Open(Classeurs(i)) Set A = .Worksheets("General").Range("O5:P6") M(i) = Application.WorksheetFunction.Average(A) .Close End With Next i Workbooks.Open ("C:\Excel\Test") For i = 0 To UBound(Classeurs) - 1 Sheets("moyenne").Cells(5 + i, 15) = M(i) Next i End Sub
J'ai employé une boucle, je suppose que tu auras plus de deux classeurs à analyser.
J'ai pas testé, je n'ai pas tes classeurs.
A+
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
Note: Je ne répond pas aux MP pour les questions techniques. Et ma boule de cristal est cassée . -
Bonjour lermite,
C'est normal que le retour du MsgBox soit vide ... le code est incohérent.
Les variables sont initialisées à zéro dans la 2ème boucle For ... Next !!!
De plus, le For Each wkb In WBCollection n'est pas à sa place !!!
For Each wkb In WBCollection Set myWk = Workbooks.Open(wkb) For Lig = 5 To 6 For Col = 15 To 16 total = total + CInt(myWk.Sheets("General").Cells(Lig, Col).Value) i = i + 1 Next Col Next Lig myWk.Close Set myWk = Nothing Next wkb
Et je ne parle pas des variables non déclarées ...
«Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément.»
Nicolas Boileau -
Polux,
Si Wkb est bien a sa place. Je ne veux pas la moyenne d'un ensemble de cellules d'un fichier excel, je veux la moyenne d'une cellule de plusieurs fichiers excel.
Donc je veux un total en parcourant mes fichiers, faire la moyenne et la rentrer dans un autre fichier. Ensuite passer à une autre cellule.
Donc normal de reinitialiser quand je veux refaire une moyenne..
Le raisonnement dans mon code est bon, après je ne sais pas ce qui cloche je parcoure bien toutes mes cellules dans mes différents fichiers (enfin j'ai l'impression mais ca marche po :(
Lermite, pas tout compris ds ton code :/. -
Je n'avais pas du tout compris comme ça avec tes explications précédantes.
Ce code devrait faire l'affaire.
Sub moyenne()
Dim Wks As Worksheet
Dim Classeurs
Dim i As Integer, Lig As Integer, Col As Integer, NB As Integer
Classeurs = Array("C:\Excel\02_06_13\Prod Client.xlsm", "C:\Excel\02_07_13\Prod Client.xlsm")
NB = UBound(Classeurs) - 1
Workbooks.Open ("C:\Excel\Test")
Set Wks = Sheets("Moyenne")
For i = 0 To NB
With Workbooks.Open(Classeurs(i))
With .Worksheets("General")
For Lig = 5 To 6
For Col = 15 To 16
Wks.Cells(Lig, Col) = Wks.Cells(Lig, Col) + .Cells(Lig, Col)
Next Col
Next Lig
End With
.Close
End With
Next i
For Lig = 5 To 6
For Col = 15 To 16
Wks.Cells(Lig, Col) = Wks.Cells(Lig, Col) / (NB + 1)
MsgBox "Moyenne " & Wks.Cells(Lig, Col).Address & Chr(13) _
& Wks.Cells(Lig, Col).Value
Next Col
Next Lig
End Sub
A+
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
Note: Je ne répond pas aux MP pour les questions techniques. Et ma boule de cristal est cassée .