Boucle For Next

T

Tintin

Guest
Bonjour a tous

dans une macro j'ai 2 boucle , une dans l'autre
la 1ere fonctionne mais pas la 2e
ex:
For I = 5 To 2000
For J = 5 To 2000

If Workbooks("TOTO.XLS").Sheets("Feuil1").Cells(I, 18) = UserForm3.TBDOSSIER.Text Then

If Workbooks("TATA.XLS").Sheets("Feuil1").Cells(J, 3) = "" Then
end if
end if

next J
next I

si quelqu'un connait une solution?
merci d'avance
 
L

LaurentTBT

Guest
Bonsoir Tintin.

Pour moi, les 2 boucles fonctionnent parfaitement.
Seulement, c'est pas très optimisé:
1 - si ta deuxième condition est remplie, tu n'as rien à exécuter, donc ça sert à rien. Mais je suppose que tu n'as pas tout posté.
2 - Tu relances le premier test pour chaque J, alors que seul I est un paramètre de ce premier test. Donc tu le test 1994 fois pour rien.
Notamment, si pour i=10, par exemple, il est faut, tu fais quand même la boucle sur tous les J.

Voici donc comment j'écrirais tes boucles imbriquées:

Dim i as integer, j as integer
For i=5 to 2000
If Workbooks("TOTO.XLS").Sheets("Feuil1").Cells(I, 18) = UserForm3.TBDOSSIER.Text Then
For j=5 to 2000
If Workbooks("TATA.XLS").Sheets("Feuil1").Cells(J, 3) = "" Then
' ce que tu veux faire si oui ici
end if
next j
end if
next i

As-tu saisi la nuance?

Bonne soirée.
Laurent.
 
T

Tonio

Guest
Bonjour à tous !!!!!!!!!!!

Une petite question de débutant : comment faire dans For Next pour ne pas sélectionner l'ensemble des colonnes, je m'explique :
Sur l'exemple de Tintin on a for i = 5 to 2000 et si on ne veut sélecionner que celle de 5 à 10, de 20 à 30 et de 100à 500, Comment fait-on?

Merci aux courageux qui travaillent aujourd'hui .........
 
P

Pascal76

Guest
Bonjour Tonio et le forum

Pour repondre de façon générale tu peux faire pour garder une seule boucle

For x = 5 To 500

Ton code

If x = 10 Then x = 19
If x = 30 Then x = 99

Next

Cela te fais sauter les valeurs dont tu ne veux pas en gardant une seule boucle

Mais Tu parles de colonnes et tu pars sur une boucle jusqu'à 500 alors juste un petit rappel il y a 256 colonnes maxi dans excel

Bonne journée

Pascal
 
P

Phibou

Guest
Bonjour le fil, le Forum

Pour répondre à Tonio, on peut soit faire 3 boucles différentes soit
mettre ceci :

For i = 5 to 500
if i = 11 then i = 20
if i = 31 then i = 100
' Le traitement
next i

Bonne journée

PhiBou
 
T

Tonio

Guest
Merci à tous les deux, c'est exactement ce qu'il me fallait mais maintenant j'aimerais effacer les colonnes qui n'ont pas été sélectionnées, voila ce que j'ai fai mais la méthode Range de l'objet a échoué. QUE CE PASSE T'IL ????

For R = 1 To 10
For C = 1 To 79
If C = 5 Then C = 15
If C = 20 Then C = 22
If C = 26 Then C = 29
...
range("E:E,F:F,G:G,H:H,I:I,J:J,K:K,L:L,M:M,N:N").Select
range("T:T,U:U").Select
...
Selection.ClearContents
Selection.Delete Shift:=xlToLeft
...



Merci
 

Discussions similaires

Réponses
4
Affichages
356
Réponses
6
Affichages
245
Réponses
11
Affichages
570

Statistiques des forums

Discussions
314 098
Messages
2 105 856
Membres
109 451
dernier inscrit
secretariatprotechservice