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

référence circulaire

7 réponses
Avatar
Caroual
Bonjour,
J'ai un petit problème à résoudre et je ne trouve pas l'idée parfaite.
J'ai 2 colonnes, j'ai le choix de rentrer une donnée dans la première
colonne ou dans la 2ème colonne.
Si je rentre 100 dans la première colonne un calcul doit se faire dans la
2ème colonne du style 1ère colonne*2
Si je rentre 200 dans la 2ème colonne un calcul doit se faire dans la
première colonne du style 200/2.
J'ai mis les 2 fonctions dans chaque colonne en "a1" ="b1"/2 et en
"b1"=a1*2. Je rentre ma donnée suivant mes besoins soit en "a1" ce qui
efface la formule mais calcule comme il faut en "b1" et vice versa.
Cela provoque une référence circulaire, j'ai mis itération à 1 et cela
fonctionne à peu près bien sauf que si je veux modifier des données je me
retrouve devant des formules qui peuvent avoir été effacées.
Sinon j'avais pensé à faire une macro évènementielle qui dirait : dès que je
rentre une valeur dans une cellule de la colonne "a" un calcul se fait dans
la colonne "b" mais je ne sais comment la déclencher.
Merci pour vos idées
Caroual

7 réponses

Avatar
isabelle
bonjour Caroual,

tu ne peut pas utiliser 3 colonnes ?

isabelle

Caroual a écrit :
Bonjour,
J'ai un petit problème à résoudre et je ne trouve pas l'idée parfaite.
J'ai 2 colonnes, j'ai le choix de rentrer une donnée dans la première
colonne ou dans la 2ème colonne.
Si je rentre 100 dans la première colonne un calcul doit se faire dans la
2ème colonne du style 1ère colonne*2
Si je rentre 200 dans la 2ème colonne un calcul doit se faire dans la
première colonne du style 200/2.
J'ai mis les 2 fonctions dans chaque colonne en "a1" ="b1"/2 et en
"b1"¡*2. Je rentre ma donnée suivant mes besoins soit en "a1" ce qui
efface la formule mais calcule comme il faut en "b1" et vice versa.
Cela provoque une référence circulaire, j'ai mis itération à 1 et cela
fonctionne à peu près bien sauf que si je veux modifier des données je me
retrouve devant des formules qui peuvent avoir été effacées.
Sinon j'avais pensé à faire une macro évènementielle qui dirait : dès que je
rentre une valeur dans une cellule de la colonne "a" un calcul se fait dans
la colonne "b" mais je ne sais comment la déclencher.
Merci pour vos idées
Caroual





Avatar
Caroual
Bonsoir,
Oui je veux utiliser seulement 2 colonnes. Je viens de tester celà :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Select Case ActiveCell.Column
Case Is = 1
For n = 1 To 1000
If Cells(n, 1) <> "" Then Cells(n, 2) = "": Cells(n, 2) = Cells(n,
1) * 2
Next
Case Is = 2
For n = 1 To 1000
If Cells(n, 2) <> "" Then Cells(n, 1) = "": Cells(n, 1) = Cells(n, 2) /
2
Next
End Select
End Sub

Cela à l'air de convenir, mais j'essaierais toute proposition. Vos idées
sont souvent tellement géniales...
Merci
Caroual


"isabelle" a écrit dans le message de news:
O3vg40X$
bonjour Caroual,

tu ne peut pas utiliser 3 colonnes ?

isabelle

Caroual a écrit :
Bonjour,
J'ai un petit problème à résoudre et je ne trouve pas l'idée parfaite.
J'ai 2 colonnes, j'ai le choix de rentrer une donnée dans la première
colonne ou dans la 2ème colonne.
Si je rentre 100 dans la première colonne un calcul doit se faire dans la
2ème colonne du style 1ère colonne*2
Si je rentre 200 dans la 2ème colonne un calcul doit se faire dans la
première colonne du style 200/2.
J'ai mis les 2 fonctions dans chaque colonne en "a1" ="b1"/2 et en
"b1"¡*2. Je rentre ma donnée suivant mes besoins soit en "a1" ce qui
efface la formule mais calcule comme il faut en "b1" et vice versa.
Cela provoque une référence circulaire, j'ai mis itération à 1 et cela
fonctionne à peu près bien sauf que si je veux modifier des données je me
retrouve devant des formules qui peuvent avoir été effacées.
Sinon j'avais pensé à faire une macro évènementielle qui dirait : dès que
je rentre une valeur dans une cellule de la colonne "a" un calcul se fait
dans la colonne "b" mais je ne sais comment la déclencher.
Merci pour vos idées
Caroual






Avatar
Jacky
Bonsoir,
Ceci peut-être
'-----------
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
On Error GoTo erreur
If Target.Column = 2 And Target <> "" Then Range("a" & Target.Row) =
Range("b" & Target.Row) / 2
If Target.Column = 1 And Target <> "" Then Range("b" & Target.Row) =
Range("a" & Target.Row) * 2
Exit Sub
erreur:
MsgBox "Donnée erronée"
Target.Select
End Sub
'-----------


--
Salutations
JJ


"Caroual" a écrit dans le message de news:
48a3374f$0$937$
Bonjour,
J'ai un petit problème à résoudre et je ne trouve pas l'idée parfaite.
J'ai 2 colonnes, j'ai le choix de rentrer une donnée dans la première
colonne ou dans la 2ème colonne.
Si je rentre 100 dans la première colonne un calcul doit se faire dans la
2ème colonne du style 1ère colonne*2
Si je rentre 200 dans la 2ème colonne un calcul doit se faire dans la
première colonne du style 200/2.
J'ai mis les 2 fonctions dans chaque colonne en "a1" ="b1"/2 et en
"b1"¡*2. Je rentre ma donnée suivant mes besoins soit en "a1" ce qui
efface la formule mais calcule comme il faut en "b1" et vice versa.
Cela provoque une référence circulaire, j'ai mis itération à 1 et cela
fonctionne à peu près bien sauf que si je veux modifier des données je me
retrouve devant des formules qui peuvent avoir été effacées.
Sinon j'avais pensé à faire une macro évènementielle qui dirait : dès que
je rentre une valeur dans une cellule de la colonne "a" un calcul se fait
dans la colonne "b" mais je ne sais comment la déclencher.
Merci pour vos idées
Caroual





Avatar
Caroual
Merci cela marche très bien
Je ne sais pas à quoi correspond :
If Target.Count > 1 Then Exit Sub
Merci et bonne soirée

"Jacky" a écrit dans le message de news:
uonABEY$
Bonsoir,
Ceci peut-être
'-----------
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
On Error GoTo erreur
If Target.Column = 2 And Target <> "" Then Range("a" & Target.Row) =
Range("b" & Target.Row) / 2
If Target.Column = 1 And Target <> "" Then Range("b" & Target.Row) =
Range("a" & Target.Row) * 2
Exit Sub
erreur:
MsgBox "Donnée erronée"
Target.Select
End Sub
'-----------


--
Salutations
JJ


"Caroual" a écrit dans le message de news:
48a3374f$0$937$
Bonjour,
J'ai un petit problème à résoudre et je ne trouve pas l'idée parfaite.
J'ai 2 colonnes, j'ai le choix de rentrer une donnée dans la première
colonne ou dans la 2ème colonne.
Si je rentre 100 dans la première colonne un calcul doit se faire dans la
2ème colonne du style 1ère colonne*2
Si je rentre 200 dans la 2ème colonne un calcul doit se faire dans la
première colonne du style 200/2.
J'ai mis les 2 fonctions dans chaque colonne en "a1" ="b1"/2 et en
"b1"¡*2. Je rentre ma donnée suivant mes besoins soit en "a1" ce qui
efface la formule mais calcule comme il faut en "b1" et vice versa.
Cela provoque une référence circulaire, j'ai mis itération à 1 et cela
fonctionne à peu près bien sauf que si je veux modifier des données je me
retrouve devant des formules qui peuvent avoir été effacées.
Sinon j'avais pensé à faire une macro évènementielle qui dirait : dès que
je rentre une valeur dans une cellule de la colonne "a" un calcul se fait
dans la colonne "b" mais je ne sais comment la déclencher.
Merci pour vos idées
Caroual









Avatar
Jacky
Re..
Je ne sais pas à quoi correspond :
If Target.Count > 1 Then Exit Sub


A éviter que plusieurs cellules soient sélectionnées, pour effacer par
exemple
Pas indispensable dans ce cas, mais évite le message de la gestion d'erreur
en cas de sélection multiple.

--
Salutations
JJ


"Caroual" a écrit dans le message de news:
48a343a0$0$849$
Merci cela marche très bien
Je ne sais pas à quoi correspond :
If Target.Count > 1 Then Exit Sub
Merci et bonne soirée

"Jacky" a écrit dans le message de news:
uonABEY$
Bonsoir,
Ceci peut-être
'-----------
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
On Error GoTo erreur
If Target.Column = 2 And Target <> "" Then Range("a" & Target.Row) =
Range("b" & Target.Row) / 2
If Target.Column = 1 And Target <> "" Then Range("b" & Target.Row) =
Range("a" & Target.Row) * 2
Exit Sub
erreur:
MsgBox "Donnée erronée"
Target.Select
End Sub
'-----------


--
Salutations
JJ


"Caroual" a écrit dans le message de news:
48a3374f$0$937$
Bonjour,
J'ai un petit problème à résoudre et je ne trouve pas l'idée parfaite.
J'ai 2 colonnes, j'ai le choix de rentrer une donnée dans la première
colonne ou dans la 2ème colonne.
Si je rentre 100 dans la première colonne un calcul doit se faire dans
la 2ème colonne du style 1ère colonne*2
Si je rentre 200 dans la 2ème colonne un calcul doit se faire dans la
première colonne du style 200/2.
J'ai mis les 2 fonctions dans chaque colonne en "a1" ="b1"/2 et en
"b1"¡*2. Je rentre ma donnée suivant mes besoins soit en "a1" ce qui
efface la formule mais calcule comme il faut en "b1" et vice versa.
Cela provoque une référence circulaire, j'ai mis itération à 1 et cela
fonctionne à peu près bien sauf que si je veux modifier des données je
me retrouve devant des formules qui peuvent avoir été effacées.
Sinon j'avais pensé à faire une macro évènementielle qui dirait : dès
que je rentre une valeur dans une cellule de la colonne "a" un calcul se
fait dans la colonne "b" mais je ne sais comment la déclencher.
Merci pour vos idées
Caroual













Avatar
Papyjac
Bonjour Caroual,

Si tu as compris le principe de la procédure événement Worksheet_Change :
c'est bien

Mais cette procédure a un paramètre : En l'occurence te renvoie la cellule
qui a changé et qui a donc provoqué l'événement : Excel appelle cette
cellule TARGET, car pour toi c'est ta CIBLE de prédilection pour écrire ton
code

Donc en langage VB, TARGET est un objet, COUNT est une propriété => C'est un
nombre
Un nombre de quoi ? Et bien TARGET est une plage (RANGE) alors COUNT sera le
nombre de cellules de cette plage

Et ta procédure ne peut fonctionner que si tu n'as modifié qu'une seule
plage à la fois

Je sais ce que tu vas dire : "mais je ne modifie toujours qu'une seule
cellule". dans ce cas, enlève cette instruction : Tu la rajouteras plus tard


--
P a p y j a c

"Caroual" a écrit dans le message de
news:48a343a0$0$849$
Merci cela marche très bien
Je ne sais pas à quoi correspond :
If Target.Count > 1 Then Exit Sub
Merci et bonne soirée

"Jacky" a écrit dans le message de news:
uonABEY$
Bonsoir,
Ceci peut-être
'-----------
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
On Error GoTo erreur
If Target.Column = 2 And Target <> "" Then Range("a" & Target.Row) =
Range("b" & Target.Row) / 2
If Target.Column = 1 And Target <> "" Then Range("b" & Target.Row) =
Range("a" & Target.Row) * 2
Exit Sub
erreur:
MsgBox "Donnée erronée"
Target.Select
End Sub
'-----------


--
Salutations
JJ


"Caroual" a écrit dans le message de news:
48a3374f$0$937$
Bonjour,
J'ai un petit problème à résoudre et je ne trouve pas l'idée parfaite.
J'ai 2 colonnes, j'ai le choix de rentrer une donnée dans la première
colonne ou dans la 2ème colonne.
Si je rentre 100 dans la première colonne un calcul doit se faire dans
la 2ème colonne du style 1ère colonne*2
Si je rentre 200 dans la 2ème colonne un calcul doit se faire dans la
première colonne du style 200/2.
J'ai mis les 2 fonctions dans chaque colonne en "a1" ="b1"/2 et en
"b1"¡*2. Je rentre ma donnée suivant mes besoins soit en "a1" ce qui
efface la formule mais calcule comme il faut en "b1" et vice versa.
Cela provoque une référence circulaire, j'ai mis itération à 1 et cela
fonctionne à peu près bien sauf que si je veux modifier des données je
me retrouve devant des formules qui peuvent avoir été effacées.
Sinon j'avais pensé à faire une macro évènementielle qui dirait : dès
que je rentre une valeur dans une cellule de la colonne "a" un calcul se
fait dans la colonne "b" mais je ne sais comment la déclencher.
Merci pour vos idées
Caroual














Avatar
Caroual
Merci pour ces explications. C'est top et je vais utiliser ces informations
et ce code avec Tarjet.
Merci beaucoup
Caroual
"Papyjac" <papyjac(supprimerceci)@free.fr> a écrit dans le message de news:

Bonjour Caroual,

Si tu as compris le principe de la procédure événement Worksheet_Change :
c'est bien

Mais cette procédure a un paramètre : En l'occurence te renvoie la cellule
qui a changé et qui a donc provoqué l'événement : Excel appelle cette
cellule TARGET, car pour toi c'est ta CIBLE de prédilection pour écrire
ton code

Donc en langage VB, TARGET est un objet, COUNT est une propriété => C'est
un nombre
Un nombre de quoi ? Et bien TARGET est une plage (RANGE) alors COUNT sera
le nombre de cellules de cette plage

Et ta procédure ne peut fonctionner que si tu n'as modifié qu'une seule
plage à la fois

Je sais ce que tu vas dire : "mais je ne modifie toujours qu'une seule
cellule". dans ce cas, enlève cette instruction : Tu la rajouteras plus
tard


--
P a p y j a c

"Caroual" a écrit dans le message de
news:48a343a0$0$849$
Merci cela marche très bien
Je ne sais pas à quoi correspond :
If Target.Count > 1 Then Exit Sub
Merci et bonne soirée

"Jacky" a écrit dans le message de news:
uonABEY$
Bonsoir,
Ceci peut-être
'-----------
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
On Error GoTo erreur
If Target.Column = 2 And Target <> "" Then Range("a" & Target.Row) =
Range("b" & Target.Row) / 2
If Target.Column = 1 And Target <> "" Then Range("b" & Target.Row) =
Range("a" & Target.Row) * 2
Exit Sub
erreur:
MsgBox "Donnée erronée"
Target.Select
End Sub
'-----------


--
Salutations
JJ


"Caroual" a écrit dans le message de news:
48a3374f$0$937$
Bonjour,
J'ai un petit problème à résoudre et je ne trouve pas l'idée parfaite.
J'ai 2 colonnes, j'ai le choix de rentrer une donnée dans la première
colonne ou dans la 2ème colonne.
Si je rentre 100 dans la première colonne un calcul doit se faire dans
la 2ème colonne du style 1ère colonne*2
Si je rentre 200 dans la 2ème colonne un calcul doit se faire dans la
première colonne du style 200/2.
J'ai mis les 2 fonctions dans chaque colonne en "a1" ="b1"/2 et en
"b1"¡*2. Je rentre ma donnée suivant mes besoins soit en "a1" ce qui
efface la formule mais calcule comme il faut en "b1" et vice versa.
Cela provoque une référence circulaire, j'ai mis itération à 1 et cela
fonctionne à peu près bien sauf que si je veux modifier des données je
me retrouve devant des formules qui peuvent avoir été effacées.
Sinon j'avais pensé à faire une macro évènementielle qui dirait : dès
que je rentre une valeur dans une cellule de la colonne "a" un calcul
se fait dans la colonne "b" mais je ne sais comment la déclencher.
Merci pour vos idées
Caroual