Je n'arrive pas à faire une boucle.

Résolu/Fermé
ODR47 Messages postés 5 Date d'inscription lundi 6 juin 2016 Statut Membre Dernière intervention 8 juin 2016 - 6 juin 2016 à 19:51
ODR47 Messages postés 5 Date d'inscription lundi 6 juin 2016 Statut Membre Dernière intervention 8 juin 2016 - 8 juin 2016 à 11:07
Bonjour à tous,
Débutant en VBA vous voudrez bien excuser mes questions mais sachez que j'ai beaucoup cherché avant de vous consulter mais je suis coincé.
J'ai un fichier Excel de moto qui reprend globalement 8 colonnes :
REFERENCE - TYPE-MARQUE-CYLINDREE-MODELE-ANNEE_DEBUT-ANNEE_FIN-Durée
82RH200598 Moto DAELIM 125 VL 125 DAYSTAR 2003 2014 11
82RH200599 Moto DAELIM 125 VS 125 SOLUTION 2001 2007 6

La colonne Durée est le nombre d'année pendant lequel le véhicule a été en circulation.
Je souhaite entre chaque ligne copier la ligne d'origine autant de fois que d'années (dans l'exemple 1 : 11 lignes, dans l'exemple 2 : 6 lignes etc)
J'ai trouvé cette macro qui fonctionne très bien :

Sub Insertion()
With Selection
For i = 1 To Range("h2")
.Columns("A:h").Copy
.Columns("A:h").Insert xlShiftDown
Application.CutCopyMode = False
.Cells(1, 1).Select
Next i
End With
End Sub

Mais je n'arrive pas à faire une boucle pour que cela passe à la ligne 2 puis 3 etc.
Ce fichier comporte environ 2300 lignes.
J'ai essayé avec IF en rajoutant un index (1) en colonne 9 et en ne recopiant que les 8 premières en dessous mais ça ne marche pas.

Si quelqu'un peut m'aider ce serait vraiment sympa.
Merci d'avance

2 réponses

eriiic Messages postés 24578 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 31 mai 2024 7 221
6 juin 2016 à 20:17
Bonjour,

essaie avec ça :
Sub dupliq()
    Const nbcol As Long = 8
    Dim datas, result, lig As Long, lig2 As Long, nblig As Long, i As Long, col As Long
    
    datas = [A1].Resize(Cells(Rows.Count, 1).End(xlUp).Row, nbcol)
    lig2 = 2
    Application.ScreenUpdating = False
    For lig = 2 To UBound(datas)
        nblig = datas(lig, 8)
        ReDim result(1 To datas(lig, 8), 1 To nbcol)
        For i = 1 To nblig
            For col = 1 To nbcol
                result(i, col) = datas(lig, col)
            Next col
        Next i
        Cells(lig2, 1).Resize(UBound(result, 1), UBound(result, 2)) = result
        lig2 = lig2 + nblig
    Next lig
End Sub

eric

0
ODR47 Messages postés 5 Date d'inscription lundi 6 juin 2016 Statut Membre Dernière intervention 8 juin 2016
6 juin 2016 à 21:11
Bonsoir Eriic,
Un immense merci cela fonctionne parfaitement je vais la tester demain sur mon gros fichier et essayer de bien l'assimiler et la comprendre.
Cependant une fois la macro lancée j'ai le message suivant :
"Erreur d'exécution 9 : l'index n'appartient pas à la sélection"
Dois je le passer en "résolu".
N'étant pas super habitué des forums désolé si j'ai omis quelque chose ou n'ai pas été correct.
Merci de ton aide précieuse, c'est là que l'on se rend compte de sa marge de progression.

Olivier
0
eriiic Messages postés 24578 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 31 mai 2024 7 221
Modifié par eriiic le 6/06/2016 à 23:12
En quelle ligne ?
Pas sur mon classeur de test : https://www.cjoint.com/c/FFgvhwviJhK
C'est bien un numérique en H ? (aligné à droite, pas à gauche comme un texte)

PS : c'est peut-être fait exprès, pour 2003-2014 tu notes 11 mais ça fait 12 années.
0
ODR47 Messages postés 5 Date d'inscription lundi 6 juin 2016 Statut Membre Dernière intervention 8 juin 2016 > eriiic Messages postés 24578 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 31 mai 2024
8 juin 2016 à 09:49
Bonjour,
Désolé de ce silence mais j'ai pas mal bossé sur le fichier hier et n'y arrive toujours pas.
Le fichier fait en fait +7000 lignes. J'ai vérifié le format numérique à droite et rajouté 1 pour avoir le bon nombre d'années mais rien n'y fait.
Je joins un extrait du fichier http://www.cjoint.com/c/FFihRMEum2K dans lequel j'ai collé la macro.
D'avance merci pour votre aide.
0
eriiic Messages postés 24578 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 31 mai 2024 7 221
8 juin 2016 à 10:47
Bonjour,

regarde les lignes 1617 et 5432
eric
0
ODR47 Messages postés 5 Date d'inscription lundi 6 juin 2016 Statut Membre Dernière intervention 8 juin 2016 > eriiic Messages postés 24578 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 31 mai 2024
8 juin 2016 à 11:07
Bonjour,
Il faut vraiment tout regarder, je ferai plus attention la prochaine fois.
J'ai corrigé les 2 lignes et la macro passe parfaitement.
Un grand merci je vais pouvoir terminer.
Bien cordialement
Olivier
0
ccm81 Messages postés 10862 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 30 mai 2024 2 408
6 juin 2016 à 20:21
Bonjour

Un exemple
http://www.cjoint.com/c/FFgsvCfZQte

Cdlmnt
0
ODR47 Messages postés 5 Date d'inscription lundi 6 juin 2016 Statut Membre Dernière intervention 8 juin 2016
8 juin 2016 à 09:52
Bonjour,
Un grand merci pour cette macro, ce n'est pas exactement ce dont j'ai besoin mais je la garde car elle me servira certainement et vais essayer de la combiner avec une autre pour arriver au résultat. .
cordialement
0