Problème !!

Résolu
apex77 Messages postés 48 Date d'inscription jeudi 27 mars 2008 Statut Membre Dernière intervention 17 avril 2008 - 31 mars 2008 à 00:05
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 - 31 mars 2008 à 22:20
Bonsoir,
j'ai un problème avecce programme
on me dit dépassement de capacité !
pouvez vous medire purquoi
merci

Dim n As Double
n = 1 'ligne
m = 1
        Do Until IsEmpty(Cells(n, m)) = False
       
        Do
       
    n = n + 1
    Cells(n, 9) = ((Cells(n, 8) / Cells(n, 5)))
    Cells(n, 9).NumberFormat = "0.00%"
    Loop Until IsEmpty(Cells(n, 8)) = True
    Loop
End Sub

15 réponses

cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 21
31 mars 2008 à 22:20
Et qu'est-ce que tu as fait de ces lignes ?

Dim nbLignes As Long, i As Long, nbColonnes As Integer
nbLignes = Cells(Rows.Count, "A").End(xlUp).Row
nbColonnes = Cells(1, Columns.Count).end(xlToLeft).column

Ce sont elles qui définissaient les conditions des Loop...Until

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
3
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
31 mars 2008 à 02:44
Salut
A ma connaissance, les feuilles Excel ne peuvent accueillir plus de 32767 lignes.
Arrives-tu à cette limite avec ton 'n' ?
Ta dernière boucle "Loop Until IsEmpty(Cells(n, 8)) = True" ne sert à rien

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
jmfmarques Messages postés 7668 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 28
31 mars 2008 à 08:10
Cells(n, 9) = ((Cells(n, 8) / Cells(n, 5)))


entrainera un overflow si les valeurs des deux cellules sont = 0

Il y a quand même d'autres manières qu'une boucle pour déterminer la dernière cellule remplie d'une colonne !
0
apex77 Messages postés 48 Date d'inscription jeudi 27 mars 2008 Statut Membre Dernière intervention 17 avril 2008
31 mars 2008 à 09:05
non j'ai au maximum 200 lignes
smais je sais vraiment pas comment faire
0

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

Posez votre question
apex77 Messages postés 48 Date d'inscription jeudi 27 mars 2008 Statut Membre Dernière intervention 17 avril 2008
31 mars 2008 à 10:05
toujours ce même problème
qui peut m'aider
svp
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 21
31 mars 2008 à 10:35
Essaie ceci et dis-nous s'il y a encore une erreur de dépassement ...

Dim nbLignes As Long, i As Long
nbLignes = Cells(Rows.Count, "A").End(xlUp).Row

for i = 2 to nbLignes
    If Range("E" & i) <> 0 Then
        Range("I" & i) = Range("H" & i) / Range("E" & i)
        Range("I" & i).NumberFormat = "0.00%"
    End If
Next

Il faudrait peut-être aussi vérifier que les cellules contiennent bien des chiffres avec IsNumeric()

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
apex77 Messages postés 48 Date d'inscription jeudi 27 mars 2008 Statut Membre Dernière intervention 17 avril 2008
31 mars 2008 à 10:46
oui ca marche merci!
mais je voudrais faire une boucle avec DO si possible
mais en tout cas ca tourne bien
merci MPi  (une fois de plus)
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 21
31 mars 2008 à 10:53
Dim nbLignes As Long, i As Long
nbLignes = Cells(Rows.Count, "A").End(xlUp).Row

i = 2
Do
    If Range("E" & i) <> 0 Then
        Range("I" & i) = Range("H" & i) / Range("E" & i)
        Range("I" & i).NumberFormat = "0.00%"
    End If
    i = i + 1
Loop Until i > nbLignes

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
apex77 Messages postés 48 Date d'inscription jeudi 27 mars 2008 Statut Membre Dernière intervention 17 avril 2008
31 mars 2008 à 11:24
super merci !!!
encore une question
comment puis-je faire pour faire ce programme une colonne sur 2 à partir de la colonne I
toujours en utilisant une boucle avec DO ??
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 21
31 mars 2008 à 11:59
Peux-tu préciser ?
colonne I, K, M,...?   si oui, jusqu'où ?  
et quelle serait la formule ?   toujours la cellule de gauche / E ?

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
apex77 Messages postés 48 Date d'inscription jeudi 27 mars 2008 Statut Membre Dernière intervention 17 avril 2008
31 mars 2008 à 12:11
alors ca serait une colonne sur 2 à partir de la colonneI, puis K pui M,..... mais je ne connais pas encore la derniere colonne car ca varie.
ma formule c'est bien toujours celle de gauche / E
merci beaucoup
0
apex77 Messages postés 48 Date d'inscription jeudi 27 mars 2008 Statut Membre Dernière intervention 17 avril 2008
31 mars 2008 à 12:19
alors ca serait une colonne sur 2 à partir de la colonneI, puis K pui M,..... mais je ne connais pas encore la derniere colonne car ca varie.
ma formule c'est bien toujours celle de gauche / E
merci beaucoup
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 21
31 mars 2008 à 12:25
Tu dois donc commencer par savoir combien de colonnes il faudra lire

nbColonnes = Cells(1, Columns.Count).end(xlToLeft).column

Donc, quelque chose comme ceci (?) sans avoir testé...



Dim nbLignes As Long, i As Long, nbColonnes As Integer
nbLignes = Cells(Rows.Count, "A").End(xlUp).Row

nbColonnes = Cells(1, Columns.Count).end(xlToLeft).column
i 2: j 9
Do
Do
    If Range("E" & i) <> 0 Then
        Cells(i, j) = Cells(i, j - 1) / Range("E" & i)
        Cells(i, j).NumberFormat = "0.00%"
    End If
    i = i + 1
Loop Until i > nbLignes
    j = j + 2
Loop Until j > nbColonnes

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
apex77 Messages postés 48 Date d'inscription jeudi 27 mars 2008 Statut Membre Dernière intervention 17 avril 2008
31 mars 2008 à 12:39
ouep super celui là
mais ca me fais aucune boucle ca e donne que la premiere cellule de la 1ere colonne
mais c'est pas possible de faire un programme en ne sachant pas le nombre de colonnes car mon nombre de colonnes n'est pas constant
0
apex77 Messages postés 48 Date d'inscription jeudi 27 mars 2008 Statut Membre Dernière intervention 17 avril 2008
31 mars 2008 à 13:07
j'ai modifié un peu
mais j'arrive pas à faire pour toutes les cellules d'une colonne
ca me calcule qu'une valeur pour chaque colonne en faisant un escalier
 

Sub gg()
    i 2: j 9
Do
Do
    If Range("E" & i) <> 0 Then
        Cells(i, j) = Cells(i, j - 1) / Range("E" & i)
        Cells(i, j).NumberFormat = "0.00%"
    End If
    i = i + 1
Loop Until i > nbLignes
    j = j + 2
Loop Until IsEmpty(Cells(1, j))


End Sub
0