Insérer un nombre de lignes prédéfinies

bonjour,

Etant novice en macro et VBA, je sollicite votre aide afin de finaliser un projet.

Pour faire simple, ce fichier serait à remplir par des entreprises extérieures (de 1 à n), le nombre étant importante pour la suite.

Au départ, nous devons donner le nb d'entreprises qui doivent répondre à ce fichier.

De ce nombre, il faut insérer autant de ligne entre chaque ligne.

Ajouter un colonne en C

Et écrire le nom de ces entreprises sur chaque ligne crées ou inversement, écrire le nom des entreprises, et ensuite insérer les lignes.

J'aimerai automatiser cette procédure si possible.

Je vous remercie d'avance.

image6 image7
12test.xlsx (116.15 Ko)

bonjour,

une proposition

Sub aargh()
    Dim v()
    x = Application.InputBox("nombre de vendeurs à insérer")
    ReDim v(1 To x)
    For i = 1 To x
        v(i) = "vendor " & i
    Next i
    dl = Cells(Rows.Count, 1).End(xlUp).Row
    dlx = dl + 1
    Columns(3).Insert shift:=xlToRight
    Columns(1).Insert shift:=xlToRight
    For i = 2 To dl
        Cells(i, 1) = i
        Cells(dlx, 1).Resize(x) = i
        Cells(dlx, 4).Resize(x) = Application.Transpose(v)
        dlx = dlx + x
    Next i
    Cells.Sort key1:=Range("A1"), order1:=xlAscending, Header:=xlYes
    Range("E2:AT2").Copy Range("E3:AT" & dlx - 1)
End Sub

MERCI bcp H2SO4

Cela fonctionne très bien.

Je peux aller plus loin dans ton developpement svp ?

Serait il possible lorsque tu as donné le nombre de vendeur, d'ensuite ouvrir une autre boite de dialogue où tu puisses y mettre les noms ? Et finalement d'insérer les x lignes entre chaques lignes.

Cdlt

Patrick

H2SO4

J'ai mis des commentaires à ton code pour m'y retrouver, et j'ai réussi à rajouter l'ajout des x vendor par boite de dialogue,

1/ Je n'ai pas saisi comment tu insères la colonne A et son utilité ?

Merci de tes conseils.

Sub NbVendors()

'Paramétrage de la variables Vendor

Dim v()

'Ouverture de la boite de dialogue pour donner le nb de vendors

x = Application.InputBox("Nb of Vendors")

'Création des x vendors

ReDim v(1 To x)

For i = 1 To x

v(i) = InputBox("Name of Vendor" & i, "Name ?")

Next i

************************************ A quoi cela sert-il ?

dl = Cells(Rows.Count, 1).End(xlUp).Row

dlx = dl + 1

Columns(3).Insert shift:=xlToRight

Columns(1).Insert shift:=xlToRight

************************************ A quoi cela sert-il ?

For i = 2 To dl

Cells(i, 1) = i

Cells(dlx, 1).Resize(x) = i

Cells(dlx, 4).Resize(x) = Application.Transpose(v)

dlx = dlx + x

Next i

Cells.Sort key1:=Range("A1"), order1:=xlAscending, Header:=xlYes

Range("E2").Copy Range("E2:AT" & dlx - 1)

'Mise en place du titre de la colonne Vendor

Range("D1") = "VENDOR"

End Sub

H2SO4

Dernière petite question (je m'excuse par avance de mes nombreux messages) mais je décortique et j'essaie de comprendre.

Pourquoi toutes mes colonnes sont passées Vertes et avec VTA ?

Merci de ta réponse

[quote="purpleman"]

Sub NbVendors()
   'Paramétrage de la variables Vendor
    Dim v()

   'Ouverture de la boite de dialogue pour donner le nb de vendors
    x = Application.InputBox("Nb of Vendors")

   'Création des x vendors
    ReDim v(1 To x)
        For i = 1 To x
            v(i) = InputBox("Name of Vendor" & i, "Name ?")
        Next i

    dl = Cells(Rows.Count, 1).End(xlUp).Row ' dl=nombre de lignes avant l'insertion des vendeurs
    dlx = dl + 1 ' dlx = ligne à partir de laquelle il faut insérer les vendeurs
    Columns(3).Insert shift:=xlToRight 'on insère une colonne destinée à recevoir les vendeurs
    Columns(1).Insert shift:=xlToRight 'on insère une colonne destinée à recevoir une clé de tri

'pour chaque ligne trouvée dans l'intervalle 2 à DL
    For i = 2 To dl
        Cells(i, 1) = i 'on met le numéro de ligne dans la clé de tri
' on insère les vendeurs en fin de tableau pour ce numéro de ligne        
Cells(dlx, 1).Resize(x) = i 'numéro de ligne
        Cells(dlx, 4).Resize(x) = Application.Transpose(v) ' tableau des vendeurs
        dlx = dlx + x 'on incrémente le dlx
    Next i
    'une fois toutes les lignes ajoutées
    'on trie l'ensemble des lignes sur base de la colonne 1
    Cells.Sort key1:=Range("A1"), order1:=xlAscending, Header:=xlYes
'on recopie les cellules E2 à AT2 vers le bas    !!! cette ligne a été modifiée car elle contenant une erreur cfr ton dernier message
Range("E2:AT2").Copy Range("E3:AT" & dlx - 1)

    'Mise en place du titre de la colonne Vendor
    Range("D1") = "VENDOR"
End Sub

Merci pour les explications.

Par contre, serait il possible de laisser les colonnes (non VTA) comme elles sont ? svp

Cdlt

Effectivment je viens de regarder; toutes mes colonnes blanches ne doivent pas être touchées par le processus.

Pourquoi svp là, elles passent toutes en vert et VTA ?

Il ne faut surtout pas qu'elle change.

y a t il un moyen ?

purpleman a écrit :

Merci pour les explications.

Par contre, serait il possible de laisser les colonnes (non VTA) comme elles sont ? svp

Cdlt

j'ai normalement fait une adaptation pour cela dans le dernier code fourni.

MERCI H2SO4

Tout fonctionne correctement.

J'avais pas vu la subtilité.

Je clos le sujet


Mais avant de clore le sujet...

Je ne vois pas de difference entre le 1er et le 2e code ?

c'est la même ligne !

Range("E2:AT2").Copy Range("E3:AT" & dlx - 1)

Peux tu préciser la modif alors svp ?

merci

j'ai modifié dans les 2 messages. l'original se trouve dans ton message.

H2SO4 bj

J'ai rouvert le sujet car je viens de m'aperçevoir que le copie de la ligne à la fin n'est pas bon.

en effet, le code est :

Range("E2:AT2").Copy Range("E3:AT" & dlx - 1)

Or dans sa copie, il ne saute pas les x lignes vendor du départ et donc saute les lignes avant de faire le copier coller

Avant le copie tu peux voir que certains cellules (en jaune) sont déjà renseignés comme le montre la première image, or après la copie je n'ai plus ces données !

Je cherche depuis hier soir à changer cette ligne de code mais sans succès.

J'en appelle à tes conseils. svp

Merci

image9 image10

bonjour,

code adapté

Sub NbVendors()
   'Paramétrage de la variables Vendor
    Dim v()

   'Ouverture de la boite de dialogue pour donner le nb de vendors
    x = Application.InputBox("Nb of Vendors")

   'Création des x vendors
    ReDim v(1 To x)
        For i = 1 To x
            v(i) = InputBox("Name of Vendor" & i, "Name ?")
        Next i

    dl = Cells(Rows.Count, 1).End(xlUp).Row ' dl=nombre de lignes avant l'insertion des vendeurs
    dlx = dl + 1 ' dlx = ligne à partir de laquelle il faut insérer les vendeurs
    Columns(3).Insert shift:=xlToRight 'on insère une colonne destinée à recevoir les vendeurs
    Columns(1).Insert shift:=xlToRight 'on insère une colonne destinée à recevoir une clé de tri

'pour chaque ligne trouvée dans l'intervalle 2 à DL
    For i = 2 To dl
        Cells(i, 1) = i 'on met le numéro de ligne dans la clé de tri
' on insère les vendeurs en fin de tableau pour ce numéro de ligne
        Cells(dlx, 1).Resize(x) = i 'numéro de ligne
        Cells(dlx, 4).Resize(x) = Application.Transpose(v) ' tableau des vendeurs
        Range("E" & i & ":AT" & i).Copy Cells(dlx, "E").Resize(x)
        dlx = dlx + x 'on incrémente le dlx
    Next i
    'une fois toutes les lignes ajoutées
    'on trie l'ensemble des lignes sur base de la colonne 1
    Cells.Sort key1:=Range("A1"), order1:=xlAscending, Header:=xlYes

    'Mise en place du titre de la colonne Vendor
    Range("D1") = "VENDOR"
End Sub

H2SO4

merci de ton aide.

J'ai posté un message pour ajouter un développement à la suite de celui là.

Je ferme ce post et je cherche toujours pour la suite.

Patrick

Rechercher des sujets similaires à "inserer nombre lignes predefinies"