Problème !!

Résolu
Signaler
Messages postés
48
Date d'inscription
jeudi 27 mars 2008
Statut
Membre
Dernière intervention
17 avril 2008
-
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
-
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

Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
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
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
81
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)
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
27
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 !
Messages postés
48
Date d'inscription
jeudi 27 mars 2008
Statut
Membre
Dernière intervention
17 avril 2008

non j'ai au maximum 200 lignes
smais je sais vraiment pas comment faire
Messages postés
48
Date d'inscription
jeudi 27 mars 2008
Statut
Membre
Dernière intervention
17 avril 2008

toujours ce même problème
qui peut m'aider
svp
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
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
Messages postés
48
Date d'inscription
jeudi 27 mars 2008
Statut
Membre
Dernière intervention
17 avril 2008

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)
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
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
Messages postés
48
Date d'inscription
jeudi 27 mars 2008
Statut
Membre
Dernière intervention
17 avril 2008

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 ??
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
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
Messages postés
48
Date d'inscription
jeudi 27 mars 2008
Statut
Membre
Dernière intervention
17 avril 2008

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
Messages postés
48
Date d'inscription
jeudi 27 mars 2008
Statut
Membre
Dernière intervention
17 avril 2008

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
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
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
Messages postés
48
Date d'inscription
jeudi 27 mars 2008
Statut
Membre
Dernière intervention
17 avril 2008

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
Messages postés
48
Date d'inscription
jeudi 27 mars 2008
Statut
Membre
Dernière intervention
17 avril 2008

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