Grupos de Google ya no admite nuevas publicaciones ni suscripciones de Usenet. El contenido anterior sigue siendo visible.

indirect vers référence cellule

Visto 17 veces
Saltar al primer mensaje no leído

LaurentC

no leída,
10 may 2022, 11:14:0210/5/22
a
Bonjour

Au cours d'une Sub(), j'écris l'adresse d'une première cellule.address
dans une seconde sous la forme $B$12, plus loin j'utilise la fonction
indirect() vers la seconde cellule et retrouve le contenu de la
première cellule B12, ok c'est super ça fonctionne ... euf, ça
fonctionne jusqu'à ce que j'insère une ligne plus haut que la ligne 12
... le contenu attendu se retrouve en B13 et mon adresse n'est plus
bonne :-(

Y a t'il moyen d'écrire dans une cellule la référence d'une cellule et
non son adresse ?
Une référence qui bougerait lorsque j'insère une ligne ou colonne pour
désigner le même contenu ...

Merci pour vos idées
@+Laurent

Jc

no leída,
10 may 2022, 13:48:4410/5/22
a
Bonjour LaurentC
Je me permet de te répondre sur un sujet paru dans Ponx\Office auquel
ne ne pouvais répondre (pas les droits).
Il s'agit plus d'une réflexion que d'une réponse à ce problème

Si tu n'est pas le bon LaurentC tant pis et mille excuses pour la
"pollution"...

<Après mûre réflexion, LaurentC a écrit :
<
<Bonjour à tous
<
<J'essaye de visualiser mes performances sur les titres de mon PEA.
Pour< celà je tapisse une feuille Excel 365 avec tout un tas de cellule
< avec la fonction historique.actions() pointant vers différents
couples< de nom valeur / date début / date fin.
<
<Si il y a peu de cellule et donc peu de requête, ça fonctionne bien.
<Si j'abuse un peu, je me retrouve avec des cellules marquées #BUSY !
< qui finissent pas se remplir.
<Si j'abuse beaucoup, à la fin je me retrouve avec des cellules
marquées< #CONNEXION !
<... et à la fin ça marche plus du tout (là tout de suite le service
web< ne me répond pas du tout).
<
<Savez vous si il y a des limites dans l'usage de cette fonction ?
<
<Autre question :
<Lorsque Excel cherche des valeurs avec la fonction
historique.actions()
<, il marque dans la cellule (plus ou moins longtemps) #BUSY ! et tout
en< bas à gauche de mon Excel, à coté de "Prêt", il écrit "Calculer"
...
< Ce calculer reste là jusqu'à ce que toutes les cellules ne soient
plus
< #BUSY ! ok.
<
<Comment détecter cette état "Calculer" en VBA.

Bonjour,
comme MichD je ne connais pas.

Néanmoins si je comprends bien le problème il s'agit d'un temps
d'attente qui enfle de manière exponentiel rapporté au nombre de
fonction Historique.Action() utilisé.

Dans ce cas, s'il n'y a qu'une utilisation de Historique.Action() ça
va.
Il est peut-être possible, par VBA, de créer une boucle inscrivant
Historique.Action() un par un.
Une fois l'un inscrit, calculer, copier le résultat et coller la valeur
au même endroit ou ailleur et passer à la cote suivante.

Pour contourner le problème temporel.
En espérant t'avoir apporté une piste de réflexion bonne soirée.

--

______________________________________________
Jc

MichD

no leída,
10 may 2022, 21:32:3410/5/22
a
Le 10/05/22 à 11:13, LaurentC a écrit :
Bonjour,

Désolé, j'ai de la difficulté à comprendre ton problème, ce que la macro
doit faire.

Si tu utilises une adresse absolue de cellule comme $B$12, tu vas avoir
des difficultés. Utilise plutôt une adresse relative comme ceci :

MaCellule = Range("A1").address(0,0) , les 2 paramètres 0 signifient que
la lettre et la ligne ont un format du type B12 (voir l'aide d'Excel en
utilisant la touche F1 lorsque le curseur est sur Address), si tu copies
cette ligne vers le bas en VBA, elle va s'incrémenter...

Si c'est possible, apporte un supplément d'information et aussi les
quelques lignes de code de la macro et ce que tu n'arrives pas à écrire
comme code pour ce dont tu veux faire.

MichD

ThierryP

no leída,
11 may 2022, 3:07:5911/5/22
a
Bonjour Laurent,

Une idée comme ça..... Pourquoi ne pas nommer ta cellule, ainsi tu y fais référence
dans ta macro avec Range("toto") et tu ne t'occupes plus de son adresse.

ThierryP

LaurentC

no leída,
11 may 2022, 3:18:1311/5/22
a
Bonjour Thierry

> Une idée comme ça..... Pourquoi ne pas nommer ta cellule, ainsi tu y fais
> référence dans ta macro avec Range("toto") et tu ne t'occupes plus de son
> adresse.

Voilà une chouette solution ... sauf que j'ai des centaines de lignes
dans ma feuille et qu'à peu près 1 ligne sur 2 aura une référence du
genre ... donc ça fait des centaines de noms et celà devriendra vite
ingérable :-(

Merci pour cette idée.
@+Laurent

LaurentC

no leída,
11 may 2022, 3:26:5411/5/22
a
Bonjour Jc

Je suis bien le même LaurentC :-)

J'ai tenté de mettre en oeuvre comme tu dis mais à la fin ça ne le fait
pas ... en fait la boucle tourne, rempli la cellule attendue avec la
formule Historique.Action() et passe à la suivante.
VBA écrit la formule puis passe au suivant sans attendre que la requête
ai donné son résultat. Donc quand j'abuse (feuille avec plus de 100
requêtes), VBA a écrit toutes les formules dans toutes les cellules et
on attend le téléchargement des requêtes (Excel marque en bas à droite
"Calculer" et les cellules qui n'ont pas encore reçu leur requête sont
notées #BUSY!).

Pour le newsgroup Ponx, il est en lecture seule avec les identifiants v
et v. Envoie un email à bot arobase ponx.fr avec DEMANDE dans l'objet,
tu recevras un email avec des login et mot de passe qui t'ouvriront ces
newsgroup en écriture.

@+Laurent

LaurentC

no leída,
11 may 2022, 3:46:4211/5/22
a
Salut MichD

Je vais essayé d'être plus clair ...

Dans la cellule P139 j'ai la valeur 100 (appelons cette cellule toto).
Dans la cellule B2 j'ai la référence P139 ou $P$139 (le problème est le
même).

Dans une autre cellule, si j'écris =INDIRECT(B2), la cellule affiche
100, ok.

Si j'insère une ligne entre les lignes 99 et 100, ma cellule P139
(toto) se retrouve en P140, ma cellule B2 pointe toujours vers P139 et
ma formule indirect ne fonctionne plus :-(

L'idée de ThierryP est judissieuse mais semble innaplicable puisque
j'ai actuellement plusieurs centaines de lignes et en aurait plus
bientôt.

merci pour ton aide.
@+Laurent

ThierryP

no leída,
11 may 2022, 5:50:4511/5/22
a
Re,

J'ai vu ta réponse à MichD.

Ne connaissant pas ton fichier, je vais poser une question bête... Pourquoi es-tu obligé d'insérer des lignes plutôt que d'en ajouter ?

Sinon, une piste (basée sur une piste que j'avais trouvé il y a très très longtemps....) :
'########################################################
Public x As Long, y As Long

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
x = Range("A" & Cells.Rows.Count).End(xlUp).Row
End Sub

Et puis :
Private Sub Worksheet_Change(ByVal Target As Range)
If Range("A" & Cells.Rows.Count).End(xlUp).Row > x Then
y = Range("A" & Cells.Rows.Count).End(xlUp).Row
Call Cherche(y)
End If
End Sub
'########################################################
Et pour remplacer :
'########################################################
Sub Cherche(fin As Long)
Dim plage, cellule, ligne
Set plage = Me.Range("A1:A" & fin)
Application.EnableEvents = False
For Each cellule In plage
On Error GoTo suite
ligne = Val(Right(cellule, Len(cellule) - 1))
cellule.Value = Replace(cellule.Value, ligne, ligne + 1)
suite:
Next
Application.EnableEvents = True
End Sub
'########################################################

Le tout à mettre à ta sauce bien sûr !

ThierryP

LaurentC

no leída,
11 may 2022, 6:34:5511/5/22
a
Salut Thierry

> Pourquoi
> es-tu obligé d'insérer des lignes plutôt que d'en ajouter ?

C'est un poil compliqué ... j'essaye de gérer mes achats et ventes sur
mon PEA.

exemple
le 02/02/2020 j'achète 10 titres Orange
le 10/02/2020 je vends une partie de la position : vente de 8 titres

Je souhaite savoir quel est l'impact de cette vente sur mon résultat.

Pour celà j'insère une ligne en dessous de la ligne du 02/02 pour
spliter ma ligne d'achat en 2 lignes.
le 02/02/2020 j'achète 2 titres Orange
le 02/02/2020 j'achète 8 titres Orange

Et comme ça je peux lettrer ma vente et mon achat avec la même quantité
et trouver ma marge pour cette ligne. Vu que les lignes achat 8 et
vente 8 sont lettrées, je sais qu'il me reste 2 titres en stock ...

merci à tous
@+Laurent

MichD

no leída,
11 may 2022, 6:46:5711/5/22
a
Le 11/05/22 à 03:46, LaurentC a écrit :
> Salut MichD
>
> Je vais essayé d'être plus clair ...
>
> Dans la cellule P139 j'ai la valeur 100 (appelons cette cellule toto).
> Dans la cellule B2 j'ai la référence P139 ou $P$139 (le problème est le
> même).
>
> Dans une autre cellule, si j'écris =INDIRECT(B2), la cellule affiche
> 100, ok.
>
> Si j'insère une ligne entre les lignes 99 et 100, ma cellule P139 (toto)
> se retrouve en P140, ma cellule B2 pointe toujours vers P139 et ma
> formule indirect ne fonctionne plus :-(
>
> L'idée de ThierryP est judissieuse mais semble innaplicable puisque j'ai
> actuellement plusieurs centaines de lignes et en aurait plus bientôt.
>

Moi, j'essayerais comme ça :

En P139 ==> la valeur 100
En B2 au lieu d'écrire l'adresse de la cellule P139, j'inscrirais la
formule suivante : ="P"&LIGNE((DECALER($P139;;;;)))

Dans une autre cellule : Tu peux inscrire la formule : Indirect(B2)

Lorsque tu ajoutes une ligne, la formule en B2 retournera P140, la
nouvelle adresse de la cellule contenant la valeur 100. La cellule
contenant la formule =Indirect(B2) retournera 100.

MichD

LaurentC

no leída,
11 may 2022, 8:32:1211/5/22
a
Salut

> Moi, j'essayerais comme ça :
>
> En P139 ==> la valeur 100
> En B2 au lieu d'écrire l'adresse de la cellule P139, j'inscrirais la formule
> suivante : ="P"&LIGNE((DECALER($P139;;;;)))
>
> Dans une autre cellule : Tu peux inscrire la formule : Indirect(B2)
>
> Lorsque tu ajoutes une ligne, la formule en B2 retournera P140, la nouvelle
> adresse de la cellule contenant la valeur 100. La cellule contenant la
> formule =Indirect(B2) retournera 100.
>

en 1 mot : excellent !
Je peux ajouter d'autres qualificatifs ;-)
Vraiment chouette
Pile poil
...

Je comprends pas tout bien ...
Ligne() ça va.
Decaler(), dans cet usage je ne comprends pas
j'ai enlevé un jeu de parenthèses
je ne comprends pas le $ dans décaler, ça semble fonctionner


J'en ai pas super besoin mais parce que je suis curieux (et aussi un
gros abuseur) ça serait bien que ça fonctionne aussi pour les colonnes,
j'ai essayé
=COLONNE(DECALER(B2;;;;))&LIGNE(DECALER(B2;;;;))

Alors ça fonctionne (ça incérmente quand j'insère des ligne et colonne)
mais ça renvoie 22 pour désigner B2 ... c'est pas terrible, comment
remplacer le premier 2 par B ?

Nomnbreux merci
@+Laurent

MichD

no leída,
11 may 2022, 10:25:5611/5/22
a
Le 11/05/22 à 08:32, LaurentC a écrit :
Bonjour

Je dois partir pour un moment...

En cellule B2, essaie la formule : =ADRESSE(LIGNE(P139);COLONNE(P139);4)

Les explications => plus tard.

MichD


LaurentC

no leída,
11 may 2022, 10:29:1011/5/22
a
salut

> Je dois partir pour un moment...

pas de problème :-) prends ton temps !

> En cellule B2, essaie la formule : =ADRESSE(LIGNE(P139);COLONNE(P139);4)

Je pense que ça va aller :-)

> Les explications => plus tard.

Je pense avoir compris, DECALER(B2;;;;) renvoie B2 mais vu que la
référence est dans une formule elle évolura avec le temps si j'insert
des lignes.

Super merci à toi
@+Laurent

LaurentC

no leída,
11 may 2022, 12:45:0811/5/22
a
PfoooaaaAAAA j'halucine !!!

Donc dans mon code j'ai adapté la réponse comme ça

Intersect(Rows(CpteLigne), Range("TblOpérations[Soldée]")).FormulaLocal
= _
"=""P""&LIGNE(DECALER(P" & NumLingeInit & ";;;;))"

Et ça marche bien ... sauf un détail, la formule écrite est
="P"&@LIGNE(DECALER(P288;;;;))

Il sert à quoi le @ ? (arobase devant LIGNE)
Il est venu là comment ?

merci
@+Laurent

MichD

no leída,
11 may 2022, 12:57:4711/5/22
a

Le 11/05/22 à 12:45, LaurentC a écrit :
="P"&@LIGNE(DECALER(P288;;;;))

L'utilisation de "@" dans une formule Excel standard est utilisée
seulement dans les versions Microsoft Office 365. Je n'ai jamais vu cela
dans ma version Excel 2016.

Voilà l'explication...

Le symbole @ est déjà utilisé dans les références de tableaux pour
indiquer une intersection implicite. Considérons la formule suivante
dans un tableau =[@Column1]. Ici, le symbole @ indique que la formule
doit utiliser l'intersection implicite pour récupérer la valeur de la
même ligne dans [Column1].

Cela t'aide? ;-))

MichD

LaurentC

no leída,
11 may 2022, 14:45:5311/5/22
a
salut

> Voilà l'explication...
>
> Le symbole @ est déjà utilisé dans les références de tableaux pour indiquer
> une intersection implicite. Considérons la formule suivante dans un tableau
> =[@Column1]. Ici, le symbole @ indique que la formule doit utiliser
> l'intersection implicite pour récupérer la valeur de la même ligne dans
> [Column1].
>
> Cela t'aide? ;-))

Euf ... pour être tout à fait honnète, il y a bien longtmps que je me
suis persuadé que je ne pourrais pas comprendre tout Excel ... même si
tu fais des efforts :-)

Notons que le code VBA ajoute le @ mais la formule marche très bien
sans !

Encore merci à toi
@+Laurent

Jc

no leída,
12 may 2022, 12:22:3712/5/22
a
LaurentC a écrit :
> Une fois l'un inscrit, calculer, copier le résultat et coller la valeur au
> même endroit ou ailleur et passer à la cote suivante.

Ma proposition était :
Une fois "Historique.Action()" inscrit, calculer, copier le résultat et
coller la valeur au même endroitet passer à la cote suivante

Ce qui fait qu'il n'y a, à chaque passage dans la boucle, qu'un seul
"Historique.Action() ".
Et en le calculant dans la macro, pour inscrire le résultat en dur ?
Têtu je suis.....# ; D

--

______________________________________________
Jc

LaurentC

no leída,
12 may 2022, 14:54:4112/5/22
a
Salut

Faudrait essayer mais j'ai un doute.
Quand ton code valide le Historique.Action(), si tu copies juste
derrière, tu auras parfois les premières cellule duement remplies, les
suivantes marquée #BUSY! et dans ton collé le #BUSY! est traduit par
#CALC!.
J'ai tenté de chercher comment détecter cet état avant de faire copier
... sans succès :-(

@+Laurent
0 mensajes nuevos