OVH Cloud OVH Cloud

Comparaison de cellules

10 réponses
Avatar
Linebaker
Bonjour à vous tous,

J'aimerais savoir comment comparer une cellule avec une autre : si le
contenu de la cellule A1 est égal au contenu de la cellule D1 va en B1, si
B1 = E1... sinon va en B2.

Merci de votre aide.

10 réponses

Avatar
Philippe.R
Bonjour Linebaker,
La comparaison de cellules peut se faire très simplement par formule dans la feuille mais l'action
souhaitée (déplacement de la sélection si j'ai compris) nécessite le recours au VBA.
Ceci, dans le module de feuille, devrait convenir :

Private Sub Worksheet_Change(ByVal Target As Range)
If [a1] = [d1] And [b1] = [e1] Then
Range("b1").Select
Else
Range("b2").Select
End If
End Sub

--
Amicales Salutations
Retirer A_S_ pour répondre.
XL 97 / 2000 / 2002
Pour suivre facilement le forum :
news://msnews.microsoft.com/microsoft.public.fr.excel
(Voulez-vous vous abonner ? -> Oui)

"Linebaker" a écrit dans le message de
news:tBbTc.33502$
Bonjour à vous tous,

J'aimerais savoir comment comparer une cellule avec une autre : si le
contenu de la cellule A1 est égal au contenu de la cellule D1 va en B1, si
B1 = E1... sinon va en B2.

Merci de votre aide.




Avatar
Michel Gaboly
Bonjour Philippe,

Sur le principe, je suis d'accord avec toi sur le recours à l'événement
Change, mais ... ;-)))

1 - Il faut limiter son application au cas où la valeur d'une des cel-
lules concernées est modifiée : sinon quelque soit la (ou les cellules)
modifiée(s) dans la feuille, on va se retrouver avec B1 ou B2 comme
cellule active.

Pas sûr que ce soit pratique si on travaille sur la plage M300:Z500 !


2 - Les 3 petits points dans l'énoncé (après E1) me font soupçonner,
qu'il y a d'autres conditions à prendre en compte. Je suppose que si
B1 = E1, il faut sélectionner une cellule particulière, peut-être C1
(car B1 comme E1 représentent un décalage d'une cellule vers la droite
par rapport à A1 et D1). Il faudrait alors sélectionner D1 si C1 = F1, ...
Est-ce que toute la ligne 1 est concernée ? Une précision serait néces-
saire.


3 - Le mélange des notations [b1] et Range("b1") ne facilite pas la
lecture. Personnellement, je n'aime pas la syntaxe [b1] pour diverses
raisons, l'une d'elles est que les crochets sont désagréables d'emploi sur
un clavier français (encore + sur PC que sur Mac).


En première approximation basée sur les hypothèses du point 2), je
proposerai :

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim c As Range
For Each c In Target
If c.Address(False, False) = "A1" Or c.Address(False, False) = "D1" Then
If Range("A1") = Range("D1") Then
Range("B1").Select
Else
Range("B2").Select
End If
ElseIf c.Address(False, False) = "B1" Or c.Address(False, False) = "E1" Then
If Range("B1") = Range("E1") Then
Range("C1").Select
Else
Range("C2").Select ' ou B2 info nécessaire
End If
End If
Next c
End Sub

Le défaut de ceci est que si l'une des cellules A1, B1, D1 ou E1 soit sa
valeur changée parce qu'elle contient une formule se référant à une
autre cellule qui est modifiée, rien ne se passe.

En effet, Target représente cette autre cellule ( et d'autres éventuellement),
mais ne contient pas la cellule modifiée.

Il faut donc adapter la procédure pour prendre en compte les cellules dépendantes
de Target :

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim c As Range
Set Target = Union(Target, Target.Dependents)
' ....

Le reste de la procédure ne change pas.



Bonjour Linebaker,
La comparaison de cellules peut se faire très simplement par formule dans la feuille mais l'action
souhaitée (déplacement de la sélection si j'ai compris) nécessite le recours au VBA.
Ceci, dans le module de feuille, devrait convenir :

Private Sub Worksheet_Change(ByVal Target As Range)
If [a1] = [d1] And [b1] = [e1] Then
Range("b1").Select
Else
Range("b2").Select
End If
End Sub

--
Amicales Salutations
Retirer A_S_ pour répondre.
XL 97 / 2000 / 2002
Pour suivre facilement le forum :
news://msnews.microsoft.com/microsoft.public.fr.excel
(Voulez-vous vous abonner ? -> Oui)

"Linebaker" a écrit dans le message de
news:tBbTc.33502$
Bonjour à vous tous,

J'aimerais savoir comment comparer une cellule avec une autre : si le
contenu de la cellule A1 est égal au contenu de la cellule D1 va en B1, si
B1 = E1... sinon va en B2.

Merci de votre aide.





--
Cordialement,

Michel Gaboly
http://www.gaboly.com


Avatar
Philippe.R
Bonjour Michel,
Tu as probablement, voire totalement, raison dans tes différentes observations,mais comme tu vois, tu es
obligé de beaucoup supposer... ;o))))
Il faudrait que Linebaker précise un peu sa demande, à laquelle je m'étais contenté de répondre de la
manière la plus directe.
--
Amicales Salutations

"Michel Gaboly" a écrit dans le message de
news:
Bonjour Philippe,

Sur le principe, je suis d'accord avec toi sur le recours à l'événement
Change, mais ... ;-)))

1 - Il faut limiter son application au cas où la valeur d'une des cel-
lules concernées est modifiée : sinon quelque soit la (ou les cellules)
modifiée(s) dans la feuille, on va se retrouver avec B1 ou B2 comme
cellule active.

Pas sûr que ce soit pratique si on travaille sur la plage M300:Z500 !


2 - Les 3 petits points dans l'énoncé (après E1) me font soupçonner,
qu'il y a d'autres conditions à prendre en compte. Je suppose que si
B1 = E1, il faut sélectionner une cellule particulière, peut-être C1
(car B1 comme E1 représentent un décalage d'une cellule vers la droite
par rapport à A1 et D1). Il faudrait alors sélectionner D1 si C1 = F1, ...
Est-ce que toute la ligne 1 est concernée ? Une précision serait néces-
saire.


3 - Le mélange des notations [b1] et Range("b1") ne facilite pas la
lecture. Personnellement, je n'aime pas la syntaxe [b1] pour diverses
raisons, l'une d'elles est que les crochets sont désagréables d'emploi sur
un clavier français (encore + sur PC que sur Mac).


En première approximation basée sur les hypothèses du point 2), je
proposerai :

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim c As Range
For Each c In Target
If c.Address(False, False) = "A1" Or c.Address(False, False) = "D1" Then
If Range("A1") = Range("D1") Then
Range("B1").Select
Else
Range("B2").Select
End If
ElseIf c.Address(False, False) = "B1" Or c.Address(False, False) = "E1" Then
If Range("B1") = Range("E1") Then
Range("C1").Select
Else
Range("C2").Select ' ou B2 info nécessaire
End If
End If
Next c
End Sub

Le défaut de ceci est que si l'une des cellules A1, B1, D1 ou E1 soit sa
valeur changée parce qu'elle contient une formule se référant à une
autre cellule qui est modifiée, rien ne se passe.

En effet, Target représente cette autre cellule ( et d'autres éventuellement),
mais ne contient pas la cellule modifiée.

Il faut donc adapter la procédure pour prendre en compte les cellules dépendantes
de Target :

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim c As Range
Set Target = Union(Target, Target.Dependents)
' ....

Le reste de la procédure ne change pas.



Bonjour Linebaker,
La comparaison de cellules peut se faire très simplement par formule dans la feuille mais l'action
souhaitée (déplacement de la sélection si j'ai compris) nécessite le recours au VBA.
Ceci, dans le module de feuille, devrait convenir :

Private Sub Worksheet_Change(ByVal Target As Range)
If [a1] = [d1] And [b1] = [e1] Then
Range("b1").Select
Else
Range("b2").Select
End If
End Sub

--
Amicales Salutations
Retirer A_S_ pour répondre.
XL 97 / 2000 / 2002
Pour suivre facilement le forum :
news://msnews.microsoft.com/microsoft.public.fr.excel
(Voulez-vous vous abonner ? -> Oui)

"Linebaker" a écrit dans le message de
news:tBbTc.33502$
Bonjour à vous tous,

J'aimerais savoir comment comparer une cellule avec une autre : si le
contenu de la cellule A1 est égal au contenu de la cellule D1 va en B1, si
B1 = E1... sinon va en B2.

Merci de votre aide.





--
Cordialement,

Michel Gaboly
http://www.gaboly.com






Avatar
Michel Gaboly
Re,

;-))

Attendons donc les précisions.

Cependant, il y a au moins 2 points qui me semblent éminemment probables :


- La sélection de B1 ou B2 ne doit pas intervenir si on travaille sur une plage
compètement différente de la feuille.

- La nécessité d'ajouter de modifier ainsi Target :
Set Target = Union(Target, Target.Dependents)


On verra bien ;-))))



Bonjour Michel,
Tu as probablement, voire totalement, raison dans tes différentes observations,mais comme tu vois, tu es
obligé de beaucoup supposer... ;o))))
Il faudrait que Linebaker précise un peu sa demande, à laquelle je m'étais contenté de répondre de la
manière la plus directe.
--
Amicales Salutations

"Michel Gaboly" a écrit dans le message de
news:
Bonjour Philippe,

Sur le principe, je suis d'accord avec toi sur le recours à l'événement
Change, mais ... ;-)))

1 - Il faut limiter son application au cas où la valeur d'une des cel-
lules concernées est modifiée : sinon quelque soit la (ou les cellules)
modifiée(s) dans la feuille, on va se retrouver avec B1 ou B2 comme
cellule active.

Pas sûr que ce soit pratique si on travaille sur la plage M300:Z500 !


2 - Les 3 petits points dans l'énoncé (après E1) me font soupçonner,
qu'il y a d'autres conditions à prendre en compte. Je suppose que si
B1 = E1, il faut sélectionner une cellule particulière, peut-être C1
(car B1 comme E1 représentent un décalage d'une cellule vers la droite
par rapport à A1 et D1). Il faudrait alors sélectionner D1 si C1 = F1, ...
Est-ce que toute la ligne 1 est concernée ? Une précision serait néces-
saire.


3 - Le mélange des notations [b1] et Range("b1") ne facilite pas la
lecture. Personnellement, je n'aime pas la syntaxe [b1] pour diverses
raisons, l'une d'elles est que les crochets sont désagréables d'emploi sur
un clavier français (encore + sur PC que sur Mac).


En première approximation basée sur les hypothèses du point 2), je
proposerai :

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim c As Range
For Each c In Target
If c.Address(False, False) = "A1" Or c.Address(False, False) = "D1" Then
If Range("A1") = Range("D1") Then
Range("B1").Select
Else
Range("B2").Select
End If
ElseIf c.Address(False, False) = "B1" Or c.Address(False, False) = "E1" Then
If Range("B1") = Range("E1") Then
Range("C1").Select
Else
Range("C2").Select ' ou B2 info nécessaire
End If
End If
Next c
End Sub

Le défaut de ceci est que si l'une des cellules A1, B1, D1 ou E1 soit sa
valeur changée parce qu'elle contient une formule se référant à une
autre cellule qui est modifiée, rien ne se passe.

En effet, Target représente cette autre cellule ( et d'autres éventuellement),
mais ne contient pas la cellule modifiée.

Il faut donc adapter la procédure pour prendre en compte les cellules dépendantes
de Target :

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim c As Range
Set Target = Union(Target, Target.Dependents)
' ....

Le reste de la procédure ne change pas.



Bonjour Linebaker,
La comparaison de cellules peut se faire très simplement par formule dans la feuille mais l'action
souhaitée (déplacement de la sélection si j'ai compris) nécessite le recours au VBA.
Ceci, dans le module de feuille, devrait convenir :

Private Sub Worksheet_Change(ByVal Target As Range)
If [a1] = [d1] And [b1] = [e1] Then
Range("b1").Select
Else
Range("b2").Select
End If
End Sub

--
Amicales Salutations
Retirer A_S_ pour répondre.
XL 97 / 2000 / 2002
Pour suivre facilement le forum :
news://msnews.microsoft.com/microsoft.public.fr.excel
(Voulez-vous vous abonner ? -> Oui)

"Linebaker" a écrit dans le message de
news:tBbTc.33502$
Bonjour à vous tous,

J'aimerais savoir comment comparer une cellule avec une autre : si le
contenu de la cellule A1 est égal au contenu de la cellule D1 va en B1, si
B1 = E1... sinon va en B2.

Merci de votre aide.





--
Cordialement,

Michel Gaboly
http://www.gaboly.com





--
Cordialement,

Michel Gaboly
http://www.gaboly.com




Avatar
Linebaker
Bonjour,

Suite à vos commentaires, j'ai modifier ma feuille de travail et voici les
explications nécessaires.

Do Until ActiveCell.Text = ""
If A(1) est égal à D(1) Then
Copie B(1):C(1) dans E(1):F(1)
Else
Range("D(1):G(1)").Select
ActiveCell.Cells.Insert
Range("A(1):C(1)").Select
Range("D(1)").Activate
ActiveSheet.Paste
ActiveCell.Offset(1, -3).Select
Loop

Mon ignorance est que je ne dois pas référencer en A1 mais en A(x) pour
faire ma Loop. En espérant que mes explications vous aiderons pour m'aider.

Encore une fois merci beaucoup.


"Michel Gaboly" a écrit dans le message de
news:
Re,

;-))

Attendons donc les précisions.

Cependant, il y a au moins 2 points qui me semblent éminemment probables
:



- La sélection de B1 ou B2 ne doit pas intervenir si on travaille sur une
plage

compètement différente de la feuille.

- La nécessité d'ajouter de modifier ainsi Target :
Set Target = Union(Target, Target.Dependents)


On verra bien ;-))))



Bonjour Michel,
Tu as probablement, voire totalement, raison dans tes différentes
observations,mais comme tu vois, tu es


obligé de beaucoup supposer... ;o))))
Il faudrait que Linebaker précise un peu sa demande, à laquelle je
m'étais contenté de répondre de la


manière la plus directe.
--
Amicales Salutations

"Michel Gaboly" a écrit dans le message de
news:
Bonjour Philippe,

Sur le principe, je suis d'accord avec toi sur le recours à
l'événement



Change, mais ... ;-)))

1 - Il faut limiter son application au cas où la valeur d'une des
cel-



lules concernées est modifiée : sinon quelque soit la (ou les
cellules)



modifiée(s) dans la feuille, on va se retrouver avec B1 ou B2 comme
cellule active.

Pas sûr que ce soit pratique si on travaille sur la plage M300:Z500 !


2 - Les 3 petits points dans l'énoncé (après E1) me font soupçonner,
qu'il y a d'autres conditions à prendre en compte. Je suppose que si
B1 = E1, il faut sélectionner une cellule particulière, peut-être C1
(car B1 comme E1 représentent un décalage d'une cellule vers la droite
par rapport à A1 et D1). Il faudrait alors sélectionner D1 si C1 = F1,
...



Est-ce que toute la ligne 1 est concernée ? Une précision serait
néces-



saire.


3 - Le mélange des notations [b1] et Range("b1") ne facilite pas la
lecture. Personnellement, je n'aime pas la syntaxe [b1] pour diverses
raisons, l'une d'elles est que les crochets sont désagréables d'emploi
sur



un clavier français (encore + sur PC que sur Mac).


En première approximation basée sur les hypothèses du point 2), je
proposerai :

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim c As Range
For Each c In Target
If c.Address(False, False) = "A1" Or c.Address(False, False) "D1" Then
If Range("A1") = Range("D1") Then
Range("B1").Select
Else
Range("B2").Select
End If
ElseIf c.Address(False, False) = "B1" Or c.Address(False,
False) = "E1" Then



If Range("B1") = Range("E1") Then
Range("C1").Select
Else
Range("C2").Select ' ou B2 info nécessaire
End If
End If
Next c
End Sub

Le défaut de ceci est que si l'une des cellules A1, B1, D1 ou E1 soit
sa



valeur changée parce qu'elle contient une formule se référant à une
autre cellule qui est modifiée, rien ne se passe.

En effet, Target représente cette autre cellule ( et d'autres
éventuellement),



mais ne contient pas la cellule modifiée.

Il faut donc adapter la procédure pour prendre en compte les cellules
dépendantes



de Target :

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim c As Range
Set Target = Union(Target, Target.Dependents)
' ....

Le reste de la procédure ne change pas.



Bonjour Linebaker,
La comparaison de cellules peut se faire très simplement par formule
dans la feuille mais l'action




souhaitée (déplacement de la sélection si j'ai compris) nécessite le
recours au VBA.




Ceci, dans le module de feuille, devrait convenir :

Private Sub Worksheet_Change(ByVal Target As Range)
If [a1] = [d1] And [b1] = [e1] Then
Range("b1").Select
Else
Range("b2").Select
End If
End Sub

--
Amicales Salutations
Retirer A_S_ pour répondre.
XL 97 / 2000 / 2002
Pour suivre facilement le forum :
news://msnews.microsoft.com/microsoft.public.fr.excel
(Voulez-vous vous abonner ? -> Oui)

"Linebaker" a écrit dans le message de
news:tBbTc.33502$
Bonjour à vous tous,

J'aimerais savoir comment comparer une cellule avec une autre : si
le





contenu de la cellule A1 est égal au contenu de la cellule D1 va
en B1, si





B1 = E1... sinon va en B2.

Merci de votre aide.





--
Cordialement,

Michel Gaboly
http://www.gaboly.com





--
Cordialement,

Michel Gaboly
http://www.gaboly.com








Avatar
Michel Gaboly
Bonjour,

Une précision complémentaire : lors de l'insertion (ActiveCell.Cells.Insert),
on est censé décaler les cellules existantes vers le bas ?

Par ailleurs Activecell.Cells correspond à une cellule unique ; on insère donc
une seule cellule ; est-ce ce que tu veux ?

En fait, si tu nous indiquais le type d'infos dans les différentes colonnes et
ce que tu veux faire, ce serait + facile de t'aider ;-))

Dans ta boucle, il te faut probablement un Offset(i) et un i = i + 1 pour
pouvoir exploiter la ligne suivante lors du prochain passage dans la boucle.

Rergarde l'aide d'Offset si nécessaire.


Voici un exemple très simple de procédure combinant une boucle Do Until
et Offset :

Sub ExempleOffset()
' Le 1er argumment d'Offset est un nb de lignes,
' le second un nb de colonnes.
Dim i As Integer
Workbooks.Add
Range("A1:A30").Select
Selection.FormulaR1C1 = "=ROW()"
Do While ActiveCell.Offset(i) <> ""
ActiveCell.Offset(i, 1) = ActiveCell.Offset(i) * 2
i = i + 1
Loop
End Sub




Bonjour,

Suite à vos commentaires, j'ai modifier ma feuille de travail et voici les
explications nécessaires.

Do Until ActiveCell.Text = ""
If A(1) est égal à D(1) Then
Copie B(1):C(1) dans E(1):F(1)
Else
Range("D(1):G(1)").Select
ActiveCell.Cells.Insert
Range("A(1):C(1)").Select
Range("D(1)").Activate
ActiveSheet.Paste
ActiveCell.Offset(1, -3).Select
Loop

Mon ignorance est que je ne dois pas référencer en A1 mais en A(x) pour
faire ma Loop. En espérant que mes explications vous aiderons pour m'aider.

Encore une fois merci beaucoup.

"Michel Gaboly" a écrit dans le message de
news:
Re,

;-))

Attendons donc les précisions.

Cependant, il y a au moins 2 points qui me semblent éminemment probables
:



- La sélection de B1 ou B2 ne doit pas intervenir si on travaille sur une
plage

compètement différente de la feuille.

- La nécessité d'ajouter de modifier ainsi Target :
Set Target = Union(Target, Target.Dependents)


On verra bien ;-))))



Bonjour Michel,
Tu as probablement, voire totalement, raison dans tes différentes
observations,mais comme tu vois, tu es


obligé de beaucoup supposer... ;o))))
Il faudrait que Linebaker précise un peu sa demande, à laquelle je
m'étais contenté de répondre de la


manière la plus directe.
--
Amicales Salutations

"Michel Gaboly" a écrit dans le message de
news:
Bonjour Philippe,

Sur le principe, je suis d'accord avec toi sur le recours à
l'événement



Change, mais ... ;-)))

1 - Il faut limiter son application au cas où la valeur d'une des
cel-



lules concernées est modifiée : sinon quelque soit la (ou les
cellules)



modifiée(s) dans la feuille, on va se retrouver avec B1 ou B2 comme
cellule active.

Pas sûr que ce soit pratique si on travaille sur la plage M300:Z500 !


2 - Les 3 petits points dans l'énoncé (après E1) me font soupçonner,
qu'il y a d'autres conditions à prendre en compte. Je suppose que si
B1 = E1, il faut sélectionner une cellule particulière, peut-être C1
(car B1 comme E1 représentent un décalage d'une cellule vers la droite
par rapport à A1 et D1). Il faudrait alors sélectionner D1 si C1 = F1,
...



Est-ce que toute la ligne 1 est concernée ? Une précision serait
néces-



saire.


3 - Le mélange des notations [b1] et Range("b1") ne facilite pas la
lecture. Personnellement, je n'aime pas la syntaxe [b1] pour diverses
raisons, l'une d'elles est que les crochets sont désagréables d'emploi
sur



un clavier français (encore + sur PC que sur Mac).


En première approximation basée sur les hypothèses du point 2), je
proposerai :

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim c As Range
For Each c In Target
If c.Address(False, False) = "A1" Or c.Address(False, False) > "D1" Then
If Range("A1") = Range("D1") Then
Range("B1").Select
Else
Range("B2").Select
End If
ElseIf c.Address(False, False) = "B1" Or c.Address(False,
False) = "E1" Then



If Range("B1") = Range("E1") Then
Range("C1").Select
Else
Range("C2").Select ' ou B2 info nécessaire
End If
End If
Next c
End Sub

Le défaut de ceci est que si l'une des cellules A1, B1, D1 ou E1 soit
sa



valeur changée parce qu'elle contient une formule se référant à une
autre cellule qui est modifiée, rien ne se passe.

En effet, Target représente cette autre cellule ( et d'autres
éventuellement),



mais ne contient pas la cellule modifiée.

Il faut donc adapter la procédure pour prendre en compte les cellules
dépendantes



de Target :

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim c As Range
Set Target = Union(Target, Target.Dependents)
' ....

Le reste de la procédure ne change pas.



Bonjour Linebaker,
La comparaison de cellules peut se faire très simplement par formule
dans la feuille mais l'action




souhaitée (déplacement de la sélection si j'ai compris) nécessite le
recours au VBA.




Ceci, dans le module de feuille, devrait convenir :

Private Sub Worksheet_Change(ByVal Target As Range)
If [a1] = [d1] And [b1] = [e1] Then
Range("b1").Select
Else
Range("b2").Select
End If
End Sub

--
Amicales Salutations
Retirer A_S_ pour répondre.
XL 97 / 2000 / 2002
Pour suivre facilement le forum :
news://msnews.microsoft.com/microsoft.public.fr.excel
(Voulez-vous vous abonner ? -> Oui)

"Linebaker" a écrit dans le message de
news:tBbTc.33502$
Bonjour à vous tous,

J'aimerais savoir comment comparer une cellule avec une autre : si
le





contenu de la cellule A1 est égal au contenu de la cellule D1 va
en B1, si





B1 = E1... sinon va en B2.

Merci de votre aide.





--
Cordialement,

Michel Gaboly
http://www.gaboly.com





--
Cordialement,

Michel Gaboly
http://www.gaboly.com





--
Cordialement,

Michel Gaboly
http://www.gaboly.com






Avatar
Linebaker
Bonjour,

Dond voici le type d'info que j'ai :

A B C D
E F G
SO Quantité Date SO Quantité Date Commentaires
111 111 50 2004-08-31 111 111 50 2004-08-31
222 222 1000 2004-09-01 222 222 1500 2004-09-02

333 333 1500 2004-09-01 444 444 250 2004-09-05


Si ma cellule A2 = D2 je dois vérifier si B2 = E2 si non je copie B2:C2 dans
E2:F2, si oui je vérifie que C2 = E2 si non je copie C2 dans F2 si oui je
passe à la ligne suivant (A3) et je fais la Loop.

Si A2 n'égale pas D2 alors je dois insérer des cellules en D2:G2 et copier
A2:C2 dans D2:F2 ensuite je passe à la ligne suivante et je refais la Loop.

Merci

"Michel Gaboly" a écrit dans le message de
news:
Bonjour,

Une précision complémentaire : lors de l'insertion
(ActiveCell.Cells.Insert),

on est censé décaler les cellules existantes vers le bas ?

Par ailleurs Activecell.Cells correspond à une cellule unique ; on insère
donc

une seule cellule ; est-ce ce que tu veux ?

En fait, si tu nous indiquais le type d'infos dans les différentes
colonnes et

ce que tu veux faire, ce serait + facile de t'aider ;-))

Dans ta boucle, il te faut probablement un Offset(i) et un i = i + 1 pour
pouvoir exploiter la ligne suivante lors du prochain passage dans la
boucle.


Rergarde l'aide d'Offset si nécessaire.


Voici un exemple très simple de procédure combinant une boucle Do Until
et Offset :

Sub ExempleOffset()
' Le 1er argumment d'Offset est un nb de lignes,
' le second un nb de colonnes.
Dim i As Integer
Workbooks.Add
Range("A1:A30").Select
Selection.FormulaR1C1 = "=ROW()"
Do While ActiveCell.Offset(i) <> ""
ActiveCell.Offset(i, 1) = ActiveCell.Offset(i) * 2
i = i + 1
Loop
End Sub




Bonjour,

Suite à vos commentaires, j'ai modifier ma feuille de travail et voici
les


explications nécessaires.

Do Until ActiveCell.Text = ""
If A(1) est égal à D(1) Then
Copie B(1):C(1) dans E(1):F(1)
Else
Range("D(1):G(1)").Select
ActiveCell.Cells.Insert
Range("A(1):C(1)").Select
Range("D(1)").Activate
ActiveSheet.Paste
ActiveCell.Offset(1, -3).Select
Loop

Mon ignorance est que je ne dois pas référencer en A1 mais en A(x) pour
faire ma Loop. En espérant que mes explications vous aiderons pour
m'aider.



Encore une fois merci beaucoup.

"Michel Gaboly" a écrit dans le message de
news:
Re,

;-))

Attendons donc les précisions.

Cependant, il y a au moins 2 points qui me semblent éminemment
probables



:


- La sélection de B1 ou B2 ne doit pas intervenir si on travaille sur
une



plage
compètement différente de la feuille.

- La nécessité d'ajouter de modifier ainsi Target :
Set Target = Union(Target, Target.Dependents)


On verra bien ;-))))



Bonjour Michel,
Tu as probablement, voire totalement, raison dans tes différentes
observations,mais comme tu vois, tu es


obligé de beaucoup supposer... ;o))))
Il faudrait que Linebaker précise un peu sa demande, à laquelle je
m'étais contenté de répondre de la


manière la plus directe.
--
Amicales Salutations

"Michel Gaboly" a écrit dans le message de
news:
Bonjour Philippe,

Sur le principe, je suis d'accord avec toi sur le recours à
l'événement



Change, mais ... ;-)))

1 - Il faut limiter son application au cas où la valeur d'une des
cel-



lules concernées est modifiée : sinon quelque soit la (ou les
cellules)



modifiée(s) dans la feuille, on va se retrouver avec B1 ou B2
comme





cellule active.

Pas sûr que ce soit pratique si on travaille sur la plage
M300:Z500 !







2 - Les 3 petits points dans l'énoncé (après E1) me font
soupçonner,





qu'il y a d'autres conditions à prendre en compte. Je suppose que
si





B1 = E1, il faut sélectionner une cellule particulière, peut-être
C1





(car B1 comme E1 représentent un décalage d'une cellule vers la
droite





par rapport à A1 et D1). Il faudrait alors sélectionner D1 si C1 F1,
...



Est-ce que toute la ligne 1 est concernée ? Une précision serait
néces-



saire.


3 - Le mélange des notations [b1] et Range("b1") ne facilite pas
la





lecture. Personnellement, je n'aime pas la syntaxe [b1] pour
diverses





raisons, l'une d'elles est que les crochets sont désagréables
d'emploi





sur
un clavier français (encore + sur PC que sur Mac).


En première approximation basée sur les hypothèses du point 2), je
proposerai :

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim c As Range
For Each c In Target
If c.Address(False, False) = "A1" Or c.Address(False,
False) > > "D1" Then





If Range("A1") = Range("D1") Then
Range("B1").Select
Else
Range("B2").Select
End If
ElseIf c.Address(False, False) = "B1" Or c.Address(False,
False) = "E1" Then



If Range("B1") = Range("E1") Then
Range("C1").Select
Else
Range("C2").Select ' ou B2 info nécessaire
End If
End If
Next c
End Sub

Le défaut de ceci est que si l'une des cellules A1, B1, D1 ou E1
soit





sa
valeur changée parce qu'elle contient une formule se référant à
une





autre cellule qui est modifiée, rien ne se passe.

En effet, Target représente cette autre cellule ( et d'autres
éventuellement),



mais ne contient pas la cellule modifiée.

Il faut donc adapter la procédure pour prendre en compte les
cellules





dépendantes
de Target :

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim c As Range
Set Target = Union(Target, Target.Dependents)
' ....

Le reste de la procédure ne change pas.



Bonjour Linebaker,
La comparaison de cellules peut se faire très simplement par
formule






dans la feuille mais l'action
souhaitée (déplacement de la sélection si j'ai compris)
nécessite le






recours au VBA.
Ceci, dans le module de feuille, devrait convenir :

Private Sub Worksheet_Change(ByVal Target As Range)
If [a1] = [d1] And [b1] = [e1] Then
Range("b1").Select
Else
Range("b2").Select
End If
End Sub

--
Amicales Salutations
Retirer A_S_ pour répondre.
XL 97 / 2000 / 2002
Pour suivre facilement le forum :
news://msnews.microsoft.com/microsoft.public.fr.excel
(Voulez-vous vous abonner ? -> Oui)

"Linebaker" a écrit dans le message de
news:tBbTc.33502$
Bonjour à vous tous,

J'aimerais savoir comment comparer une cellule avec une autre
: si







le
contenu de la cellule A1 est égal au contenu de la cellule D1
va







en B1, si
B1 = E1... sinon va en B2.

Merci de votre aide.





--
Cordialement,

Michel Gaboly
http://www.gaboly.com





--
Cordialement,

Michel Gaboly
http://www.gaboly.com





--
Cordialement,

Michel Gaboly
http://www.gaboly.com










Avatar
Michel Gaboly
Re,

Tu n'as répondu qu'à une partie de la question :

En ce qui concerne les insertions, si tu sélectionnes 3 cellules en colonne
D à G, et que tu fasses une insertion, tu décales tout le reste du tableau
(vers le bas je suppose).

Ne faut-il pas insérer une ligne entière ?

Quant à la vérification que C2= E2, je suppose que c'est E2 = F2.

En clair, à l'arrivée, les colonnes A à C et D à F doivent avoir le même
contenu c'est cela ?


Pourrais-tu donner un exemple de 3 lignes (avec des différences, bien sûr
entre A et D, Et entre C et F) avec la situation initiale, et le résultat à
atteindre.

Désolé de ne toujours pas trouver cela limpide ;-(((




Bonjour,

Dond voici le type d'info que j'ai :

A B C D
E F G
SO Quantité Date SO Quantité Date Commentaires
111 111 50 2004-08-31 111 111 50 2004-08-31
222 222 1000 2004-09-01 222 222 1500 2004-09-02

333 333 1500 2004-09-01 444 444 250 2004-09-05

Si ma cellule A2 = D2 je dois vérifier si B2 = E2 si non je copie B2:C2 dans
E2:F2, si oui je vérifie que C2 = E2 si non je copie C2 dans F2 si oui je
passe à la ligne suivant (A3) et je fais la Loop.

Si A2 n'égale pas D2 alors je dois insérer des cellules en D2:G2 et copier
A2:C2 dans D2:F2 ensuite je passe à la ligne suivante et je refais la Loop.

Merci

"Michel Gaboly" a écrit dans le message de
news:
Bonjour,

Une précision complémentaire : lors de l'insertion
(ActiveCell.Cells.Insert),

on est censé décaler les cellules existantes vers le bas ?

Par ailleurs Activecell.Cells correspond à une cellule unique ; on insère
donc

une seule cellule ; est-ce ce que tu veux ?

En fait, si tu nous indiquais le type d'infos dans les différentes
colonnes et

ce que tu veux faire, ce serait + facile de t'aider ;-))

Dans ta boucle, il te faut probablement un Offset(i) et un i = i + 1 pour
pouvoir exploiter la ligne suivante lors du prochain passage dans la
boucle.


Rergarde l'aide d'Offset si nécessaire.


Voici un exemple très simple de procédure combinant une boucle Do Until
et Offset :

Sub ExempleOffset()
' Le 1er argumment d'Offset est un nb de lignes,
' le second un nb de colonnes.
Dim i As Integer
Workbooks.Add
Range("A1:A30").Select
Selection.FormulaR1C1 = "=ROW()"
Do While ActiveCell.Offset(i) <> ""
ActiveCell.Offset(i, 1) = ActiveCell.Offset(i) * 2
i = i + 1
Loop
End Sub




Bonjour,

Suite à vos commentaires, j'ai modifier ma feuille de travail et voici
les


explications nécessaires.

Do Until ActiveCell.Text = ""
If A(1) est égal à D(1) Then
Copie B(1):C(1) dans E(1):F(1)
Else
Range("D(1):G(1)").Select
ActiveCell.Cells.Insert
Range("A(1):C(1)").Select
Range("D(1)").Activate
ActiveSheet.Paste
ActiveCell.Offset(1, -3).Select
Loop

Mon ignorance est que je ne dois pas référencer en A1 mais en A(x) pour
faire ma Loop. En espérant que mes explications vous aiderons pour
m'aider.



Encore une fois merci beaucoup.

"Michel Gaboly" a écrit dans le message de
news:
Re,

;-))

Attendons donc les précisions.

Cependant, il y a au moins 2 points qui me semblent éminemment
probables



:


- La sélection de B1 ou B2 ne doit pas intervenir si on travaille sur
une



plage
compètement différente de la feuille.

- La nécessité d'ajouter de modifier ainsi Target :
Set Target = Union(Target, Target.Dependents)


On verra bien ;-))))



Bonjour Michel,
Tu as probablement, voire totalement, raison dans tes différentes
observations,mais comme tu vois, tu es


obligé de beaucoup supposer... ;o))))
Il faudrait que Linebaker précise un peu sa demande, à laquelle je
m'étais contenté de répondre de la


manière la plus directe.
--
Amicales Salutations

"Michel Gaboly" a écrit dans le message de
news:
Bonjour Philippe,

Sur le principe, je suis d'accord avec toi sur le recours à
l'événement



Change, mais ... ;-)))

1 - Il faut limiter son application au cas où la valeur d'une des
cel-



lules concernées est modifiée : sinon quelque soit la (ou les
cellules)



modifiée(s) dans la feuille, on va se retrouver avec B1 ou B2
comme





cellule active.

Pas sûr que ce soit pratique si on travaille sur la plage
M300:Z500 !







2 - Les 3 petits points dans l'énoncé (après E1) me font
soupçonner,





qu'il y a d'autres conditions à prendre en compte. Je suppose que
si





B1 = E1, il faut sélectionner une cellule particulière, peut-être
C1





(car B1 comme E1 représentent un décalage d'une cellule vers la
droite





par rapport à A1 et D1). Il faudrait alors sélectionner D1 si C1 > F1,
...



Est-ce que toute la ligne 1 est concernée ? Une précision serait
néces-



saire.


3 - Le mélange des notations [b1] et Range("b1") ne facilite pas
la





lecture. Personnellement, je n'aime pas la syntaxe [b1] pour
diverses





raisons, l'une d'elles est que les crochets sont désagréables
d'emploi





sur
un clavier français (encore + sur PC que sur Mac).


En première approximation basée sur les hypothèses du point 2), je
proposerai :

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim c As Range
For Each c In Target
If c.Address(False, False) = "A1" Or c.Address(False,
False) > > > "D1" Then





If Range("A1") = Range("D1") Then
Range("B1").Select
Else
Range("B2").Select
End If
ElseIf c.Address(False, False) = "B1" Or c.Address(False,
False) = "E1" Then



If Range("B1") = Range("E1") Then
Range("C1").Select
Else
Range("C2").Select ' ou B2 info nécessaire
End If
End If
Next c
End Sub

Le défaut de ceci est que si l'une des cellules A1, B1, D1 ou E1
soit





sa
valeur changée parce qu'elle contient une formule se référant à
une





autre cellule qui est modifiée, rien ne se passe.

En effet, Target représente cette autre cellule ( et d'autres
éventuellement),



mais ne contient pas la cellule modifiée.

Il faut donc adapter la procédure pour prendre en compte les
cellules





dépendantes
de Target :

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim c As Range
Set Target = Union(Target, Target.Dependents)
' ....

Le reste de la procédure ne change pas.



Bonjour Linebaker,
La comparaison de cellules peut se faire très simplement par
formule






dans la feuille mais l'action
souhaitée (déplacement de la sélection si j'ai compris)
nécessite le






recours au VBA.
Ceci, dans le module de feuille, devrait convenir :

Private Sub Worksheet_Change(ByVal Target As Range)
If [a1] = [d1] And [b1] = [e1] Then
Range("b1").Select
Else
Range("b2").Select
End If
End Sub

--
Amicales Salutations
Retirer A_S_ pour répondre.
XL 97 / 2000 / 2002
Pour suivre facilement le forum :
news://msnews.microsoft.com/microsoft.public.fr.excel
(Voulez-vous vous abonner ? -> Oui)

"Linebaker" a écrit dans le message de
news:tBbTc.33502$
Bonjour à vous tous,

J'aimerais savoir comment comparer une cellule avec une autre
: si







le
contenu de la cellule A1 est égal au contenu de la cellule D1
va







en B1, si
B1 = E1... sinon va en B2.

Merci de votre aide.





--
Cordialement,

Michel Gaboly
http://www.gaboly.com





--
Cordialement,

Michel Gaboly
http://www.gaboly.com





--
Cordialement,

Michel Gaboly
http://www.gaboly.com





--
Cordialement,

Michel Gaboly
http://www.gaboly.com








Avatar
Linebaker
Bonjour,

1- Il ne faut décaler tout le tableau vers le bas mais seulement les D à G
car ensuite je veux copier ce qui se trouve de A à C dans D à F est mettre
un commantaire.

2- Oups, c'est bien E2 = F2

3- Oui, à l'arrivée A à C seront égalent à D à F et j'insérerai un
commentaire automatique en G (ça je sais comment faire:)).

Départ
A B C D E F G
9 8 7 9 8 7
1 2 3 1 5 6
4 5 6 1 3 4
1 3 4

Arrivée
A B C D E F G
9 8 7 9 8 7
1 2 3 1 2 3 Changement
4 5 6 4 5 6 Changement
1 3 4 1 3 4

Tu n'as pas à être décolé, c'est moi qui n'est pas très clair car trop
évident pour moi mais pour les autres.

"Michel Gaboly" a écrit dans le message de
news:
Re,

Tu n'as répondu qu'à une partie de la question :

En ce qui concerne les insertions, si tu sélectionnes 3 cellules en
colonne

D à G, et que tu fasses une insertion, tu décales tout le reste du tableau
(vers le bas je suppose).

Ne faut-il pas insérer une ligne entière ?

Quant à la vérification que C2= E2, je suppose que c'est E2 = F2.

En clair, à l'arrivée, les colonnes A à C et D à F doivent avoir le même
contenu c'est cela ?


Pourrais-tu donner un exemple de 3 lignes (avec des différences, bien sûr
entre A et D, Et entre C et F) avec la situation initiale, et le résultat
à

atteindre.

Désolé de ne toujours pas trouver cela limpide ;-(((




Bonjour,

Dond voici le type d'info que j'ai :

A B C D
E F G
SO Quantité Date SO Quantité Date Commentaires
111 111 50 2004-08-31 111 111 50 2004-08-31
222 222 1000 2004-09-01 222 222 1500 2004-09-02

333 333 1500 2004-09-01 444 444 250 2004-09-05

Si ma cellule A2 = D2 je dois vérifier si B2 = E2 si non je copie B2:C2
dans


E2:F2, si oui je vérifie que C2 = E2 si non je copie C2 dans F2 si oui
je


passe à la ligne suivant (A3) et je fais la Loop.

Si A2 n'égale pas D2 alors je dois insérer des cellules en D2:G2 et
copier


A2:C2 dans D2:F2 ensuite je passe à la ligne suivante et je refais la
Loop.



Merci

"Michel Gaboly" a écrit dans le message de
news:
Bonjour,

Une précision complémentaire : lors de l'insertion
(ActiveCell.Cells.Insert),

on est censé décaler les cellules existantes vers le bas ?

Par ailleurs Activecell.Cells correspond à une cellule unique ; on
insère



donc
une seule cellule ; est-ce ce que tu veux ?

En fait, si tu nous indiquais le type d'infos dans les différentes
colonnes et

ce que tu veux faire, ce serait + facile de t'aider ;-))

Dans ta boucle, il te faut probablement un Offset(i) et un i = i + 1
pour



pouvoir exploiter la ligne suivante lors du prochain passage dans la
boucle.


Rergarde l'aide d'Offset si nécessaire.


Voici un exemple très simple de procédure combinant une boucle Do
Until



et Offset :

Sub ExempleOffset()
' Le 1er argumment d'Offset est un nb de lignes,
' le second un nb de colonnes.
Dim i As Integer
Workbooks.Add
Range("A1:A30").Select
Selection.FormulaR1C1 = "=ROW()"
Do While ActiveCell.Offset(i) <> ""
ActiveCell.Offset(i, 1) = ActiveCell.Offset(i) * 2
i = i + 1
Loop
End Sub




Bonjour,

Suite à vos commentaires, j'ai modifier ma feuille de travail et
voici




les
explications nécessaires.

Do Until ActiveCell.Text = ""
If A(1) est égal à D(1) Then
Copie B(1):C(1) dans E(1):F(1)
Else
Range("D(1):G(1)").Select
ActiveCell.Cells.Insert
Range("A(1):C(1)").Select
Range("D(1)").Activate
ActiveSheet.Paste
ActiveCell.Offset(1, -3).Select
Loop

Mon ignorance est que je ne dois pas référencer en A1 mais en A(x)
pour




faire ma Loop. En espérant que mes explications vous aiderons pour
m'aider.



Encore une fois merci beaucoup.

"Michel Gaboly" a écrit dans le message de
news:
Re,

;-))

Attendons donc les précisions.

Cependant, il y a au moins 2 points qui me semblent éminemment
probables



:


- La sélection de B1 ou B2 ne doit pas intervenir si on travaille
sur





une
plage
compètement différente de la feuille.

- La nécessité d'ajouter de modifier ainsi Target :
Set Target = Union(Target, Target.Dependents)


On verra bien ;-))))



Bonjour Michel,
Tu as probablement, voire totalement, raison dans tes
différentes






observations,mais comme tu vois, tu es
obligé de beaucoup supposer... ;o))))
Il faudrait que Linebaker précise un peu sa demande, à laquelle
je






m'étais contenté de répondre de la
manière la plus directe.
--
Amicales Salutations

"Michel Gaboly" a écrit dans le message
de






news:
Bonjour Philippe,

Sur le principe, je suis d'accord avec toi sur le recours à
l'événement



Change, mais ... ;-)))

1 - Il faut limiter son application au cas où la valeur d'une
des







cel-
lules concernées est modifiée : sinon quelque soit la (ou les
cellules)



modifiée(s) dans la feuille, on va se retrouver avec B1 ou B2
comme





cellule active.

Pas sûr que ce soit pratique si on travaille sur la plage
M300:Z500 !







2 - Les 3 petits points dans l'énoncé (après E1) me font
soupçonner,





qu'il y a d'autres conditions à prendre en compte. Je suppose
que







si
B1 = E1, il faut sélectionner une cellule particulière,
peut-être







C1
(car B1 comme E1 représentent un décalage d'une cellule vers
la







droite
par rapport à A1 et D1). Il faudrait alors sélectionner D1 si
C1 > > F1,







...
Est-ce que toute la ligne 1 est concernée ? Une précision
serait







néces-
saire.


3 - Le mélange des notations [b1] et Range("b1") ne facilite
pas







la
lecture. Personnellement, je n'aime pas la syntaxe [b1] pour
diverses





raisons, l'une d'elles est que les crochets sont désagréables
d'emploi





sur
un clavier français (encore + sur PC que sur Mac).


En première approximation basée sur les hypothèses du point
2), je







proposerai :

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim c As Range
For Each c In Target
If c.Address(False, False) = "A1" Or c.Address(False,
False) > > > > "D1" Then





If Range("A1") = Range("D1") Then
Range("B1").Select
Else
Range("B2").Select
End If
ElseIf c.Address(False, False) = "B1" Or
c.Address(False,







False) = "E1" Then
If Range("B1") = Range("E1") Then
Range("C1").Select
Else
Range("C2").Select ' ou B2 info nécessaire
End If
End If
Next c
End Sub

Le défaut de ceci est que si l'une des cellules A1, B1, D1 ou
E1







soit
sa
valeur changée parce qu'elle contient une formule se référant
à







une
autre cellule qui est modifiée, rien ne se passe.

En effet, Target représente cette autre cellule ( et d'autres
éventuellement),



mais ne contient pas la cellule modifiée.

Il faut donc adapter la procédure pour prendre en compte les
cellules





dépendantes
de Target :

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim c As Range
Set Target = Union(Target, Target.Dependents)
' ....

Le reste de la procédure ne change pas.



Bonjour Linebaker,
La comparaison de cellules peut se faire très simplement par
formule






dans la feuille mais l'action
souhaitée (déplacement de la sélection si j'ai compris)
nécessite le






recours au VBA.
Ceci, dans le module de feuille, devrait convenir :

Private Sub Worksheet_Change(ByVal Target As Range)
If [a1] = [d1] And [b1] = [e1] Then
Range("b1").Select
Else
Range("b2").Select
End If
End Sub

--
Amicales Salutations
Retirer A_S_ pour répondre.
XL 97 / 2000 / 2002
Pour suivre facilement le forum :
news://msnews.microsoft.com/microsoft.public.fr.excel
(Voulez-vous vous abonner ? -> Oui)

"Linebaker" a écrit dans le message
de








news:tBbTc.33502$
Bonjour à vous tous,

J'aimerais savoir comment comparer une cellule avec une
autre









: si
le
contenu de la cellule A1 est égal au contenu de la cellule
D1









va
en B1, si
B1 = E1... sinon va en B2.

Merci de votre aide.





--
Cordialement,

Michel Gaboly
http://www.gaboly.com





--
Cordialement,

Michel Gaboly
http://www.gaboly.com





--
Cordialement,

Michel Gaboly
http://www.gaboly.com





--
Cordialement,

Michel Gaboly
http://www.gaboly.com












Avatar
Michel Gaboly
Re,

Si à l'arrivée, il doit y avoir identité entre A à C et D à F, n'est-il
pas possible de trouver une astuce pour mettre d'abord les com-
mentaires en colonne G, comme en G2 :

=SI(A2 & B2 & C2 <> D2 & E2 & F2;"Changement";"")

à recopier vers le bas. Tu fais ensuite sur la plage concernée en
colonne G un Copier Collage Spécial Valeurs.

Tu peux ensuite reporter en une seule opération
les données des colonnes A à C sur les colonnes D à F

Le traitement devient ainsi à la fois + simple et + rapide.

Dis-moi si cela te convient.



Bonjour,

1- Il ne faut décaler tout le tableau vers le bas mais seulement les D à G
car ensuite je veux copier ce qui se trouve de A à C dans D à F est mettre
un commantaire.

2- Oups, c'est bien E2 = F2

3- Oui, à l'arrivée A à C seront égalent à D à F et j'insérerai un
commentaire automatique en G (ça je sais comment faire:)).

Départ
A B C D E F G
9 8 7 9 8 7
1 2 3 1 5 6
4 5 6 1 3 4
1 3 4

Arrivée
A B C D E F G
9 8 7 9 8 7
1 2 3 1 2 3 Changement
4 5 6 4 5 6 Changement
1 3 4 1 3 4

Tu n'as pas à être décolé, c'est moi qui n'est pas très clair car trop
évident pour moi mais pour les autres.

"Michel Gaboly" a écrit dans le message de
news:
Re,

Tu n'as répondu qu'à une partie de la question :

En ce qui concerne les insertions, si tu sélectionnes 3 cellules en
colonne

D à G, et que tu fasses une insertion, tu décales tout le reste du tableau
(vers le bas je suppose).

Ne faut-il pas insérer une ligne entière ?

Quant à la vérification que C2= E2, je suppose que c'est E2 = F2.

En clair, à l'arrivée, les colonnes A à C et D à F doivent avoir le même
contenu c'est cela ?


Pourrais-tu donner un exemple de 3 lignes (avec des différences, bien sûr
entre A et D, Et entre C et F) avec la situation initiale, et le résultat
à

atteindre.

Désolé de ne toujours pas trouver cela limpide ;-(((




Bonjour,

Dond voici le type d'info que j'ai :

A B C D
E F G
SO Quantité Date SO Quantité Date Commentaires
111 111 50 2004-08-31 111 111 50 2004-08-31
222 222 1000 2004-09-01 222 222 1500 2004-09-02

333 333 1500 2004-09-01 444 444 250 2004-09-05

Si ma cellule A2 = D2 je dois vérifier si B2 = E2 si non je copie B2:C2
dans


E2:F2, si oui je vérifie que C2 = E2 si non je copie C2 dans F2 si oui
je


passe à la ligne suivant (A3) et je fais la Loop.

Si A2 n'égale pas D2 alors je dois insérer des cellules en D2:G2 et
copier


A2:C2 dans D2:F2 ensuite je passe à la ligne suivante et je refais la
Loop.



Merci

"Michel Gaboly" a écrit dans le message de
news:
Bonjour,

Une précision complémentaire : lors de l'insertion
(ActiveCell.Cells.Insert),

on est censé décaler les cellules existantes vers le bas ?

Par ailleurs Activecell.Cells correspond à une cellule unique ; on
insère



donc
une seule cellule ; est-ce ce que tu veux ?

En fait, si tu nous indiquais le type d'infos dans les différentes
colonnes et

ce que tu veux faire, ce serait + facile de t'aider ;-))

Dans ta boucle, il te faut probablement un Offset(i) et un i = i + 1
pour



pouvoir exploiter la ligne suivante lors du prochain passage dans la
boucle.


Rergarde l'aide d'Offset si nécessaire.


Voici un exemple très simple de procédure combinant une boucle Do
Until



et Offset :

Sub ExempleOffset()
' Le 1er argumment d'Offset est un nb de lignes,
' le second un nb de colonnes.
Dim i As Integer
Workbooks.Add
Range("A1:A30").Select
Selection.FormulaR1C1 = "=ROW()"
Do While ActiveCell.Offset(i) <> ""
ActiveCell.Offset(i, 1) = ActiveCell.Offset(i) * 2
i = i + 1
Loop
End Sub




Bonjour,

Suite à vos commentaires, j'ai modifier ma feuille de travail et
voici




les
explications nécessaires.

Do Until ActiveCell.Text = ""
If A(1) est égal à D(1) Then
Copie B(1):C(1) dans E(1):F(1)
Else
Range("D(1):G(1)").Select
ActiveCell.Cells.Insert
Range("A(1):C(1)").Select
Range("D(1)").Activate
ActiveSheet.Paste
ActiveCell.Offset(1, -3).Select
Loop

Mon ignorance est que je ne dois pas référencer en A1 mais en A(x)
pour




faire ma Loop. En espérant que mes explications vous aiderons pour
m'aider.



Encore une fois merci beaucoup.

"Michel Gaboly" a écrit dans le message de
news:
Re,

;-))

Attendons donc les précisions.

Cependant, il y a au moins 2 points qui me semblent éminemment
probables



:


- La sélection de B1 ou B2 ne doit pas intervenir si on travaille
sur





une
plage
compètement différente de la feuille.

- La nécessité d'ajouter de modifier ainsi Target :
Set Target = Union(Target, Target.Dependents)


On verra bien ;-))))



Bonjour Michel,
Tu as probablement, voire totalement, raison dans tes
différentes






observations,mais comme tu vois, tu es
obligé de beaucoup supposer... ;o))))
Il faudrait que Linebaker précise un peu sa demande, à laquelle
je






m'étais contenté de répondre de la
manière la plus directe.
--
Amicales Salutations

"Michel Gaboly" a écrit dans le message
de






news:
Bonjour Philippe,

Sur le principe, je suis d'accord avec toi sur le recours à
l'événement



Change, mais ... ;-)))

1 - Il faut limiter son application au cas où la valeur d'une
des







cel-
lules concernées est modifiée : sinon quelque soit la (ou les
cellules)



modifiée(s) dans la feuille, on va se retrouver avec B1 ou B2
comme





cellule active.

Pas sûr que ce soit pratique si on travaille sur la plage
M300:Z500 !







2 - Les 3 petits points dans l'énoncé (après E1) me font
soupçonner,





qu'il y a d'autres conditions à prendre en compte. Je suppose
que







si
B1 = E1, il faut sélectionner une cellule particulière,
peut-être







C1
(car B1 comme E1 représentent un décalage d'une cellule vers
la







droite
par rapport à A1 et D1). Il faudrait alors sélectionner D1 si
C1 > > > F1,







...
Est-ce que toute la ligne 1 est concernée ? Une précision
serait







néces-
saire.


3 - Le mélange des notations [b1] et Range("b1") ne facilite
pas







la
lecture. Personnellement, je n'aime pas la syntaxe [b1] pour
diverses





raisons, l'une d'elles est que les crochets sont désagréables
d'emploi





sur
un clavier français (encore + sur PC que sur Mac).


En première approximation basée sur les hypothèses du point
2), je







proposerai :

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim c As Range
For Each c In Target
If c.Address(False, False) = "A1" Or c.Address(False,
False) > > > > > "D1" Then





If Range("A1") = Range("D1") Then
Range("B1").Select
Else
Range("B2").Select
End If
ElseIf c.Address(False, False) = "B1" Or
c.Address(False,







False) = "E1" Then
If Range("B1") = Range("E1") Then
Range("C1").Select
Else
Range("C2").Select ' ou B2 info nécessaire
End If
End If
Next c
End Sub

Le défaut de ceci est que si l'une des cellules A1, B1, D1 ou
E1







soit
sa
valeur changée parce qu'elle contient une formule se référant
à







une
autre cellule qui est modifiée, rien ne se passe.

En effet, Target représente cette autre cellule ( et d'autres
éventuellement),



mais ne contient pas la cellule modifiée.

Il faut donc adapter la procédure pour prendre en compte les
cellules





dépendantes
de Target :

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim c As Range
Set Target = Union(Target, Target.Dependents)
' ....

Le reste de la procédure ne change pas.



Bonjour Linebaker,
La comparaison de cellules peut se faire très simplement par
formule






dans la feuille mais l'action
souhaitée (déplacement de la sélection si j'ai compris)
nécessite le






recours au VBA.
Ceci, dans le module de feuille, devrait convenir :

Private Sub Worksheet_Change(ByVal Target As Range)
If [a1] = [d1] And [b1] = [e1] Then
Range("b1").Select
Else
Range("b2").Select
End If
End Sub

--
Amicales Salutations
Retirer A_S_ pour répondre.
XL 97 / 2000 / 2002
Pour suivre facilement le forum :
news://msnews.microsoft.com/microsoft.public.fr.excel
(Voulez-vous vous abonner ? -> Oui)

"Linebaker" a écrit dans le message
de








news:tBbTc.33502$
Bonjour à vous tous,

J'aimerais savoir comment comparer une cellule avec une
autre









: si
le
contenu de la cellule A1 est égal au contenu de la cellule
D1









va
en B1, si
B1 = E1... sinon va en B2.

Merci de votre aide.





--
Cordialement,

Michel Gaboly
http://www.gaboly.com





--
Cordialement,

Michel Gaboly
http://www.gaboly.com





--
Cordialement,

Michel Gaboly
http://www.gaboly.com





--
Cordialement,

Michel Gaboly
http://www.gaboly.com





--
Cordialement,

Michel Gaboly
http://www.gaboly.com