Je me retrouve dans un problème.
Je réalise un programme qui analyse une liste. Pour ne pas me perdre j'utilise les zones nom, comme ça n'importe qui peut présenter sa liste comme il le souhaite.
Et donc j'ai 4 zones nom obligatoires pour les vérifier je procède ainsi :
Code:
Function VerifZonesNom() As Boolean
Dim ZoneNom As Name
Dim v(3) As Boolean
For Each ZoneNom In ActiveWorkbook.Names
If ZoneNom.Name = "N1" Then
v(0) = True
End If
If ZoneNom.Name = "N2" Then
v(1) = True
End If
If ZoneNom.Name = "N3" Then
v(2) = True
End If
If ZoneNom.Name = "N4" Then
v(3) = True
End If
Next ZoneNom
If v(0) = False Or v(1) = False Or v(2) = False Or v(3) = False Then
VerifZonesNom = False
Exit Function
End If
End Function
Mon teste If v(0) = False etc est un peu plus long car j'affiche des MsgBox pour informer quelle révision manque.
Ensuite donc si rien ne manque j'appelle une autre fonction, et celle ci commence le traitement.
Sauf que pour traiter le tableau il faut que je trouve les colonnes de ces zones noms.
Code:
col = ActiveWorkbook.Names("N1").RefersToRange.Columns
Et j'ai essayé d'autre chose, mais rien ne fonctionne...
Voilà, si quelqu'un pourrait m'expliquer comment procéder?
J'ai une autre question, j'ai des zones nom non obligatoire, facultatif, je pensais faire un teste du genre :
Code:
If ActiveWorkbook.Names("N5").ReferToRange.Columns <> 0 Then
Mais pareil ça ne fonctionne pas. Pareil, si quelqu'un pourrait m'aiguiller?
Bonjour
Vous devez utiliser la méthode Add de la collection Names
Mais je pense que vous ne pouvez pas créer un nom qui pourrait se confondre avec une adresse de cellule.
À+
Bonjour LeGaulois, Dranreb
Teste ce code, si ça peut t'aider:
Code:
Sub test()
MsgBox Range("zone").Count
MsgBox Range("zone").Row
MsgBox Range("zone").Rows.Count
MsgBox Range("zone").Column
MsgBox Range("zone").Columns.Count
End Sub
Je n'ai pas été assez clair, désolé.
Je ne souhaite pas créer de zone nom, elles sont déjà créées. Le but est de savoir si les 4 zones nom obligatoires ont bien été créé (ma première fonction) et ensuite dans l'analyse, vérifier à un certain endroit si une zone nom existe (mais ça je ne crois pas que ce soit possible autrement qu'avec un For Each ZoneNom In ActiveWorkbook.Names).
Ensuite je récupère le numéro de la colonne (là pareil je n'y arrive pas).
Bonjour MJ13,
J'ai essayé votre code, et j'ai dès la première ligne l'erreur :
1004 : erreur définie par l'application ou par l'objet.
vérifier à un certain endroit si une zone nom existe (mais ça je ne crois pas que ce soit possible autrement qu'avec un For Each ZoneNom In ActiveWorkbook.Names).
Vindieu! Ca fonctionne! J'ai adapté et ça marche très bien.
Par contre je n'ai jamais utilisé d'instruction du genre On Error, donc j'irai m'informer, mais pour l'instant mon problème est réglé!
If Not Intersect(Range("nom1"), Range("F3:F9")) Is Nothing Then
MsgBox "ok, zone nommée dans le range"
Else
MsgBox " pas de zone nommée dans le range"
End If
Re : [VBA] Récupérer la colonne d'une zone nom [Résolu]
Bonjour Pierrot93
Je doit admettre que ma suggestion ne marche pas. Et c'est à mon avis une lacune dans le système. Une tentative d'interroger la propriété Name d'un Range non nommé se solde par une erreur définie par l'application au lieu de rendre Nothing.
Cordialement.