Utiliser la valeur d'une cellule
geoff's
Messages postés
30
Date d'inscription
Statut
Membre
Dernière intervention
-
pijaku Messages postés 12263 Date d'inscription Statut Modérateur Dernière intervention -
pijaku Messages postés 12263 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
- Utiliser chromecast - Guide
- Aller à la ligne dans une cellule excel - Guide
- Excel cellule couleur si condition texte - Guide
- Utiliser une tablette comme ecran pc - Guide
- Utiliser iphone comme webcam - 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