Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Retenir selection multiple

12 réponses
Avatar
milloche
Bonjour le forum
Je cherche dans une nouvelle ligne (la première vide) d'une feuille à faire
la moyenne de deux autres, déjà existantes.Puis les supprimer.
Prix de revient moyen quand 2 achats même article à prix et quantité
différents et total en stock
Je butte dès le départ.
Je ne peux donc pas vous donner d'exemple ni envoyer un fichier
Je sélectionne 2 cellules (par ctrl+clic) dans la même colonne mais lignes
presque jamais contiguës pour lesquelles je veux faire ce calcul.
Comment entrer dans la caboche d'excel qu'il faut qu'il se souvienne de ces
2 cellules ou au moins de leur N° de ligne pour pouvoir y revenir quand
j'en aurai besoin dans ma macro.
Je ne peux que mémoriser la cellule active mais pas la seconde de la
sélection.
Merci.
Ma macro actuelle est
Dim a,b
Set a= activecell
Set b= je sais pas quoi mais c'est la seconde ligne ou cellule de ma
sélection
Et c'est tout pour l'instant !
Je pensais au départ pouvoir le faire avec plus de 2 lignes, mais pour
commencer,2 suffiront.
JMM

2 réponses

1 2
Avatar
isabelle
bonjour Jmm,

Sub Macro1()
Dim plg()
For Each c In Selection
x = x + 1
ReDim Preserve plg(x)
plg(x) = c.Row
Next
MsgBox "=((I" & plg(1) & "*F" & plg(1) & ")+(I" & plg(2) & "*F" & plg(2)
& "))/(F" & plg(1) & "+F" & plg(2) & ")"
End Sub

isabelle

milloche a écrit :
OK
Avec ces 2 macros et tes explications supplémentaires, ça fonctionne.
J'avais eu entre-temps une idée d'Eugénie, ma copine :
mémoriser la position de la sélection unique (la première ligne à traiter)
puis demander par inputbox le n° de la seconde ligne. Je n'ai pas eu le
temps de finir et je laisse tomber vu ta solution.
Pour ta question, et je te dois bien ça, la finalité est (tu as remarqué
qu'il n'est pas question de patates mais d'actions boursières) de calculer,
quand tu achète la même action mais en 2 fois donc sur 2 lignes, le prix
moyen d'achat et la quantité que tu as en portefeuille, et de tout reporter
sur une seule et même ligne comme le font les "vrais" programmes de gestion
boursière.
A plus.
<]:o)) JMM

"michdenis" a écrit dans le message de news:


Désolé, mais j'ai de la difficulté à suivre.

Dans l'exemple que je t'ai donné :

'Déclare la variable dans un module Standard
Public Rg As Range

Sub Test()
if typename(selection) = "Range" then
set Rg = selection
end if
End Sub

Si au moment où tu as à l'écran sélectionné tes 2 cellules et
que tu appelles la macro "Test", La variable Rg conservera
tout ce que tu veux de tes 2 cellules, leurs adresses, la valeur
de chacune des cellules, le nom de la feuille où sont tes 2
cellules, etc ...

Exemple, pour extraire les adresses et la valeur des 2 cellules
for each C in Rg
Msgbox c.Address & ", " & c.Value
Next

Ce que je ne comprends pas, c'est la finalité de la macro ! Tu ne dois
pas faire ça que pour une seule ligne à traiter...

Il y a d'autres répondants sur ce forum, espérons que l'un deux arrivera
à saisir ce que tu essaies de m'expliquer.












Avatar
milloche
Encore Isabelle et Denis au coude à coude.
Çà va être dur pour les futures olympiades au Canada. <]:o))
Je reviendrais à Montréal %% retrouver le vent de l'hiver %%
J'essayerais de mettre la barre encore plus haut la prochaine fois, si j'en
ai besoin bien sûr.
Mon but n'étant pas de vous coller. Mais de perfectionner surtout un
fichier qui ressemble de plus en plus à un vrai programme de pro !
Merci à Philippe aussi pour ses conseils.
Cordialement. Avec un peu de retard cette fois. Je n'étais pas chez moi
hier soir.
JMM

"isabelle" a écrit dans le message de news:

bonjour Jmm,

Sub Macro1()
Dim plg()
For Each c In Selection
x = x + 1
ReDim Preserve plg(x)
plg(x) = c.Row
Next
MsgBox "=((I" & plg(1) & "*F" & plg(1) & ")+(I" & plg(2) & "*F" & plg(2)
& "))/(F" & plg(1) & "+F" & plg(2) & ")"
End Sub

isabelle

milloche a écrit :
OK
Avec ces 2 macros et tes explications supplémentaires, ça fonctionne.
J'avais eu entre-temps une idée d'Eugénie, ma copine :
mémoriser la position de la sélection unique (la première ligne à
traiter) puis demander par inputbox le n° de la seconde ligne. Je n'ai
pas eu le temps de finir et je laisse tomber vu ta solution.
Pour ta question, et je te dois bien ça, la finalité est (tu as remarqué
qu'il n'est pas question de patates mais d'actions boursières) de
calculer, quand tu achète la même action mais en 2 fois donc sur 2
lignes, le prix moyen d'achat et la quantité que tu as en portefeuille,
et de tout reporter sur une seule et même ligne comme le font les
"vrais" programmes de gestion boursière.
A plus.
<]:o)) JMM

"michdenis" a écrit dans le message de news:


Désolé, mais j'ai de la difficulté à suivre.

Dans l'exemple que je t'ai donné :

'Déclare la variable dans un module Standard
Public Rg As Range

Sub Test()
if typename(selection) = "Range" then
set Rg = selection
end if
End Sub

Si au moment où tu as à l'écran sélectionné tes 2 cellules et
que tu appelles la macro "Test", La variable Rg conservera
tout ce que tu veux de tes 2 cellules, leurs adresses, la valeur
de chacune des cellules, le nom de la feuille où sont tes 2
cellules, etc ...

Exemple, pour extraire les adresses et la valeur des 2 cellules
for each C in Rg
Msgbox c.Address & ", " & c.Value
Next

Ce que je ne comprends pas, c'est la finalité de la macro ! Tu ne dois
pas faire ça que pour une seule ligne à traiter...

Il y a d'autres répondants sur ce forum, espérons que l'un deux
arrivera
à saisir ce que tu essaies de m'expliquer.














1 2