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.
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.
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.
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.
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" <try_again@videotron.ca> a écrit dans le message de
news:tBbTc.33502$s81.1037545@wagner.videotron.net...
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.
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.
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
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" <try_again@videotron.ca> a écrit dans le message de
news:tBbTc.33502$s81.1037545@wagner.videotron.net...
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
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
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
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" <michel@Suppgaboly.com> a écrit dans le message de
news:411DC635.9E19B698@Suppgaboly.com...
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" <try_again@videotron.ca> a écrit dans le message de
news:tBbTc.33502$s81.1037545@wagner.videotron.net...
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
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
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
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" <michel@Suppgaboly.com> a écrit dans le message de
news:411DC635.9E19B698@Suppgaboly.com...
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" <try_again@videotron.ca> a écrit dans le message de
news:tBbTc.33502$s81.1037545@wagner.videotron.net...
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
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
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
plagecompè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 esobligé de beaucoup supposer... ;o))))
Il faudrait que Linebaker précise un peu sa demande, à laquelle je
m'étais contenté de répondre de lamaniè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énementChange, 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
surun 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" ThenIf 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
savaleur 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épendantesde 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'actionsouhaité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
lecontenu de la cellule A1 est égal au contenu de la cellule D1 va
en B1, siB1 = E1... sinon va en B2.
Merci de votre aide.
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
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" <michel@Suppgaboly.com> a écrit dans le message de
news:411DCCD5.770210C6@Suppgaboly.com...
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" <michel@Suppgaboly.com> a écrit dans le message de
news:411DC635.9E19B698@Suppgaboly.com...
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" <try_again@videotron.ca> a écrit dans le message de
news:tBbTc.33502$s81.1037545@wagner.videotron.net...
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
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
plagecompè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 esobligé de beaucoup supposer... ;o))))
Il faudrait que Linebaker précise un peu sa demande, à laquelle je
m'étais contenté de répondre de lamaniè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énementChange, 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
surun 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" ThenIf 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
savaleur 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épendantesde 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'actionsouhaité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
lecontenu de la cellule A1 est égal au contenu de la cellule D1 va
en B1, siB1 = E1... sinon va en B2.
Merci de votre aide.
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
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 SubBonjour,
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
plagecompè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 esobligé de beaucoup supposer... ;o))))
Il faudrait que Linebaker précise un peu sa demande, à laquelle je
m'étais contenté de répondre de lamaniè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énementChange, 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
surun 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" ThenIf 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
savaleur 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épendantesde 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'actionsouhaité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
lecontenu de la cellule A1 est égal au contenu de la cellule D1
va
en B1, siB1 = 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
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" <michel@Suppgaboly.com> a écrit dans le message de
news:411DCCD5.770210C6@Suppgaboly.com...
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" <michel@Suppgaboly.com> a écrit dans le message de
news:411DC635.9E19B698@Suppgaboly.com...
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" <try_again@videotron.ca> a écrit dans le message de
news:tBbTc.33502$s81.1037545@wagner.videotron.net...
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
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 SubBonjour,
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
plagecompè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 esobligé de beaucoup supposer... ;o))))
Il faudrait que Linebaker précise un peu sa demande, à laquelle je
m'étais contenté de répondre de lamaniè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énementChange, 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
surun 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" ThenIf 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
savaleur 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épendantesde 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'actionsouhaité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
lecontenu de la cellule A1 est égal au contenu de la cellule D1
va
en B1, siB1 = 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
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
doncune seule cellule ; est-ce ce que tu veux ?
En fait, si tu nous indiquais le type d'infos dans les différentes
colonnes etce 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 SubBonjour,
Suite à vos commentaires, j'ai modifier ma feuille de travail et voici
lesexplications 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
uneplagecompè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 esobligé de beaucoup supposer... ;o))))
Il faudrait que Linebaker précise un peu sa demande, à laquelle je
m'étais contenté de répondre de lamaniè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énementChange, 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
commecellule 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
siB1 = 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
droitepar 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
lalecture. Personnellement, je n'aime pas la syntaxe [b1] pour
diversesraisons, l'une d'elles est que les crochets sont désagréables
d'emploisurun 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" ThenIf 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" ThenIf 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
soitsavaleur changée parce qu'elle contient une formule se référant à
uneautre 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
cellulesdépendantesde 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
formuledans la feuille mais l'actionsouhaitée (déplacement de la sélection si j'ai compris)
nécessite lerecours 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
: silecontenu de la cellule A1 est égal au contenu de la cellule D1
vaen B1, siB1 = 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
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" <michel@Suppgaboly.com> a écrit dans le message de
news:411E01AF.22BA191E@Suppgaboly.com...
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" <michel@Suppgaboly.com> a écrit dans le message de
news:411DCCD5.770210C6@Suppgaboly.com...
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" <michel@Suppgaboly.com> a écrit dans le message de
news:411DC635.9E19B698@Suppgaboly.com...
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" <try_again@videotron.ca> a écrit dans le message de
news:tBbTc.33502$s81.1037545@wagner.videotron.net...
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
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
doncune seule cellule ; est-ce ce que tu veux ?
En fait, si tu nous indiquais le type d'infos dans les différentes
colonnes etce 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 SubBonjour,
Suite à vos commentaires, j'ai modifier ma feuille de travail et voici
lesexplications 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
uneplagecompè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 esobligé de beaucoup supposer... ;o))))
Il faudrait que Linebaker précise un peu sa demande, à laquelle je
m'étais contenté de répondre de lamaniè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énementChange, 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
commecellule 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
siB1 = 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
droitepar 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
lalecture. Personnellement, je n'aime pas la syntaxe [b1] pour
diversesraisons, l'une d'elles est que les crochets sont désagréables
d'emploisurun 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" ThenIf 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" ThenIf 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
soitsavaleur changée parce qu'elle contient une formule se référant à
uneautre 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
cellulesdépendantesde 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
formuledans la feuille mais l'actionsouhaitée (déplacement de la sélection si j'ai compris)
nécessite lerecours 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
: silecontenu de la cellule A1 est égal au contenu de la cellule D1
vaen B1, siB1 = 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
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
doncune seule cellule ; est-ce ce que tu veux ?
En fait, si tu nous indiquais le type d'infos dans les différentes
colonnes etce 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 SubBonjour,
Suite à vos commentaires, j'ai modifier ma feuille de travail et
voici
lesexplications 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
uneplagecompè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 esobligé de beaucoup supposer... ;o))))
Il faudrait que Linebaker précise un peu sa demande, à laquelle
je
m'étais contenté de répondre de lamaniè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énementChange, 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
commecellule 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
siB1 = 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
droitepar 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
lalecture. Personnellement, je n'aime pas la syntaxe [b1] pour
diversesraisons, l'une d'elles est que les crochets sont désagréables
d'emploisurun 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" ThenIf 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" ThenIf 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
soitsavaleur changée parce qu'elle contient une formule se référant
à
uneautre 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
cellulesdépendantesde 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
formuledans la feuille mais l'actionsouhaitée (déplacement de la sélection si j'ai compris)
nécessite lerecours 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
: silecontenu de la cellule A1 est égal au contenu de la cellule
D1
vaen B1, siB1 = 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
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" <michel@Suppgaboly.com> a écrit dans le message de
news:411E01AF.22BA191E@Suppgaboly.com...
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" <michel@Suppgaboly.com> a écrit dans le message de
news:411DCCD5.770210C6@Suppgaboly.com...
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" <michel@Suppgaboly.com> a écrit dans le message
de
news:411DC635.9E19B698@Suppgaboly.com...
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" <try_again@videotron.ca> a écrit dans le message
de
news:tBbTc.33502$s81.1037545@wagner.videotron.net...
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
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
doncune seule cellule ; est-ce ce que tu veux ?
En fait, si tu nous indiquais le type d'infos dans les différentes
colonnes etce 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 SubBonjour,
Suite à vos commentaires, j'ai modifier ma feuille de travail et
voici
lesexplications 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
uneplagecompè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 esobligé de beaucoup supposer... ;o))))
Il faudrait que Linebaker précise un peu sa demande, à laquelle
je
m'étais contenté de répondre de lamaniè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énementChange, 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
commecellule 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
siB1 = 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
droitepar 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
lalecture. Personnellement, je n'aime pas la syntaxe [b1] pour
diversesraisons, l'une d'elles est que les crochets sont désagréables
d'emploisurun 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" ThenIf 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" ThenIf 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
soitsavaleur changée parce qu'elle contient une formule se référant
à
uneautre 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
cellulesdépendantesde 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
formuledans la feuille mais l'actionsouhaitée (déplacement de la sélection si j'ai compris)
nécessite lerecours 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
: silecontenu de la cellule A1 est égal au contenu de la cellule
D1
vaen B1, siB1 = 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
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
colonneD à 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
dansE2:F2, si oui je vérifie que C2 = E2 si non je copie C2 dans F2 si oui
jepasse à 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
copierA2: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èredoncune seule cellule ; est-ce ce que tu veux ?
En fait, si tu nous indiquais le type d'infos dans les différentes
colonnes etce 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
pourpouvoir 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
Untilet 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 SubBonjour,
Suite à vos commentaires, j'ai modifier ma feuille de travail et
voicilesexplications 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)
pourfaire 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
suruneplagecompè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érentesobservations,mais comme tu vois, tu esobligé de beaucoup supposer... ;o))))
Il faudrait que Linebaker précise un peu sa demande, à laquelle
jem'étais contenté de répondre de lamanière la plus directe.
--
Amicales Salutations
"Michel Gaboly" a écrit dans le message
denews:Bonjour Philippe,
Sur le principe, je suis d'accord avec toi sur le recours à
l'événementChange, mais ... ;-)))
1 - Il faut limiter son application au cas où la valeur d'une
descel-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
commecellule 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
quesiB1 = E1, il faut sélectionner une cellule particulière,
peut-êtreC1(car B1 comme E1 représentent un décalage d'une cellule vers
ladroitepar 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
seraitnéces-saire.
3 - Le mélange des notations [b1] et Range("b1") ne facilite
paslalecture. Personnellement, je n'aime pas la syntaxe [b1] pour
diversesraisons, l'une d'elles est que les crochets sont désagréables
d'emploisurun clavier français (encore + sur PC que sur Mac).
En première approximation basée sur les hypothèses du point
2), jeproposerai :
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" ThenIf 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" ThenIf 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
E1soitsavaleur changée parce qu'elle contient une formule se référant
àuneautre 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
cellulesdépendantesde 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
formuledans la feuille mais l'actionsouhaitée (déplacement de la sélection si j'ai compris)
nécessite lerecours 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
denews:tBbTc.33502$Bonjour à vous tous,
J'aimerais savoir comment comparer une cellule avec une
autre: silecontenu de la cellule A1 est égal au contenu de la cellule
D1vaen B1, siB1 = 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
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" <michel@Suppgaboly.com> a écrit dans le message de
news:411E2616.95D731B@Suppgaboly.com...
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" <michel@Suppgaboly.com> a écrit dans le message de
news:411E01AF.22BA191E@Suppgaboly.com...
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" <michel@Suppgaboly.com> a écrit dans le message de
news:411DCCD5.770210C6@Suppgaboly.com...
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" <michel@Suppgaboly.com> a écrit dans le message
de
news:411DC635.9E19B698@Suppgaboly.com...
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" <try_again@videotron.ca> a écrit dans le message
de
news:tBbTc.33502$s81.1037545@wagner.videotron.net...
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
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
colonneD à 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
dansE2:F2, si oui je vérifie que C2 = E2 si non je copie C2 dans F2 si oui
jepasse à 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
copierA2: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èredoncune seule cellule ; est-ce ce que tu veux ?
En fait, si tu nous indiquais le type d'infos dans les différentes
colonnes etce 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
pourpouvoir 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
Untilet 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 SubBonjour,
Suite à vos commentaires, j'ai modifier ma feuille de travail et
voicilesexplications 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)
pourfaire 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
suruneplagecompè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érentesobservations,mais comme tu vois, tu esobligé de beaucoup supposer... ;o))))
Il faudrait que Linebaker précise un peu sa demande, à laquelle
jem'étais contenté de répondre de lamanière la plus directe.
--
Amicales Salutations
"Michel Gaboly" a écrit dans le message
denews:Bonjour Philippe,
Sur le principe, je suis d'accord avec toi sur le recours à
l'événementChange, mais ... ;-)))
1 - Il faut limiter son application au cas où la valeur d'une
descel-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
commecellule 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
quesiB1 = E1, il faut sélectionner une cellule particulière,
peut-êtreC1(car B1 comme E1 représentent un décalage d'une cellule vers
ladroitepar 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
seraitnéces-saire.
3 - Le mélange des notations [b1] et Range("b1") ne facilite
paslalecture. Personnellement, je n'aime pas la syntaxe [b1] pour
diversesraisons, l'une d'elles est que les crochets sont désagréables
d'emploisurun clavier français (encore + sur PC que sur Mac).
En première approximation basée sur les hypothèses du point
2), jeproposerai :
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" ThenIf 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" ThenIf 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
E1soitsavaleur changée parce qu'elle contient une formule se référant
àuneautre 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
cellulesdépendantesde 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
formuledans la feuille mais l'actionsouhaitée (déplacement de la sélection si j'ai compris)
nécessite lerecours 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
denews:tBbTc.33502$Bonjour à vous tous,
J'aimerais savoir comment comparer une cellule avec une
autre: silecontenu de la cellule A1 est égal au contenu de la cellule
D1vaen B1, siB1 = 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