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

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


8 réponses

  1. Contributeur
    Bonjour,
    Comprend pas ! pourquoi des collections ?
    Tu veux faire une moyenne de différentes cellules sur deux classeurs ?
    A+
    0
    1. 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
      1. Contributeur
        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
        1. 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
          1. Contributeur
            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
            1. 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
              1. 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
                1. Contributeur
                  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