XL 2013 Création d'une colonne dans plusieurs feuilles

louloubru

XLDnaute Junior
Bonjour à tous,

je débute sur VBA...

J'essaie d'insérer une colonne dans plusieurs feuilles de mon classeur (mais pas toutes). Comme je vais devoir souvent agir sur cette sélection de feuilles, j'ai d'abord tenté de créer un vecteur contenant le nom de feuilles en question pour ne pas avoir à les écrire à nouveau à chaque fois :

Dans mon code général :

Public Noms_feuilles

Sub InitialiseNoms_feuilles()
Noms_feuilles = Array("ONF_COFOR", "CNPF_Fran", "Agri", "INRA", "AutRECH", "Enseigt", "PNR-Envt", "Décideurs", "Presse", "Etranger", "Coop-Exp", "Bois-Pépin", "CETEF", "Autre")
End Sub


Puis j'ai créé une boite de dialogue où l'utilisateur entre le nom de la colonne et appuie sur ok.
Ok déclenche :

Private Sub ButtonOK_Click()

'Insère la colonne dans toute les feuilles du classeur contenant des contacts
Dim i As Integer
For i = 1 To 14
Sheets(Noms_feuilles(i)).Columns("BV").Insert
Next i


Call Unload(Me)
End Sub

Cela ne fonctionne pas ...

Une idée ? Malgré mes recherches je n'ai pas trouvé d'aide ailleurs.

En vous remerciant !

Louise
 

job75

XLDnaute Barbatruc
Bonjour louloubru, bienvenue sur XLD,

Commencez déjà par corriger For i = 1 To 14 par For i = 0 To 13

car un Array est toujours en base 0.

Ensuite vous dites que vous entrez le nom de la colonne dans une boîte de dialogue.

Mais vous écrivez Columns("BV"), ce n'est pas cohérent...

A+
 

louloubru

XLDnaute Junior
Bonjour louloubru, bienvenue sur XLD,

Commencez déjà par corriger For i = 1 To 14 par For i = 0 To 13

car un Array est toujours en base 0.

Ensuite vous dites que vous entrez le nom de la colonne dans une boîte de dialogue.

Mais vous écrivez Columns("BV"), ce n'est pas cohérent...

A+

Bonjour,
merci pour votre réponse,
Je change ma boucle. Pour le nom de la colonne, je souhaite que l'utilisateur entre un nom qui sera le nom de la colonne, donc la valeur présente dans la première cellule de ma colonne. Donc j'insère d'abord une colonne (vide) en colonne BV pour cahque feuille. Ensuite j'ajouterai que la valeur de la première cellule de cette colonne dans la même boucle.
La partie qui me pose problème est que je n'arrive pas à insérer une colonne vide dans les feuille que je souhaite, le nom de ces feuilles étant stocké dans un vecteur.

Merci beaucoup,

Louise
 

louloubru

XLDnaute Junior
J'ai maintenant une erreur "incompatibilité de type" avec une débogage demandé sur l'instruction :
Sheets(Noms_feuilles(i)).Columns("BV").Insert

Je remets le code au complet :

Définition de la variable public :

Public Noms_feuilles

Sub InitialiseNoms_feuilles()
Noms_feuilles = Array("ONF_COFOR", "CNPF_Fran", "Agri", "INRA", "AutRECH", "Enseigt", "PNR-Envt", "Décideurs", "Presse", "Etranger", "Coop-Exp", "Bois-Pépin", "CETEF", "Autre")
End Sub

Code associé au bouton :

Private Sub ButtonOK_Click()
'Insère la colonne dans toute les feuilles du classeur contenant des contacts
Dim i As Integer
For i = 0 To 13
Sheets(Noms_feuilles(i)).Columns("BV").Insert
Next i

Call Unload(Me)
End Sub

NB : je ne parviens pas à baliser le code de manière à ce qu'il soit plus lisible pour vous ...


En vous remerciant,

Louise
 

job75

XLDnaute Barbatruc
Bonjour louloubru,

Le 1er code doit être placé dans un module standard (Module1) :
VB:
Public Noms_feuilles

Sub InitialiseNoms_feuilles()
Noms_feuilles = Array("ONF_COFOR", "CNPF_Fran", "Agri", "INRA", "AutRECH", "Enseigt", "PNR-Envt", "Décideurs", "Presse", "Etranger", "Coop-Exp", "Bois-Pépin", "CETEF", "Autre")
End Sub
Bien sûr il faut que toutes les feuilles listées existent.

En outre la macro doit être exécutée avant de lancer la 2ème macro, pour en être sûr utiliser dans l'UserForm :
VB:
Private Sub ButtonOK_Click()
Dim i As Integer
InitialiseNoms_feuilles 'lance la macro
For i = 0 To 13
Sheets(Noms_feuilles(i)).Columns("BV").Insert
Next i
Unload Me
End Sub
A+
 

louloubru

XLDnaute Junior
Bonjour louloubru,

Le 1er code doit être placé dans un module standard (Module1) :
VB:
Public Noms_feuilles

Sub InitialiseNoms_feuilles()
Noms_feuilles = Array("ONF_COFOR", "CNPF_Fran", "Agri", "INRA", "AutRECH", "Enseigt", "PNR-Envt", "Décideurs", "Presse", "Etranger", "Coop-Exp", "Bois-Pépin", "CETEF", "Autre")
End Sub
Bien sûr il faut que toutes les feuilles listées existent.

En outre la macro doit être exécutée avant de lancer la 2ème macro, pour en être sûr utiliser dans l'UserForm :
VB:
Private Sub ButtonOK_Click()
Dim i As Integer
InitialiseNoms_feuilles 'lance la macro
For i = 0 To 13
Sheets(Noms_feuilles(i)).Columns("BV").Insert
Next i
Unload Me
End Sub
A+

Impeccable merci beaucoup !
J’exécuterai la procédure à chaque fois que j'ai besoin du vecteur.
Encore merci !