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

comment faire une boucle un nb de fois variable ?

Phillip

XLDnaute Occasionnel
Bonjour,

Voilà mon problème. Je vérifie dans un tableau que chaque colonne ne comporte pas plus de x ligne (ici 50). Si elle en comporte plus de 50, j'en laisse 50 et j'insére 3 colonne et je colle le surplus, et je recommence....Mon problème c'est que je fais un boucle un nombre de fois maximum, qui ne peux être connu QU'APRES avoir inséré toutes mes colonnes....! J'ai mis, (voir ci-dessous) que ma boucle s'execute 1 fois, puis juste avant le next, j'incrémente ma valeur max...mais ma boucle ne s'éxecute qu'une fois !! Comment faire simplement, sans tout réécrire ? Merci !!


' boucle pour compter le nombre de lignes, trier et rajouter des colonnes
col = 1
newboucle2 = 1
For I = 1 To newboucle2
plig = 4
'compter le nombre de lignes, pour décider de séparer ou pas
Set AC = Cells(plig, col)
While AC <> ''
plig = plig + 1
Set AC = Cells(plig, col)
Wend

nblig = plig - 1


'Si j'ai moins 50 lignes, je trie simplement
If nblig <= 50 Then
Set sort150 = Range(Cells(4, col), Cells(2000, col + 1))
sort150.Select
Selection.Sort Key1:=sort150, Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom

'pour couper et coller les lignes en trop
Else
Cells(4, col + 3).Select
Selection.EntireColumn.Insert
Selection.ColumnWidth = 26.29
Cells(4, col + 4).Select
Selection.EntireColumn.Insert
Selection.ColumnWidth = 17.29
Cells(4, col + 5).Select
Selection.EntireColumn.Insert
Selection.ColumnWidth = 3.5
Range(Cells(51, col), Cells(nblig, col + 1)).Select
Selection.Cut
Cells(4, col + 3).Select
ActiveSheet.Paste
Range(Cells(3, col + 3), Cells(3, col + 4)).Value = entetecol
End If


'boucle pour compter le nombre de colonnes apres insertion de colonnes
Dim newboucle2max As Range
Set newboucle2max = Cells(4, newboucle2)
While newboucle2max <> ''
newboucle2 = newboucle2 + 3
Set newboucle2max = Cells(4, newboucle2)
Wend
newboucle2 = newboucle2 - 2


col = col + 3


nblig = 0
Next
 

Hervé

XLDnaute Barbatruc
Re:comment faire une boucle un nb de fois variable

Bonjour

une proposition en pièce jointe,

désolé, mais je ne sais pas travailler avec les macros des autres, alors j'ai fait à ma manière

je limite le travail de la macro à 50 colonnes, à toi d'adapter.

j'espère que j'ai pas encore commis une zopette, sinon je suis bon pour payer ma tournée de duvel



Salut
[file name=Classeur1_20050520111229.zip size=12689]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Classeur1_20050520111229.zip[/file]
 

Pièces jointes

  • Classeur1_20050520111229.zip
    12.4 KB · Affichages: 15

Phillip

XLDnaute Occasionnel
Re:comment faire une boucle un nb de fois variable

Génial ! Concis, efficace ! Merci !

Je ne connaissait pas :

1) Cells(65536, i).End(xlUp).Row
2) Range(Cells(51, i), Cells(derligne, i)).Cut Cells(4, i + 1)...

Cependant, la macro ne marche que si on retire DataOption1:=xlSortNormal des paramètres de tri...

La seule chose qui me gêne dans le postulat c'est que i=50, c'est à dire à la fois la limite max de colonnes et de lignes.

Si je voulais avoir un max de 100 lignes, ou pourquoi pas 95 (je ne sais pas ce que mon client (mon père veut), je ne peux pas traiter 100 ou 95 fois mes colonnes, car j'en insère 3 à chaque fois, et je plante à la colonne 256 du tableau....

Jai contourné le problème en utilisant un do....while, et en incrémentant i de3 à chaque fois (sinon mon i+1 n'atteignait jamais ma valuer max, et je plantait en bord de feuille également...

C'est moins beau, plus long, mais ça marche (je crois !)

' boucle pour compter le nombre de lignes, trier et rajouter des colonnes
col = 1
newboucle2 = 1
I = 1
Do While I <= newboucle2
plig = 4
'compter le nombre de lignes, pour décider de séparer ou pas
Set AC = Cells(plig, col)
While AC <> ''
plig = plig + 1
Set AC = Cells(plig, col)
Wend

nblig = plig - 1


'Si j'ai moins 50 lignes, je trie simplement
If nblig <= 50 Then
Set sort150 = Range(Cells(4, col), Cells(2000, col + 1))
sort150.Select
Selection.Sort Key1:=sort150, Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom

'pour couper et coller les lignes en trop
Else
Cells(4, col + 3).Select
Selection.EntireColumn.Insert
Selection.ColumnWidth = 26.29
Cells(4, col + 4).Select
Selection.EntireColumn.Insert
Selection.ColumnWidth = 17.29
Cells(4, col + 5).Select
Selection.EntireColumn.Insert
Selection.ColumnWidth = 3.5
Range(Cells(51, col), Cells(nblig, col + 1)).Select
Selection.Cut
Cells(4, col + 3).Select
ActiveSheet.Paste
Range(Cells(3, col + 3), Cells(3, col + 4)).Value = entetecol
End If
'boucle pour compter le nombre de colonnes apres insertion de colonnes
Dim newboucle2max As Range
Set newboucle2max = Cells(4, newboucle2)
While newboucle2max <> ''
newboucle2 = newboucle2 + 3
Set newboucle2max = Cells(4, newboucle2)
Wend
newboucle2 = newboucle2 - 2



col = col + 3


nblig = 0
I = I + 3
Loop
 

Robert

XLDnaute Barbatruc
Repose en paix
Re:comment faire une boucle un nb de fois variable

Salut Philip, Hervé, le forum,

Trop fort et trop rapide ce Hervé... Il m'énerve... Inspiré de son superbe travail voici une macro qui te permet de déterminer le nombre maximum de lignes et qui vérifie si le nombre choisi est acceptable par rapport au nombre maximum de colonnes :

 

mutzik

XLDnaute Barbatruc
Re:comment faire une boucle un nb de fois variable

Bonjour Philipp, Robert, Hervé et le forum

Plus basiquement, j'aimerais savoir à quoi cela doit servir pour (éventuellement) proposer une autre solution car, il me semble qu'avec ce genre de procédures, tu arriveras vite aux 256 colonnes et tu seras toujours emm...bêté

Si tu pouvais nous expliquer ... avec un fichier joint

à+
Bertrand
 

Hervé

XLDnaute Barbatruc
Re:comment faire une boucle un nb de fois variable

Bonsoir

Joli code robert, plus pédagogique que le miens.

je rejoint mutzik dans sa demande d'explication.

Pourquoi rajouter 3 colonnes ?

Salut
 

Discussions similaires

Réponses
25
Affichages
1 K
Réponses
12
Affichages
717
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…