OVH Cloud OVH Cloud

Macro Evenementielle

2 réponses
Avatar
Philippe Bérard
Bonjour à Tous,

Je souhaite avec la macro suivante mettre à jour des colonnes (en
l'occurrence les colonnes 12 et 25) en fonction de ce qui aura été saisi
dans les colonnes 5 & 7.

Je souhaite cependant intégrer un garde-fou sous forme de Msgbox pour
confirmer l'écrasement des données éventuellement présentes dans les
colonne 12 & 25, qui n'apparaîtrait que lorsque les cellules concernées
ne sont pas vides.

Ce bout de code ne fonctionne que partiellement dans la mesure où
lorsque que les cellules destinataires :
- sont vides, j'ai quand même le msgbox (1 seule fois) !
- sont remplies, j'ai deux fois le msgbox !

L'un d'entre pourrait-il m'apporter son aide dans la finalisation de
cette macro événementielle ?

Merci d'avance et joyeux Noël à tous.

Philippe


Private Sub Worksheet_Change(ByVal Target As Range)

Select Case Target.Column

Case 5
If Target.Value <> "" Or Target.Value <> "?" Then
If Cells(Target.Row, 12) <> "" Then Call msgAlerte
If msgAlerte = 6 Then Cells(Target.Row, 12) = Target.Value

End If
Case 7
If Target.Value <> "" Or Target.Value <> "?" Then
If Cells(Target.Row, 12) <> "" Then Call msgAlerte
If msgAlerte = 6 Then Cells(Target.Row, 25) = Target.Value
End If
End Select
End Sub

Function msgAlerte()
msgAlerte = MsgBox("Ecrasement de la Valeur ?", vbYesNo)
End Function

2 réponses

Avatar
Pounet95
Bonjour,
Comme ceci peut-être ?
J'ai un peu 'optimisé' afin de ne pas avoir le même code en double
suivant le cas 5 ou 7.
Le case else est là pour empêcher de reposer la question quand la cellule
est changée
Il était ausi possible de désactiver l'évènement puis de le réactiver après
écriture de
la cellule ( Application.EnableEvents )


Private Sub Worksheet_Change(ByVal Target As Range)
Dim col As Integer
Dim suite As Integer

Select Case Target.Column
Case 5
col = 12
Case 7
col = 25
Case Else
Exit Sub
End Select

If Target.Value <> "" Or Target.Value <> "?" Then
If Cells(Target.Row, col) <> "" Then
suite = msgAlerte
If suite = 6 Then Cells(Target.Row, col) = Target.Value
Else
Cells(Target.Row, col) = Target.Value
End If
End If
End Sub

Function msgAlerte()
msgAlerte = MsgBox("Ecrasement de la Valeur ?", vbYesNo)
End Function


--
Pounet95
on trouve tout ( ou presque ) http://www.excelabo.net/
Conseillé :
http://dj.joss.free.fr/netiquet.htm
(charte, nétiquette, conseils, abréviations, souriettes...)
http://www.excelabo.net/mpfe/connexion.php
(connexion, conseils...)

"Philippe Bérard" a écrit dans le message de news:
dojljs$gtu$
Bonjour à Tous,

Je souhaite avec la macro suivante mettre à jour des colonnes (en
l'occurrence les colonnes 12 et 25) en fonction de ce qui aura été saisi
dans les colonnes 5 & 7.

Je souhaite cependant intégrer un garde-fou sous forme de Msgbox pour
confirmer l'écrasement des données éventuellement présentes dans les
colonne 12 & 25, qui n'apparaîtrait que lorsque les cellules concernées ne
sont pas vides.

Ce bout de code ne fonctionne que partiellement dans la mesure où lorsque
que les cellules destinataires :
- sont vides, j'ai quand même le msgbox (1 seule fois) !
- sont remplies, j'ai deux fois le msgbox !

L'un d'entre pourrait-il m'apporter son aide dans la finalisation de cette
macro événementielle ?

Merci d'avance et joyeux Noël à tous.

Philippe


Private Sub Worksheet_Change(ByVal Target As Range)

Select Case Target.Column

Case 5
If Target.Value <> "" Or Target.Value <> "?" Then
If Cells(Target.Row, 12) <> "" Then Call msgAlerte
If msgAlerte = 6 Then Cells(Target.Row, 12) = Target.Value

End If
Case 7
If Target.Value <> "" Or Target.Value <> "?" Then
If Cells(Target.Row, 12) <> "" Then Call msgAlerte
If msgAlerte = 6 Then Cells(Target.Row, 25) = Target.Value
End If
End Select
End Sub

Function msgAlerte()
msgAlerte = MsgBox("Ecrasement de la Valeur ?", vbYesNo)
End Function


Avatar
Philippe Bérard
Bonjour,

Et encore merci pour pour ton aide.

Et fêtes de fin d'année à tous.

Philippe

Bonjour,
Comme ceci peut-être ?
J'ai un peu 'optimisé' afin de ne pas avoir le même code en double
suivant le cas 5 ou 7.
Le case else est là pour empêcher de reposer la question quand la
cellule est changée
Il était ausi possible de désactiver l'évènement puis de le réactiver
après écriture de
la cellule ( Application.EnableEvents )


Private Sub Worksheet_Change(ByVal Target As Range)
Dim col As Integer
Dim suite As Integer

Select Case Target.Column
Case 5
col = 12
Case 7
col = 25
Case Else
Exit Sub
End Select

If Target.Value <> "" Or Target.Value <> "?" Then
If Cells(Target.Row, col) <> "" Then
suite = msgAlerte
If suite = 6 Then Cells(Target.Row, col) = Target.Value
Else
Cells(Target.Row, col) = Target.Value
End If
End If
End Sub

Function msgAlerte()
msgAlerte = MsgBox("Ecrasement de la Valeur ?", vbYesNo)
End Function