XL 2019 Ajouter des colonnes dans plusieurs feuilles avec les données en dynamique (Mise en page et données)

ryfalcon

XLDnaute Nouveau
Bonjour à tous,

Je vous expose les faits.

J'ai un fichier Excel utiliser pour la saisie des données et j'utilise plusieurs feuilles.

J'ai créer un bouton sur chaque "Feuille OBJECTIF". Le bouton (+) permet d'ajouter une colonne à la suite de la précédente avec le codes et la mise en page identique. ça c'est ok!

Il y a un repère dans la colonne D2 "IXXXI" afin de placer la colonne à insérer avant ce repère. ça c'est ok!

Puis les infos de la "Feuille OBJECTIF 1" sont stockez dans les colonnes [AE à AZ] de la "feuille Listing" pour un export publipostage, ça c'est ok!

Il y a un repère dans la colonne BA "IAAAI" afin de placer les colonnes à insérer avant ce repère. ça c'est ok!

Je souhaiterai que lorsque j'appui sur le Bouton + de la "feuille OBJECTIF 1", il ajoute aussi dans la "feuille Listing" après la colonne [AZ] les colonnes identiques de [AE à AZ] pour y stocker les données de la nouvelle colonne ajouter dans la "feuille OBJECTIF 1".

Merci beaucoup pour votre aide.
 

Pièces jointes

  • Formulaire PPA 2023 V6.-forum.xlsm
    134.1 KB · Affichages: 3

job75

XLDnaute Barbatruc
Bonjour ryfalcon, bienvenue sur XLD,

Ce n'est pas clair :

1) dans la feuille "Listing" les nouvelles données doivent être stockées dans de nouvelles colonnes ou dans une nouvelle ligne ?

2) vous ne parlez pas des données des feuilles "Objectif 2", "Objectif 3" etc...

A+
 

ryfalcon

XLDnaute Nouveau
Bonjour ryfalcon, bienvenue sur XLD,

Ce n'est pas clair :

1) dans la feuille "Listing" les nouvelles données doivent être stockées dans de nouvelles colonnes ou dans une nouvelle ligne ?

2) vous ne parlez pas des données des feuilles "Objectif 2", "Objectif 3" etc...

A+
Bonjour,
Merci beaucoup pour l'aide apporté!!!

Oui désolé, en fait les données doivent être stockées dans les nouvelles colonnes.

J'ai réussi à avancer et un créer une macro sur LINSTING pour ajouter les colonnes dans listing, il ne reste plus qu'a faire en sorte que les données de la nouvelle colonne dans OBJECTIF 1 soient transmise aux nouvelles colonnes dans LISTING.

a la fin je fusionnerai les 2 macro OBJETCIF et LISTING, c'est pour vérifier que ça fonctionne séparément.

Je n'ai pas parler de OBJECTIF 2- 5 car ce sera la même chose. J'adapterai donc les macros.

Encore merci pour
 

Pièces jointes

  • Formulaire PPA 2023 V6.-forum.xlsm
    133.3 KB · Affichages: 6

job75

XLDnaute Barbatruc
Si donc la feuille "Listing" ne concerne que la feuille "Objectif 1" placez dans le code de la feuille "Listing" :
VB:
Private Sub Worksheet_Activate()
Dim n%, P As Range, i%
n = Sheets("Objectif 1").Cells(2, Columns.Count).End(xlToLeft).Column - 4 'nombre de nouvelles colonnes
Application.ScreenUpdating = False
Columns("BA").Resize(, Columns.Count - Columns("AZ").Column).Delete 'RAZ
If n = 0 Then Exit Sub
Set P = Columns("AE:AZ") '1ère plage copiée
For i = 1 To n
    P.Copy P.Offset(, P.Columns.Count) 'copier-coller
    Set P = P.Offset(, P.Columns.Count)
    P.Replace "!*$", "!" & Split(Columns(i + 3).Address(0, 0), ":")(0) & "$", xlPart 'MAJ des formules
Next
End Sub
La macro se déclenche quand on active la feuille.
 

Pièces jointes

  • Formulaire PPA 2023 V6.-forum.xlsm
    134.3 KB · Affichages: 4

job75

XLDnaute Barbatruc
Bon avec une InputBox la feuille "Listing" peut traiter n'importe quelle feuille "Objectif" :
VB:
Private Sub Worksheet_Activate()
Dim num As Variant, w As Worksheet, n%, P As Range, i%
num = 1
On Error Resume Next
Do
    num = Application.InputBox("Numéro de la feuille Objectif désirée :", "Feuille Objectif", num)
    If num = False Then Exit Sub 'Annuler
    Set w = Sheets("objectif " & num)
Loop While w Is Nothing
On Error GoTo 0
n = w.Cells(2, Columns.Count).End(xlToLeft).Column - 4 'nombre de nouvelles colonnes
Application.ScreenUpdating = False
Columns("BA").Resize(, Columns.Count - Columns("AZ").Column).Delete 'RAZ
Set P = Columns("AE:AZ") '1ère plage copiée
P.Replace "'*'", "'" & w.Name & "'", xlPart 'nouveau nom
If n = 0 Then Exit Sub
For i = 1 To n
    P.Copy P.Offset(, P.Columns.Count) 'copier-coller
    Set P = P.Offset(, P.Columns.Count)
    P.Replace "!*$", "!" & Split(Columns(i + 3).Address(0, 0), ":")(0) & "$", xlPart 'MAJ des formules
Next
End Sub
 

Pièces jointes

  • Formulaire PPA 2023 V6.-forum.xlsm
    136 KB · Affichages: 3

ryfalcon

XLDnaute Nouveau
Si donc la feuille "Listing" ne concerne que la feuille "Objectif 1" placez dans le code de la feuille "Listing" :
VB:
Private Sub Worksheet_Activate()
Dim n%, P As Range, i%
n = Sheets("Objectif 1").Cells(2, Columns.Count).End(xlToLeft).Column - 4 'nombre de nouvelles colonnes
Application.ScreenUpdating = False
Columns("BA").Resize(, Columns.Count - Columns("AZ").Column).Delete 'RAZ
If n = 0 Then Exit Sub
Set P = Columns("AE:AZ") '1ère plage copiée
For i = 1 To n
    P.Copy P.Offset(, P.Columns.Count) 'copier-coller
    Set P = P.Offset(, P.Columns.Count)
    P.Replace "!*$", "!" & Split(Columns(i + 3).Address(0, 0), ":")(0) & "$", xlPart 'MAJ des formules
Next
End Sub
La macro se déclenche quand on active la feuille.
en fait la feuille listing ne fait que récupérer les infos de tous les Feuilles.

En fait je suis désolé, je suis vraiment débutant.... je ne sais pas si c'est la bonne logique.
le but du fichier :
Les utilisateurs vont remplir les différentes feuilles de couleurs et toutes les infos sont reporter dans la feuille Listing .
A la fin on clique sur le bouton "Générer le document".
Cela créer un fichier word avec toutes les infos remis en forme en fonction des infos récupérer de la feuilles Listing.


Sauf si vous avez une méthode plus efficace pour créer un publipostage.
merci beaucoup pour votre aide
 

ryfalcon

XLDnaute Nouveau
Bon avec une InputBox la feuille "Listing" peut traiter n'importe quelle feuille "Objectif" :
VB:
Private Sub Worksheet_Activate()
Dim num As Variant, w As Worksheet, n%, P As Range, i%
num = 1
On Error Resume Next
Do
    num = Application.InputBox("Numéro de la feuille Objectif désirée :", "Feuille Objectif", num)
    If num = False Then Exit Sub 'Annuler
    Set w = Sheets("objectif " & num)
Loop While w Is Nothing
On Error GoTo 0
n = w.Cells(2, Columns.Count).End(xlToLeft).Column - 4 'nombre de nouvelles colonnes
Application.ScreenUpdating = False
Columns("BA").Resize(, Columns.Count - Columns("AZ").Column).Delete 'RAZ
Set P = Columns("AE:AZ") '1ère plage copiée
P.Replace "'*'", "'" & w.Name & "'", xlPart 'nouveau nom
If n = 0 Then Exit Sub
For i = 1 To n
    P.Copy P.Offset(, P.Columns.Count) 'copier-coller
    Set P = P.Offset(, P.Columns.Count)
    P.Replace "!*$", "!" & Split(Columns(i + 3).Address(0, 0), ":")(0) & "$", xlPart 'MAJ des formules
Next
End Sub
j'ai testé votre code ça fonctionne bien. ! Merci
je pense mettre cette fonction dans un bouton afin que qu'il traite toutes les feuilles "objectifs" à la suite.

J'aurai une question ? est il possible de pouvoir nommer les colonnes "LISTING" car toutes les colonnes sont à la suite, mais je n'ai pas de référence, et lors du publipostage, pas moyen de savoir, si c'est dans l'objectif 1 ou 2,....
Pour la feuille OBJECTIF 1, colonne OBJ1A, pour les colonne suivante OBJ1B, OBJ1C, etc...
Pour la feuille OBJECTIF 2 Colonne OBJ2A, pour les colonne suivante OBJ2B, OBJ2C, etc...
Je ne sais pas si je m'exprime clairement?
Un grand merci pour ton aide.
 
Dernière édition:

job75

XLDnaute Barbatruc
Dans la feuille "Listing" il est plus simple d'ajouter une 1ère ligne avec en AE1 le nom de la feuille "Objectif".

Mis entre apostrophes pour que ce nom soit traité par la macro.
 

Pièces jointes

  • Formulaire PPA 2023 V6.-forum.xlsm
    136.4 KB · Affichages: 3

ryfalcon

XLDnaute Nouveau
Dans la feuille "Listing" il est plus simple d'ajouter une 1ère ligne avec en AE1 le nom de la feuille "Objectif".

Mis entre apostrophes pour que ce nom soit traité par la macro.
Merci c'est bien ça!!!. Merci beaucoup. Je n'y sera pas arrivée sans vous !!!

Il me reste la dernière étape :
Récupérer tous les champs de listing et les mettre dans le document WORD. et il faut que je trouve une solution pour qu'il remplisse la page OBJECTIF1 et que les colonnes ajouté de OBJECTIF 1, créer autant de pages supplémentaire qu'il y ai de colonne dans la feuille OBJECTIF 1.

en claire : page avec le tableau OBJECTIF1
il y a 3 colonnes => 1 page OBJECTIF 1 puis 2 pages OBJECTIF 1A, OBJECTIF 1B.


Merci pour tout!!!
 

Discussions similaires

Statistiques des forums

Discussions
312 109
Messages
2 085 383
Membres
102 878
dernier inscrit
asmaa