Message d'alerte

Bonjour, je souhaite faire apparaître un message (ERREUR) si je me sert d'une cellule et qu'une autre est vide. je vous joins un fichier pour que ce soit plus facile.

Merci d'avance pour l'aide apportée

Bonjour,

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim k%
    If Target.Row < 3 Or Target.Count > 1 Then Exit Sub
    k = Target.Column
    Application.EnableEvents = False
    Select Case k
        Case 1
            If Target = "" Then
                If Target.Offset(, 2) <> "" Then Target.Offset(, 2).ClearContents
            End If
        Case 3
            If Target <> "" Then
                If Target.Offset(, -2) = "" Then
                    MsgBox "Saisie erronée !", vbExclamation, "Nom absent"
                    Target.ClearContents
                End If
            End If
    End Select
    Application.EnableEvents = True
End Sub

A placer dans le module de la feuille concernée.

Cordialement.

Bonsoir , désolé j'ai inséré dans le module de la feuille mais ça ne fonctionne pas, quand j'insère la macro elle se mets en rouge et affiche erreur de syntaxe. De plus je pensais avoir quelque chose de plus simple je suis encore un peu novice avec Excel je pensais qu'une formule aurai suffit et bien entendu mon dossier est plus important que ce que j'ai déjà joins. Je vous joins donc un exemplaire d'une feuille du dossier qui en compte 11 de même type.

voilà espérant que vous me trouverez une solution


Engels a écrit :

Bonsoir , désolé j'ai inséré dans le module de la feuille mais ça ne fonctionne pas, quand j'insère la macro elle se mets en rouge et affiche erreur de syntaxe. De plus je pensais avoir quelque chose de plus simple je suis encore un peu novice avec Excel je pensais qu'une formule aurai suffit et bien entendu mon dossier est plus important que ce que j'ai déjà joins. Je vous joins donc un exemplaire d'une feuille du dossier qui en compte 11 de même type.

voilà espérant que vous me trouverez une solution

38mes-alerte-2.xlsx (15.66 Ko)

Quelque chose de plus simple : tu pouvais mettre une MFC pour t'alerter... !

Dès lors que tu parles de message, pour qu'un message s'affiche lors d'un évènement, cela implique que l'on déclenche une action automatique à la survenance dudit évènement.

Par ailleurs, lorsqu'on pose une question, il est préférable de poser la vraie question pour laquelle on attend une réponse ! Ou le cas échéant savoir utiliser la réponse ou être capable de l'adapter. Les intervenants ne sont pas à ta disposition !

Réglons le premier problème : coller une procédure dans un module n'est pourtant pas sorcier !

Et je te signale d'autre part que ta question reformulée est manifestement incomplète.

edit : je devais commencer à fatiguer hier... mis un autre fichier ! Voici le bon !

Bonjour Engels, toutes et tous,

Bonjour MFerrand,

je pensais avoir quelque chose de plus simple je suis encore un peu novice avec Excel

Voici une proposition avec liste apparente si il y a un Nom dans la colonne "B", sinon police MFC couleur sur couleur de fond.

C'est simple.

Cordialement.

bonjour

normalement

25engel.xlsx (11.41 Ko)

cordialement

Bonjour tulipe_4,

Sans vouloir te manquer de respect, si c'était aussi simple , mais je pense que tu n'as pas vu le 2ème et véritable fichier qui ne ressemble plus du tout au 1er, ce qui rend les choses plus compliquées.

Cordialement.

Bonjour et désolé pour le dérangement mais c'est également ma première question sur ce site, je comprend que pour vous c'est simple mais j'ai essayé avec les MFC et je n'avais pas trouvé.

le dossier : engel_Mes d'alerte pour engel de MFerrand correspond à ce que je souhaite mais il est vrai que je suis incapable de modifier la macro pour la développer à l'ensemble de mes feuilles (6 à 17 incluse).

je vous envois le dossier complet si ça peux vous aider et éviter que je revienne vers vous pour une nouvelle amélioration.

Ps pour coller la macro j'ouvre le développeur, l'onglet visual basic en haut a gauche, je saisie le module de la feuille et je colle

c'est bon?

Très bien ! Mais comme je disais les infos sont incomplètes et en tout état de cause doivent être confirmées !

Quelles sont les feuilles concernées ? Celles nommées positions.... ? Et les colonnes concernées ?

Cordialement.

Bonjour, les feuilles concernées sont les feuilles marquées "position" il y en à 11 et les colonnes dans chacune sont H à S par rapport à la colonne B (Nom Prénom) sauf pour la dernière feuille Position ADC les colonnes sont I à T par rapport à la colonne B. Les lignes concernées sont de 4 à 45 inclus pour toutes les feuilles.

merci bien

Bonjour,

Procédure adaptée à la nouvelle configuration :

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    Dim k%, a%
    If Sh.Name Like "position*" Then
        If Target.Row < 4 Or Target.Row > 45 Or Target.Count > 1 Then Exit Sub
        If Sh.Name = "positions ADC" Then a = 1
        k = Target.Column
        Application.EnableEvents = False
        Select Case k
            Case 2
                If Target = "" Then
                    Target.Offset(, 6 + a).Resize(, 12).ClearContents
                End If
            Case 8 + a To 19 + a
                If Target <> "" Then
                    If Target.Offset(, 2 - k) = "" Then
                        MsgBox "Saisie erronée !", vbExclamation, "Nom absent"
                        Target.ClearContents
                    End If
                End If
        End Select
        Application.EnableEvents = True
    End If
End Sub

Elle se place désormais dans le module classeur (ThisWorkbook) puisque concernant plusieurs feuilles. On teste le nom de la feuille pour donner cours à la procédure (contenant "position"). Si le nom correspond, on s'assure que la modification se situe dans la plage de lignes 4-45 et n'affecte qu'une cellule.

On intervient selon la colonne concernée : colonnes 8 à 19, si rien en colonne 2, message d'alerte et effacement de la saisie. Une variable a (initialisée à 1 pour la feuille ADC et laissée à 0 dans les autres cas) permet de tenir compte du décalage de colonnes pour cette feuille. Si modif. colonne 2, si effacée, effacement des colonnes 8 à 19...

Cordialement.

Bonjour, super c'est ce que je voulais. Juste un petit problème si je copie les cellules avec la petite croix dans le bas de la cellule et que je dépasse la dernière ligne contenant un nom je n'ai pas de message. J'ai fait un exemple dans la feuille "position 2-4" à la ligne 13 je n'ai pas de nom et le "X" reste apparent.

si cette amélioration est possible ce serais aux petits oignons

Si je la revalide : message et elle se supprime. C'est qu'elle devait préexister !

La macro n'intervient qu'au changement. S'il y a une croix en erreur avant que la macro soit active, elle n'intervient pas tant que l'on ne modifie pas.

Cordialement.

Bonjour,

Je pense qu'on ne sait pas compris, dans un tableau Excel on peut copié une cellule si on la saisie en bas a droite et l'on tire vers le bas par exemple. C'est dans cette situation que la macro ne fonctionne pas en la copiant en série, c'est une manipulation que je fait pour aller plus vite dans la saisie (une croix "X" dans le haut de la feuille et je la descend jusqu'en bas de la feuille à la limite de ligne du dernier nom).

J'ai remarquer que si une croix existe déjà elle ne sera pas supprimée et donc prise en compte, mais cette situation ne pourra pas exister dans la façon que j'utilise le dossier.

cordialement

Essaie cette version :

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    Dim k%, a%, c As Range
    If Sh.Name Like "position*" Then
        If Sh.Name = "positions ADC" Then a = 1
        Application.EnableEvents = False
        For Each c In Target.Cells
            If c.Row > 3 And c.Row < 46 Then
                k = c.Column
                Select Case k
                    Case 2
                        If c.Value = "" Then
                            c.Offset(, 6 + a).Resize(, 12).ClearContents
                        End If
                    Case 8 + a To 19 + a
                        If c.Value <> "" Then
                            If c.Offset(, 2 - k) = "" Then
                                MsgBox "Saisie erronée !", vbExclamation, "Nom absent"
                                c.ClearContents
                            End If
                        End If
                End Select
            End If
        Next c
        Application.EnableEvents = True
    End If
End Sub

C'est toi qui voulais quelque chose de simple... !

Bonsoir c'est mon problème je ne rend pas bien compte de la difficulté et quand je suis dedans parfois c'est dur! Quoiqu'il en soit, ça fonctionne, c'est juste ce qu'il me faut.

Donc un grand merci

Juste une petite chose j'ai sélectionné la macro et je l'ai collée et comme pour l'autre elle se mets en rouge. Pour que ça fonctionne je l'ai recopier, pourquoi elles se mettent en rouge et que j'ai une erreur de compilation?

MERCI encore

Si la procédure est complète, aucune raison qu'elle se mette en rouge...

Rechercher des sujets similaires à "message alerte"