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
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 tulipe_4,
Sans vouloir te manquer de respect, si c'était aussi simple
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...