OVH Cloud OVH Cloud

VBA à compléter

2 réponses
Avatar
Bru
Bonjour,
Voici du code que je voudrais compléter :

Sub toto()
Range("d2").Select
While ActiveCell <> ""
n = ActiveCell.Value
If n <> 1 Then
Range(ActiveCell.Offset(1), ActiveCell.Offset(n - 1)).EntireRow.Insert
' Ici trouver une commande pour copier (en format texte) la ligne du
dessus sur toutes les lignes insérées, sans incrémenter les chiffres qui
sont recopiés
ActiveCell.Offset(n).Select
Else
ActiveCell.Offset(1).Select
End If
Wend
End Sub

En fait j'ai une source Excel avec une liste d'adresses que je souhaite
utiliser
dans word pour un publipostage d'étiquettes.

Le but est d'automatiser la transformation de ce fichier
source en utilisant la variable n, située colonne d. Cette variable est un
nombre associé à chaque
adresse, et représente le nombre de fois que la même adresse va devoir être
imprimée (sur étiquettes autocollantes).

Voici un exemple :
Supposons qu'au départ mon fichier source contient une colonne avec 100 noms
de personnes différentes, puis une colonne avec les adresses, puis une
colonne avec pour variable le nombre 10 pour 50 adresses et 1 pour les 50
autres, il faudra donc imprimer 550 étiquettes.

Je voudrais donc que ma macro puisse me générer une nouvelle feuille avec
les 550 adresses (dont 50 adresses répétées identiquement 10 fois ligne
après ligne, et 50 autres une seule fois).

Quelqu'un saurait il m'aider à trouver la solution ?
merci beaucoup

2 réponses

Avatar
Jean-François Aubert
Salut Bru,

La Feuil1 est la feuille qui comporte les adresses de départ.
La Feuil2 est la feuille qui comportera les X enregistrements pour l'impression des étiquettes.

Sub yy()
Dim plg, c, i
Sheets("Feuil1").Select
Set plg = Sheets("Feuil1").[D2:D65536].SpecialCells(xlCellTypeConstants, xlNumbers)
For Each c In plg
For nb = 1 To c.Value
i = i + 1
Sheets("Feuil1").Range(Cells(c.Row, 1), Cells(c.Row, 4)).Copy _
Destination:=Sheets("Feuil2").Cells(i, 1)
Next
Next
Set plg = Nothing
End Sub

--
Amicalement

Jean-François Aubert
{Vaudois de la Côte Lémanique}


"Bru" a écrit dans le message de news:bubt6k$6o6$
Bonjour,
Voici du code que je voudrais compléter :

Sub toto()
Range("d2").Select
While ActiveCell <> ""
n = ActiveCell.Value
If n <> 1 Then
Range(ActiveCell.Offset(1), ActiveCell.Offset(n - 1)).EntireRow.Insert
' Ici trouver une commande pour copier (en format texte) la ligne du
dessus sur toutes les lignes insérées, sans incrémenter les chiffres qui
sont recopiés
ActiveCell.Offset(n).Select
Else
ActiveCell.Offset(1).Select
End If
Wend
End Sub

En fait j'ai une source Excel avec une liste d'adresses que je souhaite
utiliser
dans word pour un publipostage d'étiquettes.

Le but est d'automatiser la transformation de ce fichier
source en utilisant la variable n, située colonne d. Cette variable est un
nombre associé à chaque
adresse, et représente le nombre de fois que la même adresse va devoir être
imprimée (sur étiquettes autocollantes).

Voici un exemple :
Supposons qu'au départ mon fichier source contient une colonne avec 100 noms
de personnes différentes, puis une colonne avec les adresses, puis une
colonne avec pour variable le nombre 10 pour 50 adresses et 1 pour les 50
autres, il faudra donc imprimer 550 étiquettes.

Je voudrais donc que ma macro puisse me générer une nouvelle feuille avec
les 550 adresses (dont 50 adresses répétées identiquement 10 fois ligne
après ligne, et 50 autres une seule fois).

Quelqu'un saurait il m'aider à trouver la solution ?
merci beaucoup




Avatar
Bru
Merci ! ça marche impecable !

"Jean-François Aubert" <à a écrit dans le message de
news:
Salut Bru,

La Feuil1 est la feuille qui comporte les adresses de départ.
La Feuil2 est la feuille qui comportera les X enregistrements pour
l'impression des étiquettes.


Sub yy()
Dim plg, c, i
Sheets("Feuil1").Select
Set plg = Sheets("Feuil1").[D2:D65536].SpecialCells(xlCellTypeConstants,
xlNumbers)

For Each c In plg
For nb = 1 To c.Value
i = i + 1
Sheets("Feuil1").Range(Cells(c.Row, 1), Cells(c.Row, 4)).Copy _
Destination:=Sheets("Feuil2").Cells(i, 1)
Next
Next
Set plg = Nothing
End Sub

--
Amicalement

Jean-François Aubert
{Vaudois de la Côte Lémanique}


"Bru" a écrit dans le message de
news:bubt6k$6o6$

Bonjour,
Voici du code que je voudrais compléter :

Sub toto()
Range("d2").Select
While ActiveCell <> ""
n = ActiveCell.Value
If n <> 1 Then
Range(ActiveCell.Offset(1), ActiveCell.Offset(n -
1)).EntireRow.Insert


' Ici trouver une commande pour copier (en format texte) la ligne
du


dessus sur toutes les lignes insérées, sans incrémenter les chiffres qui
sont recopiés
ActiveCell.Offset(n).Select
Else
ActiveCell.Offset(1).Select
End If
Wend
End Sub

En fait j'ai une source Excel avec une liste d'adresses que je souhaite
utiliser
dans word pour un publipostage d'étiquettes.

Le but est d'automatiser la transformation de ce fichier
source en utilisant la variable n, située colonne d. Cette variable est
un


nombre associé à chaque
adresse, et représente le nombre de fois que la même adresse va devoir
être


imprimée (sur étiquettes autocollantes).

Voici un exemple :
Supposons qu'au départ mon fichier source contient une colonne avec 100
noms


de personnes différentes, puis une colonne avec les adresses, puis une
colonne avec pour variable le nombre 10 pour 50 adresses et 1 pour les
50


autres, il faudra donc imprimer 550 étiquettes.

Je voudrais donc que ma macro puisse me générer une nouvelle feuille
avec


les 550 adresses (dont 50 adresses répétées identiquement 10 fois ligne
après ligne, et 50 autres une seule fois).

Quelqu'un saurait il m'aider à trouver la solution ?
merci beaucoup