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!

204 Replies
Merci, ça marche! Même si je ne comprends pas l'usage de la fonction LCase ...

@bernard_daniel_1950 

LCase convertit une texte en miniscules.

"Espèces" n'est pas égal à "espèces", mais LCase("Espèces") est égal à "espèces".

 

C'est vraiment trop bête!
Il suffisait donc que, dans la macro, j'écrive "Espèces"...
Je m'en veux de vous avoir dérangé pour ça!
Bonsoir,
Je vous dérange encore...
J'ai écrit ceci:
-------------------
Workbooks.Open Filename:= _
"C:\Users\Bernard\Desktop\Bernard\Bibliothèque\Medianel\gestion des abonnements\sauvjr.xlsx"
------------------------------
Sachant que ce programme va être installé sur des ordinateurs différents, avec des chemins d'accès différents, de contracter l'intitulé: par exemple "C:\sauvjr.xlsx"?
C'est peut-être idiot...

@bernard_daniel_1950 

 

Serait-il possible de stocker le classeur sauvjr.xlsx dans le même dossier que le classeur de macro? Si oui, vous pourriez utiliser:

Workbooks.Open Filename:=ThisWorkbook.Path & "\sauvjr.xlsx"

 

Ils étaient déjà dans le même dossier: "gestion des abonnements"... Et ça marche!
Encore merci!
Bonjour,
Et me voilà de retour!
Je bute sur ceci:
-----------------
Sub tricheqnomch()
'
' tricheqnomch Macro
' trie les chèques par titulaire
'

'
Application.ScreenUpdating = False
MsgBox "Ceci va trier les chèques par nom du titulaire du chèque, puis par montant décroissant, enfin par jour.", , "Tri par nom"
Application.Goto reference:="resulch"
ActiveWorkbook.Worksheets("mois de base").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("mois de base").Sort.SortFields.Add2 Key:=Range( _
"AHP9:AHP310"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
ActiveWorkbook.Worksheets("mois de base").Sort.SortFields.Add2 Key:=Range( _
"AHQ9:AHQ310"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
xlSortNormal
ActiveWorkbook.Worksheets("mois de base").Sort.SortFields.Add2 Key:=Range( _
"AHN9:AHN310"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("mois de base").Sort
.SetRange Range("AHN8:AHS310")
.Header = xlYes
.MatchCase = False
.orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With

Range("AHN2").Select
Application.CutCopyMode = False
End Sub
----------------
Ce fichier comporte plusieurs onglets, un par mois, nommés, janvier, février,... et un de base: mois de base.
Je voudrais que cette macro s'effectue dans le mois/onglet où je suis, par exemple janvier.
Merci d'avance!

@bernard_daniel_1950 

Essayez

Sub tricheqnomch()
    Dim m As Long
    ' tricheqnomch Macro
    ' trie les chèques par titulaire
    Application.ScreenUpdating = False
    MsgBox "Ceci va trier les chèques par nom du titulaire du chèque, puis par montant décroissant, enfin par jour.", , "Tri par nom"
    m = Range("AHN:AHS").Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    Range("AHN8:AHS" & m).Sort _
        Key1:=Range("AHN8"), Order1:=xlAscending, _
        Key2:=Range("AHQ8"), Order2:=xlDescending, _
        Key3:=Range("AHP8"), Order3:=xlAscending, _
        Header:=xlYes
    Application.ScreenUpdating = True
End Sub
Merci!
Simple et propre...
J'ai toutefois cru déceler une erreur dans l'ordre des tri...
C'était un test, pour voir si je suivais? 🙂

@bernard_daniel_1950 

Non - quelle erreur?

Ma formule: AHP, AHQ, AHN.
La votre: AHN, AHQ, AHP...

@bernard_daniel_1950 

Sub tricheqnomch()
    Dim m As Long
    ' tricheqnomch Macro
    ' trie les chèques par titulaire
    Application.ScreenUpdating = False
    MsgBox "Ceci va trier les chèques par nom du titulaire du chèque, puis par montant décroissant, enfin par jour.", , "Tri par nom"
    m = Range("AHN:AHS").Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    Range("AHN8:AHS" & m).Sort _
        Key1:=Range("AHP8"), Order1:=xlAscending, _
        Key2:=Range("AHQ8"), Order2:=xlDescending, _
        Key3:=Range("AHN8"), Order3:=xlAscending, _
        Header:=xlYes
    Application.ScreenUpdating = True
End Sub

@HansVogelaar 

Bonjour, cela faisait longtemps!

Nouveau souci:

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

Application.ScreenUpdating = True
ActiveCell.Offset(0, -14).Activate
If ActiveCell = pretmax Then
MsgBox "Quota autorisé dépassé!", , "Anomalie"
Exit Do
End If

----------

Je voudrais que ce message s'affiche lorsque la valeur de la cellule active soit identique à celle stipulée dans la cellule nommée pretmax...

Or le message s'affiche systématiquement!

Autre pb dont je vous ai déjà parlé: lorsque j'exécute une macro en pas à pas (F8), seule la feuille macro apparaît; je suis obligé d'aller systématiquement dans la feuille principale pour suivre le déroulement. Ceci n'était pas le cas dans les macros excel4, où l'on restait sur la feuille principale!

Je ne sais pas si je suis très clair?

Merci!

B. DANIEL

@bernard_daniel_1950 

Pourriez-vous poster la macro complète?

Pour afficher à la fois le code et la feuille de calcul, vous pouvez organiser la fenêtre Excel et la fenêtre Visual Basic Editor côte à côte.

Pour la macro, j'ai écrit ceci, et ça marche:
------------------------------
Application.ScreenUpdating = True
ActiveCell.Offset(-1, -14).Activate
If ActiveCell.Value = Range("M3").Value Then
MsgBox "Quota autorisé atteint!", , "Maximum autorisé"
Exit Do
End If
-----------------
Et merci pour la double vue, je n'y avais pas pensé!
Bonne soirée.
Bonsoir, j'ai encore une fois besoin de vos lumières!
Pour comprendre, je situe le décor.
Je suis bénévole dans une médiathèque et ai conçu, pour la gestion, un programme excel.
Ce programme a été installé sur le réseau informatique de la ville.
Ce réseau a fait l'objet d'une cyber-attaque; le programme est donc indisponible.
J'ai eu l'idée d'en enregistrer une copie sur le disque dur systématiquement à chaque fermeture.
Pour cela, j'ai créé un before_close, et je voudrais y insérer une macro qui exécute ma demande.
Je voudrais aussi que toute l'opération soit "transparente": pas de message du genre: " ce fichier existe déjà. Voulez vous le remplacer?".
Comment faire le tout?
Merci!

@bernard_daniel_1950 

 

Au-dessus de la ligne qui enregistre la copie, insérez

 

Application.DisplayAlerts = False

 

Et en dessous, insérez

Application.DisplayAlerts = True

Avec un peu de retard, encore merci!
Me voici de retour!
dans la macro ci dessous:
--------------
Sub repar()
Application.ScreenUpdating = False
Range("integrit2").Select
If ActiveCell.Value = 0 Then
MsgBox "aucune anomalie détectée!", , "Recherche d'anomalie"
Exit Sub
End If
Application.Undo
If MsgBox("Ceci a-t-il rectifié la mauvaise manip?", vbYesNo, "rectification") = vbYes Then
Exit Sub
End If
------------------------
je voudrais que, après undo, le résultat de l'action apparaisse, sans interrompre la macro.
Possible?

@bernard_daniel_1950 

En dessous de la ligne Application.Undo, insérez

 

Application.ScreenUpdating = True