Variation d'une ligne de code VBA

Etienne2323

XLDnaute Impliqué
Bonjour à tous,
j'aurais une petite interrogation pour vous aujourd'hui. J'ai plusieurs noms de cellules que je souhaites supprimer en utilisant une macro. Pour l'instant, j'utilise cette ligne de code :

ActiveWorkbook.Names("nom_de_la_plage").Delete

Je répète cette ligne pour tous les noms que je souhaite enlever dans mon fichier. Je me demande donc s'il existerait une ligne qui pourrait remplacer toute celles-là. Par exemple :

ActiveWorkbook.Names(Array("nom_de_la_plage")).Delete --> Celle la ne fonctionne pas mais quelque chose qui ferait ce genre de boulot.

Vous avez une idée ?

Merci

Etienne
 

Etienne2323

XLDnaute Impliqué
Re : Variation d'une ligne de code VBA

Bonjour Staple1600,
merci pour le lien mais cela ne correspond pas exactement à ce que je cherche. Je ne veux pas supprimer tous les noms du workbook, je veux seulement en supprimer quelques-uns. C'est pourquoi je cherche plus une sorte de code pour faire une énumération (d'où le "Array" que j'avais en tête tantot) plutôt qu'une sélection globale. C'est possible ?

Cordialement,

Etienne
 

skoobi

XLDnaute Barbatruc
Re : Variation d'une ligne de code VBA

Bonsoir Etienne2323, JM :),

Est-ce que les noms que tu veux supprimer ont un mot en commun (par exemple) que n'ont pas les noms que tu veux garder?
Bref un signe distinctif par rapport aux autres mots?
 

Etienne2323

XLDnaute Impliqué
Re : Variation d'une ligne de code VBA

Bonsoir Skoobi, bonsoir forum
non, les noms que je désire supprimer sont des noms que je donne à des colonnes ou a des lignes, en général. Les noms varient en fonction des onglets.

Par exemple: "alloc_c3" signifie pour moi : colonne 3 dans l'onglet allocation

J'ai 28 noms de cellules à deleter en tout. Aucun d'entre eux n'a de mot en commun. :(

Merci de votre aide !

Etienne
 

Staple1600

XLDnaute Barbatruc
Re : Variation d'une ligne de code VBA

Re, bonsoir skoobi



Un exemple (test OK)

Code:
Sub test()
Dim i as Long
Dim x As String
'ici mettre les noms à effacer
'dans cet exemple les noms sont:
'AA BB CC
'ne= [B]n[/B]oms à [B]e[/B]ffacer
ne = Split("AA+BB+CC", "+")
For i = LBound(ne) To UBound(ne)
x = ne(i)
ActiveWorkbook.Names(x).Delete
Next
End Sub
PS: Pour récupérer une liste des noms
Code:
Sub listenoms()
'a tester sur une feuille vierge
Range("A1").ListNames
End Sub
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Variation d'une ligne de code VBA

Re




Tu as essayé mon précédent exemple?

En mettant tes noms dans l'Array

(ne)

Voici une petite macro pour créer la ligne de code
(à recopier ensuite dans VBE)
Code:
Sub cree_chaineVBA()
Dim Tableau()
Range("A1").ListNames
Tableau = Application.Transpose(Range("A1:A" & [A65536].End(xlUp).Row))
For i = LBound(Tableau) To UBound(Tableau)
m = m & Tableau(i) & "+"
Next
Range("C1") = "Split(" & Chr(34) & Left(m, Len(m) - 1) & Chr(34) & ", ""+"")"
End Sub
 
Dernière édition:

Etienne2323

XLDnaute Impliqué
Re : Variation d'une ligne de code VBA

Bonjour Staple1600, Skoobi, forum
je vous remercie de vous être penchés sur mon problème. Tout d'abord, pour répondre à la question de Skoobi, oui, ce sont toujours les mêmes noms qu'il faut effacer.

Staple1600, je n'ai pas été capable de faire fonctionner le code correctement. Je crois que c'était encore un peu trop élaboré pour mon niveau de VB. Par contre, je me suis inspiré de tes lignes pour créer autre chose. Tu pourrais me dire ce que tu en penses ?


Pour l'exemple, j'ai créé 2 nouveau workbook que j'ai appelé Etienne1 et 2. J'ai mis les noms etienne1 à 5 dans les cellules A1 à 5. J'ai simulé que je souhaitais conserver les noms etienne2 et etienne3.

Sub test()

'J'importe tous les noms du workbook Etienne1
For i = 1 To Workbooks("Etienne1.xls").Names.Count
nom1 = Workbooks("Etienne1.xls").Names(i).Name
ref1 = Workbooks("Etienne1.xls").Names(i).RefersToR1C1
Workbooks("Etienne2.xls").Names.Add Name:=nom1, RefersToR1C1:=ref1
Next i

'Je prends la liste de nom du workbook et je dépose à la cellule B1
Sheets(1).Select
Range("B1").ListNames

b = Range("B65536").End(xlUp).Row

'J'enlève les noms que je veux conserver
For j = 1 To b
Dim a As String
a = Cells(j, 2)
Select Case a
Case "etienne2"
Cells(j, 2).ClearContents
Case "etienne3"
Cells(j, 2).ClearContents
End Select
Next j

'Je delete tous les autres noms
For i = 1 To b
x = Cells(i, 2)
If x = "" Then
GoTo suite
End If
ActiveWorkbook.Names(x).Delete
suite:
Next i

'Je supprime le reste des noms et des locations
With Columns("B:C")
.Select
.ClearContents
End With

Range("A1").Select

End Sub

Est-ce qu'il y aurait une manière d'améliorer ce code ? Mettre les noms dans un "array" par exemple dans le select case ? Qu'est-ce que vous en pensez ?

Merci beaucoup de votre aide !

Etienne
 
Dernière édition:

skoobi

XLDnaute Barbatruc
Re : Variation d'une ligne de code VBA

Bonjour,

en utilisant "Array" comme liste de nom à supprimer, ça donne ceci:

Code:
Sub supp_nom()
ListeNom = Array("etienne1", "etienne4", "etienne5")
For i = 0 To UBound(ListeNom)
ThisWorkbook.Names(ListeNom(i)).Delete
Next
End Sub

Cela prend en compte le classeur actif lors de l'exécution de la macro.
Donc, les noms gardés sont etienne2 et etienne3.
 

Etienne2323

XLDnaute Impliqué
Re : Variation d'une ligne de code VBA

Bonjour Scoobi,
merci de cette réponse rapide ! Ça fonctionne à merveille dans mon vrai programme. Je suis content de voir que, pour un petit nouveau dans le monde de la programmation, je n'étais quand même pas si loin de la solution ! Ça m'encourage pour le futur ! Merci à vous Scoobi et à vous tous qui m'avez aidé dans ce problème. Je vous en suis très reconnaissant.

Sur ce, passez une excellent fin de journée !

Cordialement,

Étienne
 

Discussions similaires

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16