VBA : depassement de capacité

Bonjour à tous,

J'ai écris un code qui, en soit fonctionne mais VBA me dit :" Dépassement de capacité" et cela m'embête car j'aimerais appliquer ce code à tout mon fichier et il m'en empêche, pouvez-vous m'aider ?

Voici le code :

Sub titre()
For i = 1 To 790
Cells(i + 1, 8).Select
Cells(i + 1, 8) = (Cells(i + 2, 2) - Cells(i + 1, 2)) / Cells(i + 1, 2)
Next
End Sub

Sub SPI()
For i = 1 To 790
Cells(i + 1, 8).Select
Cells(i + 1, 8) = (Cells(i + 2, 2) - Cells(i + 1, 2)) / Cells(i + 1, 2)
Next
End Sub
Sub rdtanormaux()
For i = 1 To 790
Cells(i + 1, 10).Select
Cells(i + 1, 10) = (Cells(i + 1, 8) - Cells(i + 1, 9))
Next
End Sub
Sub pppp()
Call titre
Call SPI
Call rdtanormaux
End Sub

Je peux joindre le fichier si besoin est : Merci à tous

Bonjour

jeanluc17 a écrit :

Je peux joindre le fichier si besoin est

Ce n'est pas une question à poser

Cela aurait évité ce message

Voila, je ne pensais pas que c'était obligatoire Banzai ! Merci

23probleme.xlsm (40.11 Ko)

Bonjour

jeanluc17 a écrit :

Voila, je ne pensais pas que c'était obligatoire

Ah ce n'est pas obligatoire mais fortement conseillé

Le problème c'est que tu veux diviser par 0 quand tu arrives à la fin de ton tableau

Je n'ai modifié que ta première macro

Sub titre()
  For i = 1 To Range("A" & Rows.Count).End(xlUp).Row - 1
    ' Cells(i + 1, 8).Select ' Pas besoin de sélectionner
    Cells(i + 1, 8) = (Cells(i + 2, 2) - Cells(i + 1, 2)) / Cells(i + 1, 2)
  Next
End Sub

Comme cela si tu veux diviser par Cells(i + 1, 2) (colonne B de la ligne suivante) tu auras une valeur

Édit : Je ne comprends pas trop

Tu pars de la ligne 1 mais tu rajoutes 1 (ou exceptionnellement 2) à la ligne

Commence à la ligne 2 et arrêtes toi une ligne avant la fin

Tout ton code pourrait devenir ça

A tester

Sub titre()
  For i = 2 To Range("A" & Rows.Count).End(xlUp).Row - 1
    Cells(i, 8) = (Cells(i + 1, 2) - Cells(i, 2)) / Cells(i, 2)
  Next
End Sub

Sub SPI()
  For i = 2 To Range("A" & Rows.Count).End(xlUp).Row - 1
    Cells(i, 8) = (Cells(i + 1, 2) - Cells(i, 2)) / Cells(i, 2)
  Next
End Sub

Sub rdtanormaux()
  For i = 2 To Range("A" & Rows.Count).End(xlUp).Row - 1
    Cells(i, 10) = (Cells(i, 8) - Cells(i, 9))
Next
End Sub

Sub pppp()
  Call titre
  Call SPI
  Call rdtanormaux
End Sub

Merci pour ta réponse, ton code est beaucoup plus simple. Alors cela fonctionne sur une feuille, mais pas sur toutes. J'ai du juste modifier une ligne ou je m'étais trompé.

Sub titre()
  For i = 2 To Range("A" & Rows.Count).End(xlUp).Row - 1
    Cells(i, 8) = (Cells(i + 1, 2) - Cells(i, 2)) / Cells(i, 2)
  Next
End Sub

Sub SPI()
  For i = 2 To Range("A" & Rows.Count).End(xlUp).Row - 1
[color=#FF0000]    Cells(i, 9) = (Cells(i + 1, 6) - Cells(i, 6)) / Cells(i, 6)[/color]
  Next
End Sub

Sub rdtanormaux()
  For i = 2 To Range("A" & Rows.Count).End(xlUp).Row - 1
    Cells(i, 10) = (Cells(i, 8) - Cells(i, 9))
Next
End Sub

Sub pppp()
Dim RR As Worksheet
For Each RR In ActiveWorkbook.Sheets
    RR.Activate

  Call titre
  Call SPI
  Call rdtanormaux
  Next
End Sub

Apparament certaines feuilles dans le fichier refusent la ligne en rouge. Je ne t'ai mis qu'un onglet au départ pour ne pas mettre un fichier trop lourd, mais après essai sur le gros cela n'a pas fonctionné. Désolé du dérangement occasioné.

Bonsoir

Le problème c'est que dans plusieurs feuilles tu as des nombres qui n'ont pas le bon format

Voir

page "CYT" F750-F774

Page "Dufry" F2-F6

Page "Mobimo" F65-F120

etc ....

Je te propose ce code à la place de toutes tes macros

Sub pppp()
Dim RR As Worksheet
Dim J As Long

  For Each RR In ActiveWorkbook.Sheets
    With RR
      .Columns("F").Replace what:=",", replacement:="", lookat:=xlPart
      .Columns("F").Replace what:=".", replacement:=".", lookat:=xlPart
      For J = 2 To .Range("A" & Rows.Count).End(xlUp).Row - 1
        .Cells(J, "H") = (.Cells(J + 1, "B") - .Cells(J, "B")) / .Cells(J, "B")
        .Cells(J, "I") = (.Cells(J + 1, "F") - .Cells(J, "F")) / .Cells(J, "F")
        .Cells(J, "J") = (.Cells(J, "H") - Cells(J, "I"))
      Next J
    End With
  Next RR
End Sub

Super bien joué tout ca !

Il reste juste un tout petit bémol, la dernière cellule de chacune des 3 colonnes ne se calculent pas !

PS : la dernière dates de la colonne E devient DIV#0 aussi !

Bonsoir

jeanluc17 a écrit :

la dernière cellule de chacune des 3 colonnes ne se calculent pas !

C'est normal car tu as besoin de la ligne suivante pour faire tes calculs, et la ligne suivante après la dernière est vide donc tes calculs seraient faux

jeanluc17 a écrit :

PS : la dernière dates de la colonne E devient DIV#0 aussi !

Elle ne le devient pas , elle est déjà comme cela

Je vais modifier les dates à la main !

Y-a t il un moyen pour que la dernière ligne se calcul quand meme ?

Bonsoir

Modifies la boucle

avant

For J = 2 To .Range("A" & Rows.Count).End(xlUp).Row- 1

Après

For J = 2 To .Range("A" & Rows.Count).End(xlUp).Row

Tout fonctionne, merci encore.

Rechercher des sujets similaires à "vba depassement capacite"