[VBA] Récupérer la colonne d'une zone nom [Résolu]

LeGaulois

XLDnaute Nouveau
Bonjour tout le monde!

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?

Je vous remercie!
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : [VBA] Récupérer la colonne d'une zone nom

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.
À+
 

MJ13

XLDnaute Barbatruc
Re : [VBA] Récupérer la colonne d'une zone nom

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
 

LeGaulois

XLDnaute Nouveau
Re : [VBA] Récupérer la colonne d'une zone nom

Bonjour,

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.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : [VBA] Récupérer la colonne d'une zone nom

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).
Si, vous pouvez aussi vérier si une plage possède un objet Name
C'est à dire si sa propriété Name n'est pas Nothing.
À+
 

LeGaulois

XLDnaute Nouveau
Re : [VBA] Récupérer la colonne d'une zone nom

Effectivement on peut, mais j'ai une erreur avec ce code :
Code:
    If ActiveWorkbook.Names("N6").Name <> "Nothing" Then
        MsgBox "Existe"
    Else
        MsgBox "N'existe pas"
    End If

Si la zone nom existe, j'ai bien le message : Existe qui s'affiche.
Si la zone nom n'existe pas, j'ai un message d'erreur :
Erreur d'exécution '1004' :
Erreur définie par l'application ou par l'objet.
 

Pierrot93

XLDnaute Barbatruc
Re : [VBA] Récupérer la colonne d'une zone nom

Bonjour à tous

regarde ceci, t'indiquera le numéro de la 1ère colonne de la zone si celle-ci existe :
Code:
Dim n As Name
On Error Resume Next
Set n = ThisWorkbook.Names("nom1")
If Err.Number = 0 Then MsgBox Range("nom1").Column
On Error GoTo 0

bonne journée
@+
 

LeGaulois

XLDnaute Nouveau
Re : [VBA] Récupérer la colonne d'une zone nom

Bonjour Pierrot,

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é!

Un grand merci à vous trois :)
 

Pierrot93

XLDnaute Barbatruc
Re : [VBA] Récupérer la colonne d'une zone nom [Résolu]

Re,

Si, vous pouvez aussi vérier si une plage possède un objet Name
C'est à dire si sa propriété Name n'est pas Nothing.

peut être avec ceci :
Code:
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
 

Dranreb

XLDnaute Barbatruc
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.
 

Discussions similaires

Statistiques des forums

Discussions
311 726
Messages
2 081 955
Membres
101 852
dernier inscrit
dthi16088