référence circulaire

Le
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"¡*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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
isabelle
Le #16541331
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





Caroual
Le #16541581
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






Jacky
Le #16541571
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" 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





Caroual
Le #16541721
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" 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" 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









Jacky
Le #16541871
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" 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" 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" 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













Papyjac
Le #16549831
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" 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" 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" 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














Caroual
Le #16552581
Merci pour ces explications. C'est top et je vais utiliser ces informations
et ce code avec Tarjet.
Merci beaucoup
Caroual
"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" 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" 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" 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

















Publicité
Poster une réponse
Anonyme