Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

boucle en fonction de "i-1"??

  • Initiateur de la discussion Initiateur de la discussion agatso
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

agatso

XLDnaute Nouveau
bonjour;

Je voudrais savoir s'il est possible de descendre de "x" lignes en fonction des données du i precedent.
i est la variable incrementée à chaque "tour" de boucle while.
a est une autre variable, je vous transmet la macro que j'ai écrit (je n'arrive pas à la tester, il me met que j'ai un "Else" sans "if" ...
la macro est en rouge, un exemple de ce qui me pose question est souligné.
merci de votre réponse!

nb_pylone = 0

While f1.Cells(nb_pylone + 7, 2) <> Empty
nb_pylone = nb_pylone + 1

Wend

i = 0

While i < nb_pylone

a = f1.Cells(i + 23, 19) 'nbre de pieux pâr pylone

If a < 5 Then j = 1

fB.Cells((i + j(i - 1) + 23 - 1), 14) = f1.Cells((i + 7), 2)
fB.Cells(i + 23 + j(i - 1) - 1, 20) = 1
fB.Cells(i + 23 + j(i - 1) - 1, 24) = f1.Cells(i + 7, 19)

ElseIf 4 < a < 9 Then j = 2

fB.Cells((i + j(i - 1) + 23 - 1), 14) = f1.Cells((i + 7), 2) 'numero de pylone
fB.Cells(i + 23 + j(i - 1) - 1, 20) = 1
fB.Cells(i + 23 + j(i - 1), 20) = 2
fB.Cells(i + 23 + j(i - 1) - 1, 24) = f1.Cells(i + 7, 19)
fB.Cells(i + 23 + j(i - 1), 24) = f1.Cells(i + 7, 19)

End If

i = i + 1
Wend
 
Re : boucle en fonction de "i-1"??

Bonjour,

A première vue, je vois 2 problèmes

1) Pour le If, si tu écris le Then sur la même ligne, tu n'as pas besoin de end if (c'est pour cela que tu as l'erreur Else sans If)
Donc, écris plutot sur 2 lignes :
If a < 5 Then
j = 1


2) Plutot que j(i - 1), ecris j * (i-1)

A+

Caillou
 
Re : boucle en fonction de "i-1"??


si j'écris j*(i-1), il vas faire une multiplication non? ce que je souhaite c'est qu'il prenne la valeur de j pour le i precedent.
 
Re : boucle en fonction de "i-1"??

Re,

En fait je ne comprends pas ce que tu veux faire !
ce que je souhaite c'est qu'il prenne la valeur de j pour le i precedent.
j=i ? i=j ? i=j-1 ?....
De plus la ligne de code
Code:
ElseIf 4 < a < 9
ne fonctionne pas
Il faudrait écrire
Code:
ElseIf a>4 and a<9

Bref, tu devrais expliquer davantage ce que tu veux !

A+
Caillou
 
Re : boucle en fonction de "i-1"??

Re.
merci pour la correction de la ligne avec la double inégalité!!

prenons un exemple.
Pour i =1, "a" est par exemple égale à 6, donc j=2. mon tableau se rempli grace à ma boucle puis le i s'incremente, donc i=2 maitenant. J'aimerai me servir de la précedente valeure de j (celle pour i=1, donc j=2) pour savoir sur quelle ligne me placer.
est ce plus clair?
merci!!!
 
Re : boucle en fonction de "i-1"??

Re,
Non désolé, tjs pas très clair pour moi.
Par contre, tu dis :
J'aimerai me servir de la précedente valeure de j
donc au moment où tu incrémentes ton i, tu sauves j dans une autre variable et tu te sers de cette autre variable?
i=i+1
k=j

Caillou

PS : si tu postes un bout du fichier, il me semble que ce serait plus clair
 
Re : boucle en fonction de "i-1"??

donc au moment où tu incrémentes ton i, tu sauves j dans une autre variable et tu te sers de cette autre variable?
i=i+1
k=j



j'ai mis en pj le fichier "d'arrivée" (fb dans la macro) avec en rouge ceux que je souhaite copier d'une autre classeur (f1 dans la macro).
Le problème c'est que le nombre d'outil à controler par pylone varie, en fonction d'un nombre situé en S du fichier f1.Si ce nombre d'outil a controler est de 1, pas de problème puisque le pylone suivant se trouvera à laligne du dessous, par contre si ce nombre est plus elevé (2, 3, 4 ou 5), cela decalera la ligne ou se trouvera le pylone suivant; En effet, je pense que le fichier joint sera util pour comprendre!!

J'ai essayé une nouvelle macro:

Sub controle_outils()
Set don1 = Workbooks("nom_fichier.xls").Sheets("feuil1")
donn1 = don1.Cells(5, 3)
Set f1 = Workbooks(donn1).Sheets("Feuil1") ' bdd
Set donB = Workbooks("nom_fichier.xls").Sheets("feuil1")
donnB = donB.Cells(11, 3)
Set fB = Workbooks(donnB).Sheets("feuille1") ' pv ctrl outil
Set fC = Workbooks(donnB).Sheets("feuille2")



nb_pylone = 0

While f1.Cells(nb_pylone + 7, 2) <> Empty
nb_pylone = nb_pylone + 1

Wend

i = 0
c = 1

While i < nb_pylone And (i + (c - 1) + 21) < 38
fB.Cells(2, 35) = f1.Cells(1, 2)
fB.Cells(4, 10) = f1.Cells(7, 3)
fC.Cells(3, 35) = f1.Cells(1, 2)
fC.Cells(4, 10) = f1.Cells(7, 3)

If i = 0 Then
c = 1
ElseIf i > 0 Then
b = f1.Cells(i + 7, 19)
c = b / 4

a = f1.Cells(i + 7, 19) 'nbre de pieux pâr pylone

If a < 5 Then
fB.Cells(i + (c - 1) + 21, 14) = f1.Cells((i + 7), 2)
fB.Cells(i + 21 + (c - 1), 20) = 1
fB.Cells(i + 21 + (c - 1), 24) = f1.Cells(i + 7, 20)

ElseIf 4 < a And a < 9 Then

fB.Cells(i + (c - 1) + 21, 14) = f1.Cells((i + 7), 2) 'numero de pylone
fB.Cells(i + 21 + (c - 1), 20) = 1
fB.Cells(i + 22 + (c - 1), 20) = 2
fB.Cells(i + 21 + (c - 1), 24) = f1.Cells(i + 7, 20)
fB.Cells(i + 22 + (c - 1), 24) = f1.Cells(i + 7, 20)

ElseIf 8 < a And a < 13 Then
fB.Cells(i + (c - 1) + 21, 14) = f1.Cells((i + 7), 2) 'numero de pylone
fB.Cells(i + 21 + (c - 1), 20) = 1
fB.Cells(i + 22 + (c - 1), 20) = 2
fB.Cells(i + 23 + (c - 1), 20) = 3
fB.Cells(i + 21 + (c - 1), 24) = f1.Cells(i + 7, 20)
fB.Cells(i + 22 + (c - 1), 24) = f1.Cells(i + 7, 20)
fB.Cells(i + 23 + (c - 1), 24) = f1.Cells(i + 7, 20)

End If

i = i + 1
End If
Wend

End Sub


petite info supplementaire, le tableau débute à la ligne 21 et se termine à la ligne 38, pour reprendre sur la feuille 2 ensuite.ceci est également un mystere pour moi!
 

Pièces jointes

Re : boucle en fonction de "i-1"??

re,

Regardes le fichier joint,
car pour ton exemple n'ayant pas les tenants, j'ai du mal à suivre
J'ai mis un exemple simplifié et la macro correspondante

a+
Caillou

bonjour!
pardon d'avoir repondu aussi tard après la rapidité de tes réponses, mon pc ramé donc je n'ai pas put tester la macro. Merci beaucoup, en ajoutant deux trois lignes à ton exemple c'est exactement ce que je souhaite!!grâce à toi je peux faire les autres feuilles semblables à celles ci!

j'ai encore une questipn par contre... Je souhaite que mon tableau d'arrivée ne fasse que 17 lignes, pour des questions d'impressions. Est ce possible d'inserer dans lamacro un code qui dise "rempli jusqu'à laligne 38(puisque je commence à la 21) puis passe à la ligne 21 de la feuille 2"??
merci encore pour ton aide
 
Re : boucle en fonction de "i-1"??

Salut,

Pour faire une boucle (i-1), ne suffit-il pas simplement de mettre Step -1 à la fin???

Exemple:
For i = Cells(1, 1).CurrentRegion.Rows.Count To 1 Step -1
Cells(i, 1).Value = "toto" Then Cells(i, 1).EntireRow.Delete
Next
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
645
  • Question Question
XL 2021 VBA excel
Réponses
4
Affichages
408
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…