N'arrive pas à récuperer la valeur d'une cellule

Fermé
geoff's Messages postés 30 Date d'inscription vendredi 8 mars 2013 Statut Membre Dernière intervention 5 décembre 2013 - Modifié par blux le 5/12/2013 à 17:47
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 - 6 déc. 2013 à 00:57
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:

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



A voir également:

8 réponses

lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
5 déc. 2013 à 15:22
Bonjour,
Comprend pas ! pourquoi des collections ?
Tu veux faire une moyenne de différentes cellules sur deux classeurs ?
A+
0
geoff's Messages postés 30 Date d'inscription vendredi 8 mars 2013 Statut Membre Dernière intervention 5 décembre 2013
5 déc. 2013 à 15:23
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?
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
5 déc. 2013 à 16:13
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 ?
0
geoff's Messages postés 30 Date d'inscription vendredi 8 mars 2013 Statut Membre Dernière intervention 5 décembre 2013
5 déc. 2013 à 16:17
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 :)?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
Modifié par lermite222 le 5/12/2013 à 17:59
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 .
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
Modifié par Polux31 le 5/12/2013 à 18:42
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
0
geoff's Messages postés 30 Date d'inscription vendredi 8 mars 2013 Statut Membre Dernière intervention 5 décembre 2013
5 déc. 2013 à 19:11
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 :/.
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
Modifié par lermite222 le 6/12/2013 à 00:58
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 .
0