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!

187 Replies
Merci!
Pas facile de passer de 30 ans de xlm4 à vba!

@Hans Vogelaar 

 

Bonsoir, une nouvelle fois, je sollicite votre sagacité pour une macro qui me hante. Voici un tableau, de la colonne FS à FY; FZ étant quelque chose que j'ai rajouté.

Les lignes vides correspondent à des enregistrements de la journée, mais qui n'ont pas donné lieu à paiement.

Je souhaiterais compacter ce tableau pour ne faire apparaître que les lignes "payantes".

J'ai imaginé une boucle qui utilise la colonne FZ pour sélectionner la ligne de tableau remplissant le critère, la copie et la colle dans un autre tableau, à la première ligne vide.

mais, ensuite, je ne sais pas comment faire pour la seconde ligne!

Je pense qu'il faut deux boucles imbriquées?

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

Sub imprjourecet_vb()
'
' imprjourecet_vb Macro
' mettre en forme et imprimer le journal de recette
'

'
Range("FZ14").Select
Do While ActiveCell = 0
ActiveCell.Offset(1, 0).Activate
Loop
ActiveCell.Offset(0, -14).Select
Range(ActiveCell, ActiveCell.Offset(0, 6)).Select
Selection.Copy
End Sub

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

 

FS

FT

FU

FV

FW

FX

FY

FZ

DATE

ESPECES

CHEQUE

CB

TOTAL JOUR

ABONNEMENTS

IMPRESSIONS

 

1

 

20,00 €

 

 

 

 

20

1

 

 

 

 

 

 

0

1

2,60 €

 

 

 

 

 

2,6

1

 

 

 

 

 

 

0

1

20,00 €

 

 

 

 

 

20

1

20,00 €

 

 

 

 

 

20

1

 

20,00 €

 

 

 

 

20

1

 

 

 

 

 

 

0

1

 

 

 

 

 

 

0

1

 

 

 

 

 

 

0

1

 

20,00 €

 

 

 

 

20

1

0,20 €

 

 

 

 

 

0,2

1

 

 

 

 

 

 

0

1

 

 

 

 

 

 

0

1

20,00 €

 

 

 

 

 

20

1

0,40 €

 

 

 

 

 

0,4

1

1,20 €

 

 

124,40 €

120,00 €

4,40 €

250

4

0,20 €

 

 

 

 

 

0,2

Je sais le faire en XLM4, mais pas là!

D'avance, merci!

@bernard_daniel_1950 

Essayez

Sub CopierLignesNonVides()
    Const LignePremiere = 14
    Const ColonneSource = "FZ"
    Const ColonneDestination = "FL"
    Dim LigneSource As Long
    Dim LigneDerniere As Long
    Dim LigneDestination As Long
    Application.ScreenUpdating = False
    LigneDestination = LignePremiere
    LigneDerniere = Cells(Rows.Count, ColonneSource).End(xlUp).Row
    For LigneSource = LignePremiere To LigneDerniere
        If Cells(LigneSource, ColonneSource).Value > 0 Then
            Cells(LigneDestination, ColonneDestination).Resize(1, 7).Value = _
                Cells(LigneSource, ColonneSource).Offset(0, -7).Resize(1, 7).Value
            LigneDestination = LigneDestination + 1
        End If
    Next LigneSource
    Application.ScreenUpdating = True
End Sub
Outch!
Le méprisable vermisseau que je suis se terre dans la boue de son ignorance crasse!

@bernard_daniel_1950 

Ce n'est pas si grave! :)

Bonsoir, encore une (pour la route!):
J'ai écrit:
-----------------
Application.ScreenUpdating = True
ActiveCell.Offset(0, -25).Activate
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 5756927
.TintAndShade = 0
End With
If MsgBox("Ce nom correspond-t-il à votre recherche? si non, cliquez sur non pour continuer!", vbYesNo, "Etat de la recherche") = vbYes Then
Exit Sub
End If
With Selection.Interior
Pattern = xlNone
.TintAndShade = 0
.PatternTintAndShade = 0
End With
-----------------
Dans laquelle je colorie en jaune une cellule; si le choix ne convient pas, je veux la "décolorer"...
Et ça ne marche pas! J'ai pourtant fait une macro "à blanc" qui fonctionne...
Merci déjà!

@bernard_daniel_1950 

Essayez

    Application.ScreenUpdating = True
    ActiveCell.Offset(0, -25).Activate
    Selection.Interior.Color = 5756927
    If MsgBox("Ce nom correspond-t-il à votre recherche? Si non, cliquez sur Non pour continuer!", _
            vbYesNo, "État de la recherche") = vbYes Then
        Exit Sub
    End If
    Selection.Interior.ColorIndex = xlColorIndexNone
Simple, mais beau!
merci!
Cela faisait longtemps...
Je souhaiterais, à partir d'une condition if (si = false) atteindre un point ultérieur de la macro.
Je suppose que c'est possible, mais je ne vois pas comment!
Merci!

@bernard_daniel_1950 

Une solution possible:

    If condition = True
        ...
        ...
    End If
    ...
    ...

Une autre:

    If condition = True
        ...
        ...
    Else
        ...
        ...
    End If

Ou bien

    If condition = False Then GoTo EtapeSuivante
    ...
    ...
EtapeSuivante:
    ...
    ...
Est ce que je peux écrire:
if activecell.value = 0 then goto EtapeSuivante ?

@bernard_daniel_1950 

Oui, ça ira!

Bonsoir; cela faisait longtemps!
J'ai écrit ceci:
--------------------
If ActiveCell <> "espèces" Then
MsgBox "Vous devez être placé dans la case 'espèces' de la ligne concernée!"
Exit Sub
End If
-------------
En fait, je voudrais que, si le contenu de la cellule sélectionnée est différent de "espèces" alors message + arrêt...
j'ai essayé plein de trucs, mais...

@bernard_daniel_1950 

Excusez-moi, je ne comprends pas ce que vous voulez qu'il se passe.

@Hans Vogelaar 

Désolé, je n'ai pas été très clair!

En fait, il est primordial, pour le bon déroulement de ma macro, que la cellule active soit positionnée sur "espèces"... (car la macro utilise la valeur de la case à gauche.)

bernard_daniel_1950_0-1669971982036.png

 

@bernard_daniel_1950 

C'est effectué par la ligne Exit Sub, n'est ce pas?

Je vous joins l'intégralité de la macro (qui va vous sembler primitive, j'en ai peur!)
----------------------
Sub rendu_monnaie_vb()
'
' rendu_monnaie_vb Macro
' rendu monnaie!
'

'
Application.ScreenUpdating = False
If ActiveCell <> "espèces" Then
MsgBox "Vous devez être placé dans la case 'espèces' de la ligne concernée!"
Exit Sub
End If
ActiveWorkbook.Names.Add Name:="icim", RefersTo:=ActiveCell
ActiveCell.Offset(0, 1).Activate
Selection.Copy
Application.Range("Z2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Application.Range("Z3").Select
Dim m As Double
m = InputBox("Entrez le montant donné (si décimales, utilisez la virgule!):")
Dim cart As Range
Set cart = Selection
cart.Formula = m
Range("z4").Activate
Dim resultat As Double
resultat = Range("z4").Value
If resultat < 0 Then
MsgBox ("Reste dû: " & resultat)
GoTo EtapeSuivante
End If
MsgBox ("A rendre: " & resultat)
EtapeSuivante:
Application.Goto reference:="icim"

End Sub
-----------------

@bernard_daniel_1950 

Si la cellule active ne contient pas 'espèces', le macro est terminé. C'est ce que voulez, n'est-ce pas?

Exactement! Il y a une liste déroulante (qui contient le mot "espèces") dans la cellule.

@bernard_daniel_1950 

Peut-être

 

If LCase(ActiveCell.Value) <> "espèces" Then