Utiliser la valeur d'une cellule
geoff's
Messages postés
36
Statut
Membre
-
pijaku Messages postés 13513 Date d'inscription Statut Modérateur Dernière intervention -
pijaku Messages postés 13513 Date d'inscription Statut Modérateur Dernière intervention -
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?
Merci d'avance pour vos réponse!
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!
A voir également:
- Utiliser la valeur d'une cellule
- Comment utiliser chromecast sur tv - Guide
- Aller à la ligne dans une cellule excel - Guide
- Utiliser iphone comme webcam - Guide
- Bloquer une cellule excel - Guide
- Utiliser une tablette comme ecran pc - Guide
8 réponses
Bonjour,
Un petit exemple :
Cordialement,
Franck
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
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?
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?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Re,
donc il faut modifier mon code :
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
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.
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.
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?
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
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 :
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
Voir ici
Vérifie que le nom de ta feuille est correct ... "Moyenne" et "moyenne" est différent pour Excel
Vérifie que le nom de ta feuille est correct ... "Moyenne" et "moyenne" est différent pour Excel