SOLVED

macro VBA excel nommer une cellule

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

202 Replies

@Hans Vogelaar 

Bonsoir, j'ai encore besoin de vos lumières!

J'ai créé cette userbox:

bernard_daniel_1950_0-1713908576252.png

et cette macro (un extrait):

Sub recupsauv()

...
Dim s As Date
On Error Resume Next
s = InputBox("entrez la date désirée, sous la forme 'jj/mm'.", " Recherche de journée sauvegardée")
If Err Then
MsgBox "Vous devez rentrer une date!", vbExclamation
Exit Sub
End If
On Error GoTo 0
Application.Goto Reference:="sauvegarde"
Do While ActiveCell <> s
ActiveCell.Offset(1, 0).Activate

...

J'aurais voulu que, en choisissant une date donnée dans l'userform, elle soit sélectionnée dans l'input box, ou directement dans la macro...

J'espère être assez clair...

Merci!

@bernard_daniel_1950 

s = InputBox("entrez la date désirée, sous la forme 'jj/mm'.", " Recherche de journée sauvegardée", Me.Listbox1)

 

où ListBox1 est le nom de la zone de liste.

@Hans Vogelaar 

J'ai un problème:

bernard_daniel_1950_0-1713989236626.png

 

@bernard_daniel_1950 

Essayez

 

UserForm1.Listbox1

C'est fait.
Maintenant, le programme me dit "vous devez choisir une date"...

@bernard_daniel_1950 

Je voudrais voir le classeur...

@Hans Vogelaar 

Le flux commence par le bouton "options de sauvegarde", à droite...

@bernard_daniel_1950 

Problème 1 : vous déchargez le userform avant d'appeler RecupSauv, donc la valeur de la listbox n'existe plus. Solution:

Private Sub recupération_Click()
    Call recupsauv
    Unload Me
End Sub

Problème 2 : afficher correctement la date. Solution:

    Dim d As String
    If Choixsauv.Listsauve.ListIndex > -1 Then
        d = Format(Choixsauv.Listsauve, "dd/mm/yyyy")
    End If
    s = InputBox("entrez la date désirée, sous la forme 'jj/mm'.", _
            "Recherche de journée sauvegardée", d)
Encore merci...
J'ai plusieurs userforms où l'ordre "unload" précède le "call", sans problème?
J'ai shunté la phase "inputbox... " pour entrer directement d dans la macro!
Bonjour,
Je rencontre un phénomène étrange (du moins pour moi!):
si je rentre dans des userforms (boutons...) des cellules liées contenant des formules, celle ci sont parfois "écrasée" lors de l'utilisation des uforms (la formule se transforme en valeur!).
Pour être clair, si j'ai: =2=2 en formule, ça se transforme en : 4!
Est-ce "normal", ou y a t-il quelque chose à faire?
Ou alors le problème vient d'ailleurs?

@bernard_daniel_1950 

C'est normal. Pour éviter cela, ne liez pas les zones de texte aux cellules, mais utilisez VBA pour transférer les valeurs entre les zones de texte et les cellules.

Euh... Pourriez vous être plus explicite?
Un exemple?

@bernard_daniel_1950 

Ici un exemple très simple.

Oui, merci, ça marche!
Mais pourquoi ne peut on pas utiliser l'autre méthode (cellules liées)?
Juste pour mon info personnelle!

@bernard_daniel_1950 

Quand une zone de texte est liée à une cellule, la valeur de la cellule est identique à la valeur de la zone de texte. Ainsi, la cellule contient une valeur, pas une formule...

HansVogelaar_0-1714336375900.png

 

Merci!

@Hans Vogelaar 

Bonsoir,
j'ai un souci avec ce que vous m'avez envoyé, qui, pourtant, marchait très bien!
Voici le message:

bernard_daniel_1950_0-1715376563699.png

Je joins le fichier. le problème se situe dans la macro recupsauv (surligné).

Merci encore!

@bernard_daniel_1950 

Le "listbox" sur Choixsauv est nommé ListBox1, pas listsauve

Sub recupsauv()
    Application.ScreenUpdating = False
    'If MsgBox("Ceci va récupérer une journée enregistrée.", vbOKCancel, "Récupération de journée") = vbCancel Then
    'Exit Sub
    'End If
    Application.Goto Reference:="grille2"
    Selection.Copy
    Application.Goto Reference:="date"
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Dim d As String
    If Choixsauv.ListBox1.ListIndex > -1 Then
        d = Format(Choixsauv.ListBox1, "dd/mm/yyyy")
    End If

    Application.Goto Reference:="sauvegarde"
    Do While ActiveCell <> d
        ActiveCell.Offset(1, 0).Activate
        If ActiveCell.Value = 99999 Then
            MsgBox "Cete date n'existe pas!", , "Echec"
            Application.ScreenUpdating = True
            Range("a1").Select
            Exit Sub
        End If
    Loop
    ActiveWorkbook.Names.Add Name:="debrec", RefersTo:=ActiveCell
    ActiveCell.Offset(1, 0).Select
    Do While ActiveCell.Value = ""
        ActiveCell.Offset(1, 0).Select
    Loop
    ActiveCell.Offset(-1, 6).Select
    Range(ActiveCell, Range("debrec")).Select
    Selection.Copy
    Range("date").Select
    ActiveSheet.Paste

    Application.CutCopyMode = False
    MsgBox "Journée du " & d & " récupérée! vous pouvez désormais transférer les données à Decalog."
End Sub
Encore merci; étourderie de ma part!
Question que je vous pose à tout hasard: est il possible à une macro Excel d'agir sur un programme autre que Microsoft?
Je copie une donnée dans Excel et voudrais la copier dans un programme qui n'a rien à voir.
Je fais actuellement clic droit et coller, mais si je pouvais automatiser...

@bernard_daniel_1950 

Probablement pas, j'en ai peur