milles excuses, je crois avoir envoyé un post précédent que je n'avais
pas terminé (je sais pas comment d'ailleurs)
dans le cas contraire, je répète ma requête:
eh puis, d'abord, bonsoir à tous!
je renvoie un nouveau post concernant un problème précédent, je m'en
excuse par avance, mais j'ai rencontré une difficulté inattendue, donc
je souhaite avoir l'avis du plus grand nombre.
je remet les choses dans leur contexte:
en fait, dans mon tableau XL je souhaiterais controler les modifs dans
un champ particulier. si la valeur d'une cellule est modifiée, une
boite de dialogue s'affiche demandant à l'utilisateur s'il est bien
sur de vouloir effectuer cette modif. s'il repond oui, la nouvelle
valeur s'affiche en bleu, sinon, la cellule revient à sa valeur
initiale. toutefois, si la cellule est initialement vide, la boite de
dialogue ne s'affiche pas et la nouvelle valeur s'affiche en noir,
comme si de rien n'était.
pour cela, j'ai mis en oeuvre le code suivant:
subtilité: pour pouvoir évaluer les modifs avec quelque chose de
"stable", j'ai recopié le contenu initial de mon champ dans une
colonne cachée, avec 10 colonnes de décalage de mon champ initial.
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
'permet d'agir sur la modification de cellule(s) de la feuille de
calcul
Dim message1 As String
Dim baseline
'dans le cas où la cellule modifiée appartient à la plage spécifiée
If Not Intersect(Target, Range("baseline")) Is Nothing Then
' dans le cas où la cellule modifiée n'est pas vide
If Target <> Target.Offset(0, 10) Then
' dans le cas où la cellule modifiée n'est pas vide
If Target.Offset(0, 10) <> "" Then
'l'utilisateur doit faire un choix dans une boîte de dialogue
message1 = MsgBox("Modification of the baseline date is
not harmless and requires a customer approbation." & Chr(10) &
"Confirm modification ?", vbYesNo + vbQuestion, "Warning!")
'si la modif est acceptée, le texte de la cellule devient bleu
If message1 = vbYes Then
Target.Font.ColorIndex = 5
' si la modif est refusée, la cellule retrouve sa valeur initiale
(avant modif)
Else: Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
Exit Sub
End If
' si la cellule testée est initialement vide, il est inutile de
changer la couleur
' de la police
Else: Application.EnableEvents = False
Target.Font.ColorIndex = 1
Application.EnableEvents = True
End If
Else: Application.EnableEvents = False
ActiveCell = Target.Offset(1, 0)
Application.EnableEvents = True
End If
' on sort de la macro, ce qui évite une boucle infinie
Else: Exit Sub
End If
End Sub
seulement, ca ne marche pas tout le temps. en effet, lorsqu'un usager
veut insérer une ligne dans le tableau, ca buggge! je crois que c'est
parce qu'en insérant une ligne en sélectionnant au préalable une ligne
entière, le programme ne peut pas identifier de cellule modifiée dans
la feuille (la sélection portant justement sur une ligne entière). je
pense que le mieux serait d'exclure le cas d'une insertion (et d'une
suppression d'ailleurs) de la procédure worksheet_change, mais pour le
faire, ca, je n'y suis pas encore arrivé.
j'espère etre clair et ne pas vous avoir embrouillé.
est ce que quelqu'un a une idée? le ciel vous le rendra au centuple
(si, si, je vous assure...)
merci d'avance à tous ceux qui transpirent sur cette question à la con
(mais qui pourrit bien la vie ... lol)
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
papou
Bonjour If Target.Cells.Count > 1 Then Exit Sub Cordialement Pascal
"Izzario" a écrit dans le message de news:
milles excuses, je crois avoir envoyé un post précédent que je n'avais pas terminé (je sais pas comment d'ailleurs)
dans le cas contraire, je répète ma requête:
eh puis, d'abord, bonsoir à tous!
je renvoie un nouveau post concernant un problème précédent, je m'en excuse par avance, mais j'ai rencontré une difficulté inattendue, donc je souhaite avoir l'avis du plus grand nombre. je remet les choses dans leur contexte:
en fait, dans mon tableau XL je souhaiterais controler les modifs dans un champ particulier. si la valeur d'une cellule est modifiée, une boite de dialogue s'affiche demandant à l'utilisateur s'il est bien sur de vouloir effectuer cette modif. s'il repond oui, la nouvelle valeur s'affiche en bleu, sinon, la cellule revient à sa valeur initiale. toutefois, si la cellule est initialement vide, la boite de dialogue ne s'affiche pas et la nouvelle valeur s'affiche en noir, comme si de rien n'était.
pour cela, j'ai mis en oeuvre le code suivant: subtilité: pour pouvoir évaluer les modifs avec quelque chose de "stable", j'ai recopié le contenu initial de mon champ dans une colonne cachée, avec 10 colonnes de décalage de mon champ initial.
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range) 'permet d'agir sur la modification de cellule(s) de la feuille de calcul
Dim message1 As String Dim baseline
'dans le cas où la cellule modifiée appartient à la plage spécifiée If Not Intersect(Target, Range("baseline")) Is Nothing Then
' dans le cas où la cellule modifiée n'est pas vide If Target <> Target.Offset(0, 10) Then
' dans le cas où la cellule modifiée n'est pas vide If Target.Offset(0, 10) <> "" Then
'l'utilisateur doit faire un choix dans une boîte de dialogue message1 = MsgBox("Modification of the baseline date is not harmless and requires a customer approbation." & Chr(10) & "Confirm modification ?", vbYesNo + vbQuestion, "Warning!")
'si la modif est acceptée, le texte de la cellule devient bleu If message1 = vbYes Then Target.Font.ColorIndex = 5
' si la modif est refusée, la cellule retrouve sa valeur initiale (avant modif) Else: Application.EnableEvents = False Application.Undo Application.EnableEvents = True Exit Sub End If
' si la cellule testée est initialement vide, il est inutile de changer la couleur ' de la police Else: Application.EnableEvents = False Target.Font.ColorIndex = 1 Application.EnableEvents = True End If
Else: Application.EnableEvents = False ActiveCell = Target.Offset(1, 0) Application.EnableEvents = True End If ' on sort de la macro, ce qui évite une boucle infinie Else: Exit Sub End If
End Sub
seulement, ca ne marche pas tout le temps. en effet, lorsqu'un usager veut insérer une ligne dans le tableau, ca buggge! je crois que c'est parce qu'en insérant une ligne en sélectionnant au préalable une ligne entière, le programme ne peut pas identifier de cellule modifiée dans la feuille (la sélection portant justement sur une ligne entière). je pense que le mieux serait d'exclure le cas d'une insertion (et d'une suppression d'ailleurs) de la procédure worksheet_change, mais pour le faire, ca, je n'y suis pas encore arrivé.
j'espère etre clair et ne pas vous avoir embrouillé.
est ce que quelqu'un a une idée? le ciel vous le rendra au centuple (si, si, je vous assure...) merci d'avance à tous ceux qui transpirent sur cette question à la con (mais qui pourrit bien la vie ... lol)
izzario
Bonjour
If Target.Cells.Count > 1 Then Exit Sub
Cordialement
Pascal
"Izzario" <julienzrb@free.fr> a écrit dans le message de
news:c6c0ba27.0409010522.4356bdfe@posting.google.com...
milles excuses, je crois avoir envoyé un post précédent que je n'avais
pas terminé (je sais pas comment d'ailleurs)
dans le cas contraire, je répète ma requête:
eh puis, d'abord, bonsoir à tous!
je renvoie un nouveau post concernant un problème précédent, je m'en
excuse par avance, mais j'ai rencontré une difficulté inattendue, donc
je souhaite avoir l'avis du plus grand nombre.
je remet les choses dans leur contexte:
en fait, dans mon tableau XL je souhaiterais controler les modifs dans
un champ particulier. si la valeur d'une cellule est modifiée, une
boite de dialogue s'affiche demandant à l'utilisateur s'il est bien
sur de vouloir effectuer cette modif. s'il repond oui, la nouvelle
valeur s'affiche en bleu, sinon, la cellule revient à sa valeur
initiale. toutefois, si la cellule est initialement vide, la boite de
dialogue ne s'affiche pas et la nouvelle valeur s'affiche en noir,
comme si de rien n'était.
pour cela, j'ai mis en oeuvre le code suivant:
subtilité: pour pouvoir évaluer les modifs avec quelque chose de
"stable", j'ai recopié le contenu initial de mon champ dans une
colonne cachée, avec 10 colonnes de décalage de mon champ initial.
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
'permet d'agir sur la modification de cellule(s) de la feuille de
calcul
Dim message1 As String
Dim baseline
'dans le cas où la cellule modifiée appartient à la plage spécifiée
If Not Intersect(Target, Range("baseline")) Is Nothing Then
' dans le cas où la cellule modifiée n'est pas vide
If Target <> Target.Offset(0, 10) Then
' dans le cas où la cellule modifiée n'est pas vide
If Target.Offset(0, 10) <> "" Then
'l'utilisateur doit faire un choix dans une boîte de dialogue
message1 = MsgBox("Modification of the baseline date is
not harmless and requires a customer approbation." & Chr(10) &
"Confirm modification ?", vbYesNo + vbQuestion, "Warning!")
'si la modif est acceptée, le texte de la cellule devient bleu
If message1 = vbYes Then
Target.Font.ColorIndex = 5
' si la modif est refusée, la cellule retrouve sa valeur initiale
(avant modif)
Else: Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
Exit Sub
End If
' si la cellule testée est initialement vide, il est inutile de
changer la couleur
' de la police
Else: Application.EnableEvents = False
Target.Font.ColorIndex = 1
Application.EnableEvents = True
End If
Else: Application.EnableEvents = False
ActiveCell = Target.Offset(1, 0)
Application.EnableEvents = True
End If
' on sort de la macro, ce qui évite une boucle infinie
Else: Exit Sub
End If
End Sub
seulement, ca ne marche pas tout le temps. en effet, lorsqu'un usager
veut insérer une ligne dans le tableau, ca buggge! je crois que c'est
parce qu'en insérant une ligne en sélectionnant au préalable une ligne
entière, le programme ne peut pas identifier de cellule modifiée dans
la feuille (la sélection portant justement sur une ligne entière). je
pense que le mieux serait d'exclure le cas d'une insertion (et d'une
suppression d'ailleurs) de la procédure worksheet_change, mais pour le
faire, ca, je n'y suis pas encore arrivé.
j'espère etre clair et ne pas vous avoir embrouillé.
est ce que quelqu'un a une idée? le ciel vous le rendra au centuple
(si, si, je vous assure...)
merci d'avance à tous ceux qui transpirent sur cette question à la con
(mais qui pourrit bien la vie ... lol)
Bonjour If Target.Cells.Count > 1 Then Exit Sub Cordialement Pascal
"Izzario" a écrit dans le message de news:
milles excuses, je crois avoir envoyé un post précédent que je n'avais pas terminé (je sais pas comment d'ailleurs)
dans le cas contraire, je répète ma requête:
eh puis, d'abord, bonsoir à tous!
je renvoie un nouveau post concernant un problème précédent, je m'en excuse par avance, mais j'ai rencontré une difficulté inattendue, donc je souhaite avoir l'avis du plus grand nombre. je remet les choses dans leur contexte:
en fait, dans mon tableau XL je souhaiterais controler les modifs dans un champ particulier. si la valeur d'une cellule est modifiée, une boite de dialogue s'affiche demandant à l'utilisateur s'il est bien sur de vouloir effectuer cette modif. s'il repond oui, la nouvelle valeur s'affiche en bleu, sinon, la cellule revient à sa valeur initiale. toutefois, si la cellule est initialement vide, la boite de dialogue ne s'affiche pas et la nouvelle valeur s'affiche en noir, comme si de rien n'était.
pour cela, j'ai mis en oeuvre le code suivant: subtilité: pour pouvoir évaluer les modifs avec quelque chose de "stable", j'ai recopié le contenu initial de mon champ dans une colonne cachée, avec 10 colonnes de décalage de mon champ initial.
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range) 'permet d'agir sur la modification de cellule(s) de la feuille de calcul
Dim message1 As String Dim baseline
'dans le cas où la cellule modifiée appartient à la plage spécifiée If Not Intersect(Target, Range("baseline")) Is Nothing Then
' dans le cas où la cellule modifiée n'est pas vide If Target <> Target.Offset(0, 10) Then
' dans le cas où la cellule modifiée n'est pas vide If Target.Offset(0, 10) <> "" Then
'l'utilisateur doit faire un choix dans une boîte de dialogue message1 = MsgBox("Modification of the baseline date is not harmless and requires a customer approbation." & Chr(10) & "Confirm modification ?", vbYesNo + vbQuestion, "Warning!")
'si la modif est acceptée, le texte de la cellule devient bleu If message1 = vbYes Then Target.Font.ColorIndex = 5
' si la modif est refusée, la cellule retrouve sa valeur initiale (avant modif) Else: Application.EnableEvents = False Application.Undo Application.EnableEvents = True Exit Sub End If
' si la cellule testée est initialement vide, il est inutile de changer la couleur ' de la police Else: Application.EnableEvents = False Target.Font.ColorIndex = 1 Application.EnableEvents = True End If
Else: Application.EnableEvents = False ActiveCell = Target.Offset(1, 0) Application.EnableEvents = True End If ' on sort de la macro, ce qui évite une boucle infinie Else: Exit Sub End If
End Sub
seulement, ca ne marche pas tout le temps. en effet, lorsqu'un usager veut insérer une ligne dans le tableau, ca buggge! je crois que c'est parce qu'en insérant une ligne en sélectionnant au préalable une ligne entière, le programme ne peut pas identifier de cellule modifiée dans la feuille (la sélection portant justement sur une ligne entière). je pense que le mieux serait d'exclure le cas d'une insertion (et d'une suppression d'ailleurs) de la procédure worksheet_change, mais pour le faire, ca, je n'y suis pas encore arrivé.
j'espère etre clair et ne pas vous avoir embrouillé.
est ce que quelqu'un a une idée? le ciel vous le rendra au centuple (si, si, je vous assure...) merci d'avance à tous ceux qui transpirent sur cette question à la con (mais qui pourrit bien la vie ... lol)