Résolu relancer une macro avec boucle

meldja

XLDnaute Impliqué
Bonjour,
J'ai une macro qui insère une ligne sur une plage de 7000 lignes en fonction d'un critère.
Pour se faire J'ai créé une boucle :
For i = 2 to Range("C50000").End(xlUp).row

en fonction d'une condition :
If Range("C" & i) > 1 Then
Row(i & ";" & i).insert

Pour l'instant ça marche avec un inputbox ou il faut renseigner le critère 1, 2, 3.. jusqu'à 200. Mais j'aimerais ne pas à avoir à relancer la macro 200 fois en saisissant les valeurs du critère dans l'inputbox

En fait il faut la relancer 200 fois en incrémentant le critère >1 puis >2 jusqu'à supérieur à 200
J'ai inséré les valeurs de 1 à 200 dans une autre feuille en essayant de faire boucler le critère sur la feuille ou j'ai les 200 valeurs mais je n'y arrive pas.
Est-ce que quelqu'un a une idée ?
 

dg62

XLDnaute Accro
Bonsoir meldja
Je ne comprends pas trop
Ta condition >1 est valable pour >2 jusque 200
Pourquoi doit tu saisir >2 >3…>200 ? 200 est bien >1 ?
 

meldja

XLDnaute Impliqué
Bonsoir meldja
Je ne comprends pas trop
Ta condition >1 est valable pour >2 jusque 200
Pourquoi doit tu saisir >2 >3…>200 ? 200 est bien >1 ?
Bonjour,
en fait si dans la cellule Cx il y 2, je dois insérer une ligne au dessus, s'il y a 3, je dois insérer 2 lignes ainsi de suite
 

meldja

XLDnaute Impliqué
Bonjour,
en fait si dans la cellule Cx il y 2, je dois insérer une ligne au dessus, s'il y a 3, je dois insérer 2 lignes ainsi de suite
 

frangy

XLDnaute Occasionnel
Bonjour,

Une proposition à tester
VB:
Sub Test()
Dim i As Long, n As Long
    For i = Range("C" & Rows.Count).End(xlUp).Row To 2 Step -1
        n = Range("C" & i).Value
        If n > 1 Then
            Rows(i).Resize(n - 1).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
        End If
    Next i
End Sub
Cordialement.
 

meldja

XLDnaute Impliqué
Bonjour,
Merci pour votre réponse. J'ai testé votre solution mais malheureusement, ça ne fonctionne pas.
Cordialement
 

frangy

XLDnaute Occasionnel
Tu n'obtiendras pas de réponse satisfaisante si tu n'apportes pas plus de précisions.
Essaie de joindre un fichier pour exemple avec ta macro et quelques explications complémentaires sur le résultat attendu (pas de données confidentielles bien sûr).
Cordialement.
 

meldja

XLDnaute Impliqué
Bonjour,
Merci pour votre réponse.
J'ai joint un fichier comme vous le proposez. Dans la première feuille, en colonne C j'ai une série de plusieurs milliers de nombres qui ont une valeur de 1 à 201.
Je dois insérer une ligne si le nombre est égal à 2, deux lignes si le nombre est égal à 3, trois lignes si le nombre est égal à 4, ainsi de suite.
J'utilise la condition "supérieur à" car si j'exécute la macro avec le critère supérieur à 1, tous les nombres à partir de 2 auront une ligne vide au dessus.
si j'exécute la macro une deuxième fois avec le critère supérieur à 2 tous les nombres à partir de 3 auront 2 lignes au dessus, si j'exécute une troisième fois avec le critère supérieur à 3, tous les nombres à partir de 4 auront 3 lignes au dessus, etc..
Je ne sais pas si je suis suffisamment clair. Le moyen que j'ai trouvé c'est de lancer un inputbox pour renseigner le critère mais je dois le faire 201 fois (ça à changer depuis le début du post).
Je m'étais dis qu'en saisissant les 201 valeurs en feuille 2 et en bouclant dessus, ça m'éviterais de relancer manuellement la macro, mais je n'y arrive pas.
Cordialement
 

Fichiers joints

frangy

XLDnaute Occasionnel
La macro que je t'ai envoyé réalise exactement ce que tu indiques.
Si la valeur de la cellule de la colonne C est égale à 2, on insère 1 ligne,
Si la valeur de la cellule de la colonne C est égale à 3, on insère 2 lignes,
...
Si la valeur de la cellule de la colonne C est égale à 201, on insère 200 lignes,

Tu n'as donc pas à exécuter la procédure 201 fois.
Il y a sûrement encore quelque chose qui m'échappe !
Cordialement.
 

Fichiers joints

meldja

XLDnaute Impliqué
Bonjour,
Autant pour moi, j'ai du planer. Effectivement, ça répond exactement à mon besoin.
Désolé de t'avoir fait perdre ton temps. En tout cas merci beaucoup pour ton aide et ta patience.
Bon week end
 

meldja

XLDnaute Impliqué
C'est bête mais je ne vois pas comment marquer cette discussion "résolue". J'ai même fait une recherche sur ce forum mais je ne dois pas utiliser les bons mots clés. Si quelqu'un peut m'éclairer ?
 

Discussions similaires


Haut Bas