Déclencher une macro suite à validation d'une cellule

Bonjour,

Afin de peaufiner mon beau tableau Excel, je suis à la recherche d'un code VB afin d'executer ceci :

Si dans les cellules G7, G10, G13, G16, G19, G22, G25, et G28 j'inscrit le mot "Vacant", et uniquement ce mot là, je souhaiterai après validation, qu'il y ait un MsgBox du style "Merci de valider la TOM déjà encaissée", et aller directement à la cellule D64.

Si ça peut faire gagner du temps, sur une autre feuille j'ai déjà un code du même style que j'avais pompé sur un autre classeur et arrangé à ma sauce ; le voici :

Private Sub Worksheet_Change(ByVal Target As Range)

Dim Message As String, Valeur As Long

With Target

If Not .Address(False, False) = "K64" Then Exit Sub

Valeur = .Value

Message = "Valider le rajout de " & Valeur & " m3 au cubage annuel"

If MsgBox(Message, vbYesNo) = vbNo Then Exit Sub

Range("H49").Value = Range("H49").Value + Valeur

Application.EnableEvents = False

.Value = Empty

Application.EnableEvents = True

Call Macro998

End With

End Sub

En espérant avoir été assez clair dans mes explications, je vous remercie par avance pour votre aide précieuse.

David

Hello !

J'ai avançé un peu sur la question, .......... non pas sans galères, dont une en particulier

N'arrivant pas, ou plutot ne sachant pas lancer mon MsgBox à partir du mt "Vacant", j'ai rajouté une colonne avec une formule classique "si" (=SI(H7="Vacant";1;SI(H7="";1;0))

Jusqu'à là tout va bien sauf la cellule s'incrémentant du "1" ou du "2" n'étant pas validée puisqu'elle se remplie seule, ça ne lance toujours pas mon MsgBox.

Par contre manuellement, ça fonctionne.

Quelqu'un aurait-il une idée please ?

Ci-dessous le code de ma feuille dans son intégralité en bleu, et la partie me posant problème en rouge.

Merci.

@ +

Private Sub Worksheet_Change(ByVal Target As Range)

Dim Message As String, Valeur As Long

With Target

If .Address(False, False) = "K64" Then

Valeur = .Value

Message = "Valider le rajout de " & Valeur & " m3 au cubage annuel"

If MsgBox(Message, vbYesNo) = vbNo Then Exit Sub

Range("H49").Value = Range("H49").Value + Valeur

Application.EnableEvents = False

.Value = Empty

Application.EnableEvents = True

Call Macro998

ElseIf .Address(False, False) = "D64" Then

Valeur = .Value

If MsgBox("Valider le règlement de " & Valeur & " €uros à la TOM annuelle", vbQuestion + vbYesNo) <> vbYes Then Exit Sub

Range("F40").Value = Range("F40").Value + Valeur

Application.EnableEvents = False

.Value = Empty

Application.EnableEvents = True

'Call Macro995

ElseIf Not Application.Intersect(Target, Range("g4:g28")) Is Nothing Then

If Target.Offset(0) = 1 Then

MsgBox "Merci de renseigner la TOM déjà encaissée", , " ATTENTION"

Call Macro996

End If

End If

End With

Bonjour

Au lieu de balancer des codes, il serait souhaitable d'avoir une copie anonymisée de ton fichier en y expliquant ce que tu as et ce que tu veux avoir

Pas tout compris, je dois déranger.

Désolé.

Je vais essayé de trouver mon interrogation sur un autre site alors

Cordialement.

Voici un fichier épuré ; du moins anonymisé comme dirait Banzaï64.

Il suffisait d'expliquer calmement car la dernière fois quelques lignes de code avaient suffit !

De plus lorsque c'est un fichier assez lourd, avec bcp d'onglets de code et de macros, c'est assez galère à anonymiser !

Mais bon !

En espérant que ça aille cette fois ci !

Merci.

@ +

47david.zip (16.73 Ko)

Voici un fichier épuré ; du moins anonymisé comme dirait Banzaï64.

Il suffisait d'expliquer calmement car la dernière fois quelques lignes de code avaient suffit !

De plus lorsque c'est un fichier assez lourd, avec bcp d'onglets de code et de macros, c'est assez galère à anonymiser !

Mais bon !

En espérant que ça aille cette fois ci !

Merci.

@ +


Je vais y arriver, il ne faut jamais désespérer !

J'avais supprimé des lignes sur l'autre fichier, ça ne collait donc plus !

Voici le bon.

Désolé

Bonjour

dasaquit a écrit :

Pas tout compris, je dois déranger.

Désolé.

Je vais essayé de trouver mon interrogation sur un autre site alors

Cordialement.

Et alors tu as trouvé ?

je ne sais pas si le fait de demander un fichier gène

Mais bon j'apprends tous les jours

La colonne TOM c'est quelle colonne ?

J'ai pris la colonne I dans la macro (tu changeras si ce n'est pas ça

La vérification ne se fera que si la cellule est effacée ou qu'elle contienne "Vacant'

Il faut éviter les cellules fusionnées

Le code

Private Sub Worksheet_Change(ByVal Target As Range)

Dim Message As String, Valeur As Long

  Application.ScreenUpdating = False
  If Not Intersect(Range("K64"), Target) Is Nothing And Target.Count = 1 Then
    Valeur = Target.Value
    Message = "Valider le rajout de " & Valeur & " m3 au cubage annuel"
    If MsgBox(Message, vbYesNo) = vbNo Then Exit Sub
    Range("H49").Value = Range("H49").Value + Valeur
    Application.EnableEvents = False
    Target.Value = Empty
    Application.EnableEvents = True
    'Call Macro998
  ElseIf Not Intersect(Range("D64"), Target) Is Nothing And Target.Count = 1 Then
    Valeur = Target.Value
    If MsgBox("Valider le règlement de " & Valeur & " €uros à la TOM annuelle", vbQuestion + vbYesNo) <> vbYes Then Exit Sub
    Range("F40").Value = Range("F40").Value + Valeur
    Application.EnableEvents = False
    Target.Value = Empty
    Application.EnableEvents = True
    'Call Macro995
  ElseIf Not Intersect(Range("G4,G7,G10,G13,G16,G19,G22,G25"), Target) Is Nothing Then
    If UCase(Target.Cells(1, 1)) = "VACANT" Or Target.Cells(1, 1) = "" Then
      If Range("I" & Target.Row) = 0 Then
        MsgBox "Merci de renseigner la TOM déjà encaissée", , "                     ATTENTION"
      End If
    End If
    'Call Macro996
  End If

End Sub

Salut,

Je te remercie je vais essayer la solution que tu me donnes et te tiendrai au courant.

Dans tous les cas c'est sympa de ta part.

J'étais en train de créer un fichier plus simple ........... surtout à expliquer !

Il n'y a pas de colonne TOM en fait, mais elle se trouve dans une cellule que j'incrémente par la suite à chaque départ de locataire pour ne pas la faire payer à ceux restant !

Vraiment pas facile à expliquer ; dommage que l'on habite pas à côté

A plus tard.

Merci encore.

David


C'est super, ça fait exactement ce que j'attendais.

En deux jours tu m'en sauves deux, c'est super sympa.

Un grand merci.

Bonne soirée.

@ très vite.

Peux tu juste m'expliquer cette ligne en bas du code s'il te plait ?

If Range("I" & Target.Row) = 0 Then

Quelle est l'action ?

Merci

Bonjour

If Range("I" & Target.Row) = 0 Then

Il faut lire les réponses que je donne

Banzai64 a écrit :

La colonne TOM c'est quelle colonne ?

J'ai pris la colonne I dans la macro (tu changeras si ce n'est pas ça

La vérification ne se fera que si la cellule est effacée ou qu'elle contienne "Vacant'

Dans ta macro tu avais marqué

If Target.Offset(0) = 0 Then

mais à cause des cellules fusionnées on ne peut pas utiliser une syntaxe identique

J'ai bien lu je te rassure, mais je suis un autodacte complètement novice en VB qui essait de comprendre ce qu'on lui donne afin de reproduire et adapter.

Je ne comprend toujours pas pourquoi la colonne "I", j'suis désolé !

De plus, je viens de me rendrecomptes que le code ne fonctionne pas sur certaine lignes une fois que je recolle le code dans mon vrai classeur ; peut être le "I" ???

Quelle est la traduction de cette ligne ; tel est ma question ?

Merci.

PS : tout à l'heure désolé pour le fichier, mais j'étais au taf

Bonjour

On teste si la cellule de la colonne I, ligne de la cellule modifiée est égale à 0

C'est un test

mais c'est bien toi qui a marqué

    If Target.Offset(0) = 0 Then

c'est la même chose, moi je précise la colonne c'est tout

Je ne sais quoi dire d'autre

Je viens de comprendre .......... lol

En fait la colonne "I" n'a rien à voir avec le résultat que je recherche ; ce que je veux en fait est que lorsqu'il y a en "G7,G10,G13:H13,G16,G19,G22,G25,G28" le mot "vacant" ou "" que ça me déclenche une macro ; uniquement sur ces cellules !

Ensuite j'ai un autre code pour incrémenter une autre cellule quelque part ailleurs !

Effectivement je t'ai induit en erreur avec la ligne que j'ai tapé ; à force d'essayer, de copier/coller, etc.... je n'ai pas fait attention !

Si tu as un mail perso je peux t'envoyer le vrai fichier, je ne voulais pas qu'il soit en ligne c'est tout !

Merci encore........... pour ta patience.

David


En supprimant la cette ligne tout fonctionne............ YES

Je te remercie vraiment sincèrement pour ton aide.

Bonne soirée.

Bye

Rechercher des sujets similaires à "declencher macro suite validation"