Copilot for Microsoft 365 Tech Accelerator
Feb 28 2024 07:00 AM - Feb 29 2024 10:30 AM (PST)
Microsoft Tech Community
SOLVED

macro VBA excel nommer une cellule

Brass Contributor

Dans une macro, je veux donner un nom à une cellule donnée, à savoir celle où je suis au lancement de la macro.

si je laisse "range", avec des références absolues, la macro fonctionne, mais une seule fois. Le nom choisi disparait de la liste de la feuille, mais est toujours présent dans les noms de "formule-gestionnaire de noms".

voici ce que j'ai écrit, qui ne fonctionne pas:

ActiveWorkbook.Names.Add Name:="horo4", RefersToR1C1:=ActiveCell.Address

Merci de m'aider!

165 Replies

 

Sub inspay()
'
' inspay Macro
'insère 1 en inscription payante

'
    Range("E" & ActiveCell.Row).Value = 1
    strMode = ""
    frmChoisir.Show
    If strMode = "" Then
        MsgBox "Vous n'avez pas choisi une mode de paiement!", vbExclamation
    Else
        Range("O" & ActiveCell.Row).Value = strMode
        If strMode = "Espèces" Then
            Range("T" & ActiveCell.Row).Select
        End If
    End If
End Sub

@bernard_daniel_1950 

Merci!

@Hans Vogelaar 

Bonjour,

Je progresse lentement, mais je progresse!

Avec l'aide de "Programmation VBA pour les nuls", j'ai créé un userform, que j'ai nommé "frmcat".

Dans laquelle j'ai mis une liste déroulante.

Et je voudrais qu'une sélection dans cette liste entraine le déclenchement d'une macro spécifique quand je clique sur "OK".

Par exemple, si je sélectionne "Carte perdue", je voudrais que la macro "cppay" (module 48) s'exécute.

La macro ouvrant l'userform se nomme "automat".

Merci encore!

@bernard_daniel_1950 

Comme si:

Private Sub btnOK_Click()
    Select Case Me.frmcaté
        Case ""
            MsgBox "Il faut choisir une catégorie, ou Annuler", vbInformation
            Exit Sub
        Case "Carte perdue"
            Call cppay
        Case "Inscription payante"
            Call autre_macro1
        Case "Inscription gratuite"
            Call autre_macro2
        Case ...
            Call ...
    End Select
    ' Si vous voulez fermer l'userform
    Unload Me
End Sub

@Hans Vogelaar 

Bonsoir,

Mon parcours ressemble à une course cycliste en montagne: quand on a gravi, avec peine, un sommet, on en découvre un autre à escalader, encore plus redoutable...

Mon problème se situe dans un userform (frmpaiement) que j'ai créé, avec des boutons d'option, et qui remplace le frmchoisir.

Tout se passe bien, sauf que, quand je sélectionne "espèces", au lieu d'aller à la colonne T et terminer, le programme me pose la même question que pour "chèque" ou "CB"...

@bernard_daniel_1950 

Quelle macro pose le problème? inspay, reinspay, cppay ou vacpay?

 

(Il est après minuit ici, je lirai votre réponse dans le matin)

Toutes! ce sont des copies presque conformes...
Bonjour, j'ai trouvé l'anomalie (une ligne de trop dans optespeces de frmpaiement)
Désolé de vous avoir dérangé pour rien!

@bernard_daniel_1950 

Pas de problème!

@Hans Vogelaar 

Bonsoir, encore moi!
Mon souci actuel est de nommer, dans une macro, la plage de cellule que j'ai déjà sélectionnée.
Par exemple:

bernard_daniel_1950_0-1702848842472.png

je sélectionne la plage en jaune, puis je voudrais lancer une macro pour lui donner un nom.

J'ai beaucoup essayé, sans succès...

@bernard_daniel_1950 

Essayez

Sub NommerPlage()
    Dim strNom As String
    strNom = InputBox("Quel nom voulez-vous donner la plage sélectionnée?")
    On Error GoTo ErrHandler
    ThisWorkbook.Names.Add Name:=strNom, RefersTo:=Selection
    Exit Sub
ErrHandler:
    MsgBox "Excel n'a pas réussi à attribuer le nom!", vbCritical
End Sub
Merci, mais je me suis mal exprimé: c'est la macro qui donne un nom (prédéfini) par exemple: "debut"!
Mais je pense que je vais pouvoir me débrouiller avec votre ligne 5.
Je viens d'écrire: thisWorkbook.names.Add name:="debut", RefersTo:=Selection, et ça marche!
Bonne soirée!

@Hans Vogelaar 

Désolé de troubler un tel jour, mais...

dans le tableau ci-dessous:

bernard_daniel_1950_0-1703499956034.png

Je sélectionne une plage, que je nomme "debut", je la colore en jaune.

Et je voudrais ensuite sélectionner uniquement les cases "date" du dessus.

Pour le vendredi et samedi de cet exemple, j'y arrive par "while isnumeric", mais pas pour les mardi et mercredi...

Donc, quelque chose qui, à partir de cette plage jaune, nommée "debut", sélectionner "mardi 12/3 et mercredi 13/3"!

Je sèche...

@bernard_daniel_1950 

Je ne suis pas sûr d'avoir compris votre demande, mais peut-être:

Sub Essay()
    Dim Plage As Range
    Dim Colonne As Range
    Dim Cellule As Range
    Dim Retour As Range
    Dim Ligne As Long
    Set Plage = Range("debut")
    Ligne = Plage.Row
    For Each Colonne In Plage.Columns
        For Each Cellule In Colonne
            If Cellule.Interior.Color = vbYellow Then
                If Retour Is Nothing Then
                    Set Retour = Cells(Ligne, Colonne.Column)
                Else
                    Set Retour = Union(Cells(Ligne, Colonne.Column), Retour)
                End If
                Exit For
            End If
        Next Cellule
    Next Colonne
    Retour.Select
End Sub

@Hans Vogelaar 

Bonsoir, je me suis mal exprimé.

dans mon exemple, les parties "entrée/sorties" du mardi 12 et mercredi 13 sont sélectionnées.

puis je lance ma macro:

-----------------

coulcr Macro
'

'
Application.ScreenUpdating = False
If MsgBox("Vous devez recouvrir, pour la période concernée, uniquement la zone 'horaires' (partie blanche). Si c'est déjà fait, cliquez sur 'OK', sinon sur 'Annuler' et faites le!", vbOKCancel, "Sélection de la période") = vbCancel Then
Exit Sub
End If
ThisWorkbook.Names.Add Name:="debut", RefersTo:=Selection
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 65535
.TintAndShade = 0
.PatternTintAndShade = 0
End With

------------------

Ensuite, je voudrais que la partie: bernard_daniel_1950_0-1703538322647.png soit sélectionnée.

 

@bernard_daniel_1950 

Essayez

 

Selection.Offset(-1).Resize(1).Select

C'est parfait!
Et je vais abuser: le bout de macro que je vous ai envoyée ne me satisfait pas...
Je voudrais:
1/ lancer la macro;
2/ inviter l'utilisateur à sélectionner la plage horaire; (en utilisant la souris);
3/ relancer la suite de la macro.
Est-ce possible?

@bernard_daniel_1950 

Sub Essay2()
    Dim Plage As Range
    ' Partie 1
    ' ...
    On Error Resume Next
    Set Plage = Application.InputBox(Prompt:="S.v.p. sélectionnez une plage", Type:=8)
    If Plage Is Nothing Then Exit Sub
    On Error GoTo 0
    ' Partie 2
    ' ...
End Sub
Ca ne fonctionne pas (du moins comme je le voulais):
après "on error goto 0", j'ai ajouté ceci: "ThisWorkbook.Names.Add Name:="debut", RefersTo:=Selection".
et ça nomme ainsi la case où j'étais avant la macro, pas la sélection...

@bernard_daniel_1950 

Mais oui - il faut utiliser la variable Plage:

Sub Essay2()
    Dim Plage As Range
    ' Partie 1
    ' ...
    On Error Resume Next
    Set Plage = Application.InputBox(Prompt:="S.v.p. sélectionnez une plage", Type:=8)
    If Plage Is Nothing Then Exit Sub
    On Error GoTo 0
    ' Partie 2
    ThisWorkbook.Names.Add Name:="debut", RefersTo:=Plage
    ' ...
End Sub