Problème avec cellule nommée

Bonjour tout le monde,

petit problème en VBA : j'ai nommé la cellule E10 de ma feuille de calcul "NombreParois", et j'execute une macro par la suite qui vérifie que la valeur entrée dans cette cellule est numérique ou pas. Mais il y a un problème pour reconnaitre la cellule par son nom.. Voici le bout de code sous deux versions légérement différentes (seule la première ligne diffère).

If Target.Address = ("$E$10") Then
Dim nbLig As Variant
Dim lig As Long
Dim i As Long
Dim rep As Variant

If Not IsNumeric(Range("NombreParois").Value) Then
        MsgBox "La valeur n'est pas numérique", vbExclamation, "Erreur saisie"
        Target.Value = ""
        Target.Select
    End If
If Target.Address = ("NombreParois") Then
Dim nbLig As Variant
Dim lig As Long
Dim i As Long
Dim rep As Variant

If Not IsNumeric(Range("NombreParois").Value) Then
        MsgBox "La valeur n'est pas numérique", vbExclamation, "Erreur saisie"
        Target.Value = ""
        Target.Select
    End If

La 1ere version du code fonctionne, mais pas la deuxième... Le problème doit donc venir de la 1ere ligne. Quelqu'un sait-il comment faire appel à une cellule par son nom, et pas par son adresse?

Merci d'avance pour vos réponses.

Bonjour,

Essaie -->

If Target.Address = "$E$10" Then MsgBox "tata"

Amicalement

Dan

Edit Dan :

Tu peux essayer ceci aussi :

If Not Intersect(Target, Range("Nombreparois")) Is Nothing Then

ou

If Not Intersect(Target, Range("E10")) Is Nothing Then

Dan

en enlevant les () et/ou les "" ?

edit : salut Nad-Dan

Bonjour, merci pour vos réponses

Nad-Dan : tes suggestions fonctionnent, mais mon problème est à la 1ere ligne. J'aimerai vraiment pouvoir nomer la cellule, et que la macro s'execute si la target.address = NomDeLACellule.address.

Explication : la cellule E10 est nommée "NombreParois", et par la suite on entre une valeur dans cette cellule et on vérifie si elle est bien numérique. Le souci, c'est qu'avant cela il peut y avoir insertion de lignes dans la feuille de calcul. E10 ne se trouve donc plus en E10... C'est pour cela que si ma macro est attachée à la cellule E10, cela ne fonctionnera plus dans ce cas. Alors qu'avec un nom, quelquesoit l'endroit ou la cellule est "balladée", le nom suit et la macro fonctionne.

J'espère avoir été clair...

jmd : j'ai essayé d'enlever () et/ou "", cela ne fonctionne pas..

Quelqu'un aurait-il une idée?

Re,

...J'aimerai vraiment pouvoir nomer la cellule...

Dans ta 1ere demande, tu dis que la cellule est nommée ... Je ne saisis pas là...

Si tu prends ce que je t'ai donné lorsque j'ai édité mon message (1ere solution), cela devrait fonctionner.

Sinon mets ta macro complète ici ou mieux le fichier avec données non confidentielles.

A te relire

Dan

2stevenm.xlsm (26.11 Ko)

Re,

je me suis mal exprimé, ma cellule est déjà nommé. Mais malheuresment ton code ne marche pas (erreur Range)

Private Sub CommandButton1_Click()
Dim CaseTest As String
Target = Range("H5")
   Select Case Target
   Case "Local par local": Exit Sub
   Case "Bâtiment":
Range("A14:D14").Select
    With Selection
    .MergeCells = True
    .Font.Bold = True
    .Borders.LineStyle = xlContinuous
    .Value = "Nombre de parois extérieures :"
    .HorizontalAlignment = xlCenter
    End With

    Range("E14").Select
    With Selection
    .Interior.ColorIndex = 27
    .Borders.LineStyle = xlContinuous
    .HorizontalAlignment = xlCenter
    End With
    ActiveWorkbook.Names.Add Name:="NombreParois", RefersToR1C1:="=Déperditions!R14C5"

Private Sub Worksheet_Change(ByVal Target As Range)
Set ici = Application.Intersect(Target, Range("H5"))
If Not ici Is Nothing Then
    Select Case Target
    Case "Local par local": Range("H8:I9").Select
    With Selection
    .ClearContents
    .Interior.ColorIndex = xlNone
    .MergeCells = False
    .Borders.LineStyle = xlNone
    .Font.Italic = False
    .Font.Bold = False
    End With

    Range("A14:N40").Select
    With Selection
    .Delete
    End With

    Case "Bâtiment": Range("H8:I8").Select
    With Selection
    .MergeCells = True
    .Value = "Température intérieure °C"
    .Font.Bold = True
    .Borders.LineStyle = xlContinuous
     .HorizontalAlignment = xlCenter
    End With

    Range("H9:I9").Select
    With Selection
    .MergeCells = True
    .Interior.ColorIndex = 27
    .Borders.LineStyle = xlContinuous
    End With

   End Select
End If

If Target.Address = Range("NombreParois").Address Then     (((PROBLEME)))
Dim nbLig As Variant
Dim lig As Long
Dim i As Long
Dim rep As Variant
Dim TotalPositif As Variant

If Not IsNumeric(Range("Nombreparois").Value) Then
        MsgBox "La valeur n'est pas numérique", vbExclamation, "Erreur saisie"
        Target.Value = ""
        Target.Select
    End If
End Sub

Voila ma macro entière. J'ai marqué la ligne d'ou vient le problème (je rapelle que si je met $E$10 sur cette ligne, cela fonctionne tres bien)

Si cela peut t'aider, merci d'avance

Re,

Premier problème, tes variables ne sont pas définies...

Dans le premier code, tu utilises TARGET comme variable. Ce que tu ne peux jamais faire.

Ton code corrigé est celui ci-dessous :

Private Sub CommandButton1_Click()
   Select Case Range("H5")
   Case "Local par local": Exit Sub
   Case "Bâtiment"
    With Range("A14:D14")
    .MergeCells = True
    .Font.Bold = True
    .Borders.LineStyle = xlContinuous
    .Value = "Nombre de parois extérieures :"
    .HorizontalAlignment = xlCenter
    End With
    With Range("E14")
    .Interior.ColorIndex = 27
    .Borders.LineStyle = xlContinuous
    .HorizontalAlignment = xlCenter
    End With
    End select
    ActiveWorkbook.Names.Add Name:="NombreParois", RefersToR1C1:="=Déperditions!R14C5"
End Sub

A noter que :

  • L'instruction "Dim CaseTest As String" ne sert à rien.
  • Le nom "Nombreparois" dans ton code fait référence à la cellule E14 de la feuille "Déperditions". Est-ce bien correct car tu parles de la cellule E10 ailleurs ?
  • A chaque fois tu fais un controle sur les valeurs dans H5. Est-ce correct ?

Merci de tes réponses avant que je ne te donne le deuxième code

Dan

Re,

oui il s'agit de la cellule E14, autant pour moi je m'étais trompé précedemment

je corrige mon code comme tu me l'as donné, et je vais faire attention à mes définitions de variables

Merci

re,

Sur le 2eme code, tu testes sur deux TARGET possible ??

Le premier avec H5 et le second sur E14 ??

J'ai un peu du mal à suivre ce que tu veux faire... dans ce code

A te relire

Dan

Hmmm oui en fait je fais un premier test sur H5, suite auquel vont apparaitre des lignes ou pas. Je fais ensuite la même chose sur E14, dans le même but.

Faut-il un EndSub apres le 1er test, et refaire une autre sub pour l'autre. Le problème c'est que je crois que l'on ne peut pas avoir deux Private Sub Worksheet_Change(ByVal Target As Range)...

Le souci doit venir de là en effet, mais je ne vois pas trop comment le résoudre..

re,

Le problème c'est que je crois que l'on ne peut pas avoir deux Private Sub Worksheet_Change(ByVal Target As Range)...

Effectivement.

Essaie en remplaçant tous les codes par ces deux-ci

Public Ok As Boolean
Private Sub CommandButton1_Click()
   Select Case Range("H5")
   Case "Local par local": Exit Sub
   Case "Bâtiment"
    With Range("A14:D14")
    .MergeCells = True
    .Font.Bold = True
    .Borders.LineStyle = xlContinuous
    .Value = "Nombre de parois extérieures :"
    .HorizontalAlignment = xlCenter
    End With
    With Range("E14")
    .Interior.ColorIndex = 27
    .Borders.LineStyle = xlContinuous
    .HorizontalAlignment = xlCenter
    End With
    End Select
    ActiveWorkbook.Names.Add Name:="NombreParois", RefersToR1C1:="=Déperditions!R14C5"
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ici As Range
If Ok = True Then Exit Sub
Set ici = Application.Intersect(Target, Range("H5"))
If Not ici Is Nothing Then
Ok = True
    Select Case Target
    Case "Local par local"
    With Range("H8:I9")
    .ClearContents
    .Interior.ColorIndex = xlNone
    .MergeCells = False
    .Borders.LineStyle = xlNone
    .Font.Italic = False
    .Font.Bold = False
    End With
    Range("A14:N40").Delete

    Case "Bâtiment"
    With Range("H8:I8")
    .MergeCells = True
    .Value = "Température intérieure °C"
    .Font.Bold = True
    .Borders.LineStyle = xlContinuous
     .HorizontalAlignment = xlCenter
    End With
    With Range("H9:I9")
    .MergeCells = True
    .Interior.ColorIndex = 27
    .Borders.LineStyle = xlContinuous
    End With
   End Select
End If
If Not Intersect(Target, Range("NombreParois")) Is Nothing Then
If Not IsNumeric(Target) Then
        MsgBox "La valeur n'est pas numérique", vbExclamation, "Erreur saisie"
        Target.Value = ""
        Target.Select
    End If
    End If
Ok = False
End Sub

La macro Private sub command agit sur le clique de ton bouton

La macro Private sub change agit sur le changement de valeur dans la cellule H5 ou E14.

Dan

Bonjour Dan, et merci pour ta réponse

J'ai remplacé mon code avec les tiens, mais je me confronte toujours au même problème, à savoir qu'il y a une erreur au niveau de :

If Not Intersect(Target, Range("NombreParois")) Is Nothing Then

il me sort encore une fois l'erreur "Erreur d'execution 1OO4 ; la méthode "Range" de l'objet "_Worksheet" a échoué"

J'ai essayé sur une autre feuille de calcul de copier coller uniquement les deux derniers bout de code que tu m'a donné, résultat même erreur au même endroit...

Cela commence à devenir désepserant car j'ai l'impression qu'il n y a que chez moi que cela ne marche pas..

Je suis reparti pour une journée de recherche...

Merci beaucoup pour ta réponse en tout cas, et si tu me confirmes que cela fonctionne chez toi il va falloir que je revois mon code en entier, voir que le rééecrives peut-etre..

A bientot

-- 07 Avr 2010, 14:01 --

Je relance le sujet car je crois savoir d'ou vient le problème : il s'agit du moment ou je supprime tout

Case "Local par local"
    With Range("H8:I9")
    .ClearContents
    .Interior.ColorIndex = xlNone
    .MergeCells = False
    .Borders.LineStyle = xlNone
    .Font.Italic = False
    .Font.Bold = False
    End With
    Range("A14:N40").Delete

A ce moment la les noms des cellules sont supprimés, d'ou problème dans la macro. J'ai essayé donc directement apres ce bout de code de nommer mes cellules, de façon à ce qu'elles soient renommé aussitot effacées. Mais ca ne fonctionne pas. Si quelqu'un a une idée sur cette piste je suis preneur ^^

Merci d'avance, bonne journée

re,

Bon j'avais vu ce pb mais sans voir ton fichier ce n'est pas simple. On l'a déjà dit sur ce forum à plusieurs reprises... mais bon on ne peut pas non plus exiger.

Ton souci vient du fait que dans cette instruction --> Range("A14:N40").Delete, tu supprimes le nom que tu as donné et que plus loin tu veux réutiliser ce nom dans l'instruction qui buggue. Cela se passera à chaque fois que tu sélectionneras H5 et que la valeur sera "Local par Local".

Solution à tester ... après le Range("A14:N40").Delete, tu remets cette instruction -->

ActiveWorkbook.Names.Add Name:="NombreParois", RefersToR1C1:="=Déperditions!R14C5"

Sinon donne moi ton fichier avec données non confidentielles, que je comprenne ce que tu veux faire car là je fonctionne un peu à tatillon dans un tunnel partiellement éclairé.

A te relire

Amicalement

Dan

Rechercher des sujets similaires à "probleme nommee"