Paypay69
Messages postés5Date d'inscriptiondimanche 19 juillet 2009StatutMembreDernière intervention19 décembre 2012
-
19 juil. 2009 à 18:59
Paypay69
Messages postés5Date d'inscriptiondimanche 19 juillet 2009StatutMembreDernière intervention19 décembre 2012
-
20 juil. 2009 à 12:50
Bonjour le forum
Je suis debutant dans le VBA sous excel. J'ai reussi à me debrouillé jusqu'a maintenant mais la j'y arrive plus
J'ai fait une macro qui me fait des calculs automatique dans "thisworkbook" mais j'aimerais que ca concerne qu'a partir d'une feuille dans mon classeur jsuqu'a a la derniere. En sachant que je rajoute une feuille par semaine je peux pas coller ma macro a chaque fois.
Pouvez-vous m'aider svp. C'est le dernier probleme qui me reste.
Ci-joint le code qui marche pas depuis que j'ai creer ce qui est en rouge.
Vos remarques sont les biens venues
Merci
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim a As Single
Dim b As Single
Dim c As Single
Dim d As Single
Dim e As Single
Dim f As Single
Dim g As Single
Dim h As Single
With ThisWorkbook
For Each Sh In ThisWorkbook.Sheets
If Sh.Index < 40 Then
GoTo Suite
Else
For Index = 40 To .Sheets.Count
a = ActiveSheet.Range("H8")
b = ActiveSheet.Previous.Range("B45")
c = ActiveSheet.Range("H12")
d = ActiveSheet.Previous.Range("C89")
e = ActiveSheet.Range("A1")
f = ActiveSheet.Range("T9")
g = ActiveSheet.Previous.Range("A23")
h = ActiveSheet.Range("D11")
ActiveSheet.Cells(3, 3) = d
ActiveSheet.Cells(3, 6) = d + e + f
ActiveSheet.Cells(6, 8) = a + b - c
ActiveSheet.Cells(8, 8) = g + h
Flocreate
Messages postés300Date d'inscriptionlundi 17 juillet 2006StatutMembreDernière intervention27 mai 20123 20 juil. 2009 à 09:45
Ton algo me semble quelque peut compliqué
(dans la maniere de l'ecrire en tout cas)
Dim WS as WorkCheets
Dim index_min as integer 'l'index du premier WS à traiter
index_min = 40
Dim index as integer
For index = index_min to ThisWorkbook.WorkCheets.Count
Set WS = ThisWorkbook.WorkCheets(index)
a = WS.Range("H8")
b = WS.Previous.Range("B45")
c = WS.Range("H12")
d = WS.Previous.Range("C89")
e = WS.Range("A1")
f = WS.Range("T9")
g = WS.Previous.Range("A23")
h = WS.Range("D11")
WS.Cells(3, 3) = d
WS.Cells(3, 6) = d + e + f
WS.Cells(6, 8) = a + b - c
WS.Cells(8, 8) = g + h
Next
voila ^^
un conseil, n'utilise les Goto que pour la gestion d'erreurs. Même si tu veux quiter prématurément une boucle for utilise l'instruction "Exit For" je te l'accorde elle est ambigue lorsque tu as des For imbriqués. Cela-dit, ça reste plus propre.
j'espere avoir resolu ton problème
VB6, quand yen a plus yen a encore
Il y a tant a apprendre et seulement 24 heures dans une journée
Flocreate
Messages postés300Date d'inscriptionlundi 17 juillet 2006StatutMembreDernière intervention27 mai 20123 20 juil. 2009 à 09:49
Ah ! petite chose que je n'avais pas vu ^^
a = WS.Range("H8") est très mauvais parsque ici 'a' deviens en téhorie un pointeur sur la cellule et non pas sur la valeur.
il faudrait metre
a = WS.Range("H8").Text
ou
a = WS.Range("H8").Formula
de même
WS.Cells(3, 3) = d
--> WS.Cells(3, 3).Text = d
Cordialement,
VB6, quand yen a plus yen a encore
Il y a tant a apprendre et seulement 24 heures dans une journée