Utiliser 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 pijaku le 4/12/2013 à 16:04
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 6 déc. 2013 à 07:17
Bonjour,

Je créé un petit code qui a pour but de faire la moyenne de valeurs d'une meme cellule dans plusieurs fichiers excel.

A la ligne total = total + ... j'ai une erreur 438 je pensais que de cette facon la valeur était vu comme un nombre par la macro mais visiblement non.

Je voudrais aussi boucler cela sur un bon nombre de cellules, est-ce possible?
je pensais à Do While p < 25 mais apres faire un Range("Cp") ne marcherait surement pas donc je suis bloqué.
Et boucler aussi sur les colonnes c'est possible?

Sub moyenne()

            Dim i As Integer
            Dim total As Integer
            Dim moyenne As Integer

            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"

// Début boucle

            For Each wkb In WBCollection
            
                    Set myWk = Workbooks.Open(wkb)
                    total = total + myWk.Worksheet("Feuil1").Range("C22").Value
                    i = i + 1
                    myWk.Close
                    Set myWk = Nothing
            Next
            
            moyenne = total / i
            
            Workbooks("moyenne").Worksheet("Feuil1").Range("C22") = moyenne

// Fin boucle


End Sub



Merci d'avance pour vos réponse!

8 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 745
Modifié par pijaku le 4/12/2013 à 16:30
Bonjour,

Un petit exemple :

Sub moyenne()
Dim i As Integer
Dim total As Long 'Long est préféré à Integer car permet des chiffres plus grands
Dim moyenne As Integer
Dim Lig As Integer
Dim Col As Integer

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"

'// Début boucle sur les classeurs
For Each wkb In WBCollection
    '// ouverture du classeur
    Set myWk = Workbooks.Open(wkb)
    '// Boucle sur les lignes 22 à 32
    For Lig = 22 To 32
        '// Boucle sur les colonnes de C à G
        For Col = 3 To 7
            If Not IsNumeric(myWk.Worksheets("Feuil1").Cells(Lig, Col).Value) Then
                MsgBox "La valeur située Classeur " & Wk.Name & " Ligne " & Lig & " Colonne " & Col & "n'est pas un nombre"
                Exit Sub
            Else
                total = total + CLng(myWk.Worksheets("Feuil1").Cells(Lig, Col).Value)
            End If
            i = i + 1
        Next Col
    Next Lig
    myWk.Close
    Set myWk = Nothing
Next
moyenne = total / i
Workbooks("moyenne").Worksheets("Feuil1").Range("C22") = moyenne
'// Fin boucle
End Sub


Cordialement,
Franck
1
geoff's Messages postés 30 Date d'inscription vendredi 8 mars 2013 Statut Membre Dernière intervention 5 décembre 2013
4 déc. 2013 à 16:32
Bonjour,

Merci ca marche beaucoup mieux maintenant!
0
geoff's Messages postés 30 Date d'inscription vendredi 8 mars 2013 Statut Membre Dernière intervention 5 décembre 2013
4 déc. 2013 à 16:56
Nouveau problèmes:

Pour rentrer les valeurs dans mon tableau excel actif,

je fais

Sheets("moyenne").Cells(Lig, Col) = moy

avec moy = total / i

=> erreur d'execurtion 9 l'indice n'appartient pas a la selection :(

Est-ce la divison par i qu'il n'aime pas?
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
4 déc. 2013 à 17:07
Slt,

Qu'elle est la valeur de lig et de col ? Comment sont-ils initialisés ?


0

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

Posez votre question
melanie1324 Messages postés 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
4 déc. 2013 à 17:25
Re,

donc il faut modifier mon code :




Sub moyenne()

            Dim i As Integer
            Dim total As Integer
            Dim moyenne As Integer
             dim colonne as integer
            dim ligne as integer

            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"

// Début boucle

            For Each wkb In WBCollection
          
                    Set myWk = Workbooks.Open(wkb)
                    
                            for ligne = 1 to 25
                                for colonne = 1 to 30

                                   total = total + myWk.Worksheet("Feuil1").cells(ligne,colonne).value

                    
next colonne
next ligne


                    myWk.Close
                    Set myWk = Nothing
i=i+1
            Next
            
            moyenne = total / i
            
            Workbooks("moyenne").Worksheet("Feuil1").Range("C22") = moyenne

// Fin boucle


End sub

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 à 14:32
Hum, nouveau problème...

J'utilise la commande Workbook.Sheets("Feuil1").cells(Lig,Col).value dans la ligne suivante:

total = total + myWk.Sheets("General").Cells(Lig, Col).Value

cependant, en faisant un MsgBox (myWk.Sheets("General").Cells(Lig, Col)), il me retourne une case vide, donc je ne peux pas faire mes calculs par la suite...

Quelqu'un aurait une explication?

Merci.
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
5 déc. 2013 à 14:58
Il y a quelque chose dans la cellule à la ligne et dans la colonne de Cells(lig, col) ?
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 745
5 déc. 2013 à 16:07
1- La syntaxe Workbook.Sheets n'est pas bonne,
2- Feuille "General" ou Feuil1??? Si tu confonds, tu n'auras pas tes valeurs..............
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:09
Oui il y a quelque chose c'est "General" le nom de ma feuille j'ai mis Feuil1 pour info.

La formule que j'utilise est:

total = total + myWk.Sheets("General").Cells(Lig, Col).Value

et la feuille General existe, et n'est pas vide !
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 745
6 déc. 2013 à 07:17
Si myWk.Sheets("General").Cells(Lig, Col).Value retourne 0 ou rien, c'est que la cellule située ligne Lig, colonne Col est vide.
Sans fichier, impossible pour nous d'aller plus loin.
0
melanie1324 Messages postés 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
4 déc. 2013 à 16:18
Bonjour,

Voici les solutions a tes pbs :

total = total + myWk.Worksheet("Feuil1").Range("C22").Value devient

total = total + myWk.sheets("Feuil1").Range("C22").Value

je pensais à Do While p < 25 mais apres faire un Range("Cp") ne marcherait surement pas donc je suis bloqué.
Et boucler aussi sur les colonnes c'est possible?

[/contents/446-fichier-sub Sub] moyenne()

            Dim i As Integer
            Dim total As Integer
            Dim moyenne As Integer
             dim colonne as integer
            dim ligne as integer

            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"

// Début boucle

            For Each wkb In WBCollection
          
                    Set myWk = Workbooks.Open(wkb)
                    
                            for ligne = 1 to 25
                                for colonne = 1 to 30

                                   total = total + myWk.Worksheet("Feuil1").cells(ligne,colonne).value
                    
next colonne
next ligne


                    myWk.Close
                    Set myWk = Nothing
            Next
            
            moyenne = total / 25
            
            Workbooks("moyenne").Worksheet("Feuil1").Range("C22") = moyenne

// Fin boucle


End Sub

-1
melanie1324 Messages postés 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
Modifié par melanie1324 le 4/12/2013 à 17:16
Bonjour,

Tu ne peux pas diviser par i car si tu regardes le code : i = 0
donc si i = 0, tu ne peux pas faire la division par zéro.

Alors voici comment modifier ton code, i s'incrémentera à chaque fois que tu ajouteras une valeur à total :


[/contents/446-fichier-sub Sub] moyenne()

            Dim i As Integer
            Dim total As Integer
            Dim moyenne As Integer
             dim colonne as integer
            dim ligne as integer

            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"

// Début boucle

            For Each wkb In WBCollection
          
                    Set myWk = Workbooks.Open(wkb)
                    
                            for ligne = 1 to 25
                                for colonne = 1 to 30

                                   total = total + myWk.Worksheet("Feuil1").cells(ligne,colonne).value
i=i+1
                    
next colonne
next ligne


                    myWk.Close
                    Set myWk = Nothing
            Next
            
            moyenne = total / i
            
            Workbooks("moyenne").Worksheet("Feuil1").Range("C22") = moyenne

// Fin boucle


End Sub

-1
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
4 déc. 2013 à 17:15
Dans l'exemple de Pikaju, i est incrémenté dans la 2ème boucle For ... Next.

Le message d'erreur indique que "l'indice n'appartient à la sélection" et non que la division par zéro est impossible !!!

Ensuite, dans ta solution, tu incrémentes i mais tu ne t'en sers pas ???
0
melanie1324 Messages postés 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
4 déc. 2013 à 17:16
une erreur de ma part.
0
geoff's Messages postés 30 Date d'inscription vendredi 8 mars 2013 Statut Membre Dernière intervention 5 décembre 2013
4 déc. 2013 à 17:19
i est bien incrémenté donc le pb ne vient pas de la (j'ai testé en divisant par un nombre arbitraire toujours erreur)
0
geoff's Messages postés 30 Date d'inscription vendredi 8 mars 2013 Statut Membre Dernière intervention 5 décembre 2013
4 déc. 2013 à 17:21
i me sert à faire ma moyenne (je divise par i qui est le nombre de fichier ds ma collection au final).
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
4 déc. 2013 à 17:23
Voir ici

Vérifie que le nom de ta feuille est correct ... "Moyenne" et "moyenne" est différent pour Excel
0