Dupliquer des lignes

Jocelyn

XLDnaute Barbatruc
Bonjour le Forum,

Voila j'aurais besoin de votre aide pour dupliquer des lignes, je m'explique dans le fichier joint j'ai une feuille base la colonne A contient des noms de ville, la colonne B le numéro de département et la colonne C un nombre d'etablissement.

le but est d'avoir en colnne A de la feuille "resultat attendu" autant de ligne avec la ville que le chiffre de la colonne C de la feuille base par rapport au nom de la ville.

voir le fichier il sera plus compréhensible je pense

http://cjoint.com/?helI6TrwFO

Jocelyn
 

ERIC S

XLDnaute Barbatruc
Re : Dupliquer des lignes

Bonjour

a tester et adapter

Sub essai()
Sheets("resultat attendu").Cells.ClearContents
derligne = Range("A65536").End(xlUp).Row
For i = 2 To derligne
nom = Cells(i, 1).Value
nombre = Cells(i, 3).Value
derligne1 = Sheets("resultat attendu").Range("A65536").End(xlUp).Row
Sheets("resultat attendu").Select
Range(Cells(derligne1 + 1, 1), Cells(derligne1 + nombre, 1)).Value = nom
Sheets("base").Select
Next
End Sub
 

Jocelyn

XLDnaute Barbatruc
Re : Dupliquer des lignes

Bonjour Eric S,

pour commencer merci de m'avoir répondu :) :)

Comme tu as du deja t'en rendre compte compte moi et le VBA on est faché enfin lui est faché avec moi et ca continue a ce confirmer.

J'ai inséré un module dans le fichier exemple et j'ai collé ton code dedans mais quand je la lance elle m'éface la feuille "résultat attendu" mais n'ecrit rien.

Donc soit ce n'est pas tout a fait au point soit je n'ais pas su la mettre en place ce qui est plus probable.

Jocelyn
 

porcinet82

XLDnaute Barbatruc
Re : Dupliquer des lignes

Salut Jocelyn, Eric,

Ca fait plaisir de vous croiser !!!

Jocelyn, voila le code mofidier qui fait exactement ce que tu veux, j'ai juste fais 2 ou 3 modif par rapport au fichier d'Eric :p

Tu le colles dans un module standard et ca devrait le faire :
PHP:
Sub essai()
Dim i%, nom As String, dep As Byte, nombre%
Sheets("resultat attendu").Cells.ClearContents
With Sheets("base")
    For i = 2 To .Range("A65536").End(xlUp).Row
        nom = .Cells(i, 1).Value
        dep = .Cells(i, 2).Value
        nombre = .Cells(i, 3).Value
        derligne1 = Sheets("resultat attendu").Range("A65536").End(xlUp).Row
        Sheets("resultat attendu").Select
        Range(Cells(derligne1 + 1, 1), Cells(derligne1 + nombre, 1)).Value = nom
        Range(Cells(derligne1 + 1, 2), Cells(derligne1 + nombre, 2)).Value = dep
        .Select
    Next i
End With

Au plaisir,

@+
 

Jocelyn

XLDnaute Barbatruc
Re : Dupliquer des lignes

Re,
Bonjour Porcinet82,

Plaisir partagé

heureusement que vous, les spécialistes des macro etes la autrement dur dur.

Ton code fonctionne parfaitement.:)

Malheureusement je reviendrais vers vous je viens de croiser mon patron et je pense qu'il ne m'avait pas donné tous les éléments :mad:

Un grand merci

Jocelyn

PS :

J'étais parvenu a (voir exemple en fichier joint) par formule matricielles mais avec 2 restrictions obligation de trier la feuille base par ordre décroissant sur la colonne C et l'autre restriction dut au nombre de lignes a traité trés trés (trop) long sur le véritable Fichier. donc pratiquement ingérable :eek:

http://cjoint.com/?hem50SUf2w

et oui je dois bien reconnaitre que les formulistes sont plus vite bloqués que les macrotistes :D
 

ERIC S

XLDnaute Barbatruc
Re : Dupliquer des lignes

merci porcinet,

j'avais essayé de dépanner Jocelin mais mon temps était compté et effectivement je ne forçais pas la feuille base en première partie (je la considérais active par défaut)

de plus j'ai été surpris car j'étais parti sur

Sheets("resultat attendu").Range(Cells(derligne1 + 1, 1), Cells(derligne1 + nombre, 1)).Value = nom

mais cela n'a pas l'air de fonctionner
peux-tu me le confirmer ?

A+
 

Hervé

XLDnaute Barbatruc
Re : Dupliquer des lignes

bonjour tout le monde


eric, pour que ce type de syntaxe fonctionne, il faut que tu fasses référence de la feuille pour chaque élément du range (pas clair du tout moi :()

With Sheets("resultat attendu")
.Range(.Cells(derligne1 + 1, 1), .Cells(derligne1 + nombre, 1)).Value = nom
End With

salut
 

Monique

Nous a quitté
Repose en paix
Re : Dupliquer des lignes

Bonjour,

Je ne sais pas si c'est plus rapide ou plus lent.

Les 3 plages nommées par Decaler(etc) :
Ville
NoDep
NbEt

En A2 :
=INDEX(Ville;1)

En A3 puis copier-coller :
=SI(SOMME(NbEt)<LIGNES(A$2:A3);"";INDEX(Ville;SOMMEPROD(1/NB.SI(A$2:A2;A$2:A2))+(NB.SI(A$2:A2;A2)>=INDEX(NbEt;EQUIV(A2;Ville;0)))))
 

Jocelyn

XLDnaute Barbatruc
Re : Dupliquer des lignes

re,
Bonjour Hervé, Monique,:)

content de vous croiser

Hervé merci d'avoir répondu a Eric

Monique ta formule est moins longue en temps de calcul, mais la j'attend les nouvelles instructions car je croix qu'il va y avoir plus de conditions répondant a des colonnes supplémentaires :mad: .je pense que j'aurais des nouvelles d'ici a jeudi.

En attendant merci a tous et toutes

Jocelyn
 

ERIC S

XLDnaute Barbatruc
Re : Dupliquer des lignes

Re à tous

dans ce genre de pb, les formules présentent le risque d'un oubli de mise à jour lorsque les enregistrements évoluent

une variante en enlevant les select, un mix porcinet, hervé et moi......

Sub essai()
Dim i%, nom As String, dep As Byte, nombre%
Sheets("resultat attendu").Cells.ClearContents
With Sheets("base")
For i = 2 To .Range("A65536").End(xlUp).Row
nom = .Cells(i, 1).Value
dep = .Cells(i, 2).Value
nombre = .Cells(i, 3).Value
derligne1 = Sheets("resultat attendu").Range("A65536").End(xlUp).Row
With Sheets("resultat attendu")
.Range(.Cells(derligne1 + 1, 1), .Cells(derligne1 + nombre, 1)).Value = nom
.Range(.Cells(derligne1 + 1, 2), .Cells(derligne1 + nombre, 2)).Value = dep
End With
Next i
End With
End Sub

A + pour la suite, je reste en alerte sur le fil
 

Discussions similaires

Statistiques des forums

Discussions
312 331
Messages
2 087 360
Membres
103 529
dernier inscrit
moket07