Microsoft 365 [MaCell] si delete

Usine à gaz

XLDnaute Barbatruc
Bonjour à toutes et à tous :)

Il y a fort longtemps, notre cher Gérard job75 m'avait donné le code pour nommer au clic une cellule permettant de s'y référer à tout moment.
Je m'en sers depuis longtemps (ce code est partout dans mes fichiers :)). Il fonctionne nickel.
Merci encore à Gérard :)

Il y a quand même une chose (petite je pense) que je n'ai pas réussi à coder de mon côté.

Vous le verrez dans le classeur exemple joint :
au clic
de "a1:c20", je nomme la cellule active ([MaCell])
sur "H6", je sélecte ([MaCell]) et je met sa valeur en "J6"
sur "E4", je supprime ([MaCell])

Mon besoin
Si clic sur "E4"= [MaCell] supprimée
J'ai besoin au clic sur "H6" que la valeur de"J6" soit : "Ma Cellule n'existe pas"

J'ai des tests sans y parvenir.
Auriez-vous le bon code ?
Un grand merci à toutes et à tous :)
Je continue les "tribulations".....
:)
 

Pièces jointes

  • 01 MaCell.xlsm
    19.9 KB · Affichages: 8
Solution
pour se passer des "on error resume next" (à mon avis les puristes diront que la gestion des erreurs est indissociable)

VB:
Private Sub Worksheet_SelectionChange(ByVal R As Range)
If Not Intersect(R, Range("a1:c20")) Is Nothing Then
    ActiveCell.Name = "MaCell" 'nomme la cellule
    [J6].Formula = "=MaCell"
End If

If Not Intersect(R, Range("h6")) Is Nothing Then
    If test_name("MaCell") Then
        [MaCell].Select
    Else
        [J6].Value = "Ref ""MaCell"" n'existe pas"
    End If
End If
If Not Intersect(R, Range("e4")) Is Nothing Then
    If test_name("MaCell") Then
        ThisWorkbook.Names("MaCell").Delete
    End If
    [J6].Value = "Ref ""MaCell"" n'existe pas"
End If
End Sub
Public Function test_name(nomplage As String) As...

vgendron

XLDnaute Barbatruc
Bonjour

en executant pas à pas le code, tu devrais voir où ca ne va pas

VB:
Private Sub Worksheet_SelectionChange(ByVal R As Range)
If Not Intersect(R, Range("a1:c20")) Is Nothing Then
    ActiveCell.Name = "MaCell" 'nomme la cellule
    [J6].Value = [MaCell]
End If
If Not Intersect(R, Range("h6")) Is Nothing Then
    On Error Resume Next
    [MaCell].Select
    [J6].Value = "testmess" '[MaCell]
End If
If Not Intersect(R, Range("e4")) Is Nothing Then
'Name = [MaCell].Delete
On Error Resume Next
    ThisWorkbook.Names("MaCell").Delete
    
End If
End Sub

après.. encore un code alambiqué pour pas grand chose...
 

vgendron

XLDnaute Barbatruc
je constate encore une fois que les "On error resume next".. c'est pas la meilleure invention qui soit..
ca masque les bugs d'un code
certes, j'en mets moi aussi de temps en temps.. mais j'essaie de le mettre pour bypasser des erreurs que je connais/prédis et que je n'arrive pas à "tester" au préalable.
 

vgendron

XLDnaute Barbatruc
pour se passer des "on error resume next" (à mon avis les puristes diront que la gestion des erreurs est indissociable)

VB:
Private Sub Worksheet_SelectionChange(ByVal R As Range)
If Not Intersect(R, Range("a1:c20")) Is Nothing Then
    ActiveCell.Name = "MaCell" 'nomme la cellule
    [J6].Formula = "=MaCell"
End If

If Not Intersect(R, Range("h6")) Is Nothing Then
    If test_name("MaCell") Then
        [MaCell].Select
    Else
        [J6].Value = "Ref ""MaCell"" n'existe pas"
    End If
End If
If Not Intersect(R, Range("e4")) Is Nothing Then
    If test_name("MaCell") Then
        ThisWorkbook.Names("MaCell").Delete
    End If
    [J6].Value = "Ref ""MaCell"" n'existe pas"
End If
End Sub
Public Function test_name(nomplage As String) As Boolean
    test_name = False
    Dim nm As Name
    For Each nm In ThisWorkbook.Names
            If nm.Name = nomplage Then
                    test_name = True
                    Exit For
            End If
    Next nm
End Function
 

TooFatBoy

XLDnaute Barbatruc
Bonjour,

VB:
Private Sub Worksheet_SelectionChange(ByVal R As Range)

If Not Intersect(R, Range("a1:c20")) Is Nothing Then
    ActiveCell.Name = "MaCell" 'nomme la cellule
    [J6].Value = [MaCell]
End If

If Not Intersect(R, Range("h6")) Is Nothing Then
    On Error Resume Next
    [MaCell].Select
    [J6].Value = "testmess" '[MaCell]
End If

If Not Intersect(R, Range("e4")) Is Nothing Then
'    Name = [MaCell].Delete
    On Error Resume Next
    ThisWorkbook.Names("MaCell").Delete
End If

End Sub
Ici, l'instruction [MaCell].Select semble inutile, mais on peut peut-être bien la laisser et s'en servir pour "gérer l'éventuelle erreur provoquée", avec un truc du genre :
VB:
If err then
    [J6].value="n'existe pas"
Else
    [J6].value=[macell].value
End If
 

TooFatBoy

XLDnaute Barbatruc
Vous le verrez dans le classeur exemple joint :
au clic
de "a1:c20", je nomme la cellule active ([MaCell])
sur "H6", je sélecte ([MaCell]) et je met sa valeur en "J6"
sur "E4", je supprime ([MaCell])

Mon besoin
Si clic sur "E4"= [MaCell] supprimée
J'ai besoin au clic sur "H6" que la valeur de"J6" soit : "Ma Cellule n'existe pas"
Les Intersect du code de #2 me semblent louches par rapport à ta demande.

As-tu bien compris quand est appelée la macro Worksheet_SelectionChange ?
 

TooFatBoy

XLDnaute Barbatruc
Dernière édition:

Discussions similaires

Réponses
13
Affichages
430

Statistiques des forums

Discussions
314 422
Messages
2 109 447
Membres
110 482
dernier inscrit
ilyxxxh