Habiller une cellule par un texte d'aide à la saisie ?

Bonjour à tous,

Je voudrais savoir s'il est possible qu'une cellule contiennent un texte qui permette de guider l'utilisateur. Dans mon cas, j'aimerais qu'une cellule affiche "à remplir" si sa valeur est à 0 ou si elle est vide.

J'ai réussi si la cellule est égale à 0 mais je n'arrive pas à le faire si elle ne contient rien.

Je suis allé dans le format de la cellule et dans personnalisée j'ai mis :

[=0]"à remplir";Standard
Cela marche très bien si ma cellule est égale à 0, mais comment je fais si je veux que cela s'applique si la cellule ne contient rien donc si elle est vide ?
D'avance je vous remercie pour votre aide.

Maxime.

Bonjour,

De ce que j'ai lu il n'existe pas de solution pour des cellules vides. Pourquoi ne pas se servir des MEFC ou des validations des données pour contourner ce problème ? Après il est toujours possible de le gérer dans une procédure événementielles sur ta feuille mais il nous faudrait plus d'informations sur la plage, le type de valeur, etc ...

Cdlt,

Bonjour et merci de votre réponse. Alors dans MEFC j'ai seulement réussi à mettre un code couleur si la cellule est égale à 0 et si elle est vide mais je n'ai pas pu dire à la cellule d'écrire "à remplir" si elle ne contient rien ou si elle est égale à 0 (comme dans le format des cellules si elle est égale à 0). Et dans validation des données le faire par une formule ? Par contre j'ai mis dans validation des données un filtre pour que l'utilisateur puisse écrire que des chiffres de 0 à 5000 avec un message d'erreur si on rentre autre chose.

Les valeurs concernées sont uniquement des nombres entiers pour gérer des quantités (type 1,2,3,4...). L'idée était d'inciter l'utilisateur à remplir la case vide. Merci

Bonjour,

Comme expliqué on ne peut rien écrire en formatant une cellule vide car elle n'a pas de contenu.

Je pensais à quelque chose comme ça. En B2 vous ne pouvez rien renseigné, si c'est vide ou une valeur 0 alors on ne peut pas renseigner la cellule en ayant un message d'erreur personnalisé.
Ca ne couvre pas le cas où l'utilisateur fait Echap mais c'est une bonne base pour contrôler les valeurs renseignées.

Cdlt,

6classeur1.xlsx (8.97 Ko)

D'accord, je comprends. Oui ce que vous me dites c'est exactement ce que j'avais fait avec une MEFC et une validation des données. J'avais même rajouté un texte de saisie pour aider utilisateur. Mais je me posais la question si on ne pouvait pas formater directement la cellule afin qu'elle affiche du texte plutôt que de devoir tout contourner...

Je me demande si je laisse ma cellule formatée comme je vous ai indiqué dans mon premier message comme cela :

[=0]"à remplir";Standard

Est ce que je peux créer une vba qui irait chercher automatiquement dans une plage de cellules donnée si elles sont vides et leur mettre automatiquement la valeur 0 ? En fait, mon problème est que si quelqu'un fait "supr" dans la cellule, la cellule sera de nouveau vide (ou bien colorée avec la MEFC). Et je me dis que si un vba remet la cellule à 0, le format s'appliquera et la cellule affichera "à remplir" non ?

Bonjour,

Un exemple par VBA sur la plage A1:B15. A chaque modification, la macro vérifie le contenu renseigné et indique a remplir si la valeur est égale a 0 ou rien, même en cas de suppression. Il faut à minima renseigner initialement A remplir sur les cellules d'intérêt car je ne repasse pas sur toutes les cellules de la plage à chaque fois et me limiter à la cellule modifiée pour que ne pas ralentir trop le code. C'est cependant possible en mettant le code en Worksheet_Activate et spécifiant la Range d'intérêt :

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, [A1:B15]) Is Nothing Then
    Application.EnableEvents = False
    If Target.Value = 0 Or Target.Value = "" Then Target.Value = "A remplir"
    Application.EnableEvents = True
End If
End Sub

Cdlt,

10classeur1.xlsm (14.53 Ko)

Super c'est exactement ce que je voulais !!!!! Par contre dans mon cas j'ai crée une plage de cellule qui s'appelle "quantité". On est d'accord qu'il suffit que je mette ce code là pour qu'il s'applique :

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, [quantité]) Is Nothing Then
    Application.EnableEvents = False
    If Target.Value = 0 Or Target.Value = "" Then Target.Value = "A remplir"
    Application.EnableEvents = True
End If
End Sub

Merci encore.

Bonjour,

Dans ce cas oui. J'ai rajouté un contrôle sur le fait du bon renseignement numérique de valeurs entre 1 et 50 000 selon les consignes avec l'apparition d'un message bo, à placer dans le code de la feuille d'intérêt :

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, [QUANTITE]) Is Nothing Then
    Application.EnableEvents = False
    If Target.Value <= 0 Or Target.Value = "" Or Target.Value > 50000 Then
        MsgBox "Merci de renseigner une valeur entre 1 et 50 000", vbCritical
        Target.Value = "A remplir"
    End If
    Application.EnableEvents = True
End If
End Sub

Merci de passer votre sujet en résolu si c'est le cas.

Cdlt,

Je viens de le rentrer et j'ai un message " erreur de compilation : nom ambigu detecté : Worksheet_Change"

Bonjour,

Pas possible. A quoi ressemble le code de votre feuille ? Il doit y avoir une erreur dans votre code.

Ci-joint un exemple.

Cdlt,

11classeur1.xlsm (15.11 Ko)
Private Sub Worksheet_Change(ByVal Target As Range)

    If Not Application.Intersect(Target, Range("B5:B300")) Is Nothing Then

    Rep = MsgBox("Attention : après chaque modification d'article, pensez à vérifier la cohérence de la configuration." & Chr(13) & Chr(10) & Chr(13) & Chr(10) & "Exemple : support mural adapté à l'écran etc.", vbOKOnly _
    + vbExclamation, "Modification prise en compte")
    Application.EnableEvents = False

    End If
    End Sub

    Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, [QUANTITE2]) Is Nothing Then
    Application.EnableEvents = False
    If Target.Value = 0 Or Target.Value = "" Then Target.Value = "A remplir"
    Application.EnableEvents = True
End If
End Sub

Le premier correspond à autre change dans cette feuille. Par contre sur mon fichier ca ne marche pas :(

Il doit y avoir un conflit avec d'autres codes c'est possible?

Bonjour,

Vous ne pouvez avoir qu'une procédure événementielle par type d'évènement donc :

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("B5:B300")) Is Nothing Then
    Rep = MsgBox("Attention : après chaque modification d'article, pensez à vérifier la cohérence de la configuration." & Chr(13) & Chr(10) & Chr(13) & Chr(10) & "Exemple : support mural adapté à l'écran etc.", vbOKOnly _
    + vbExclamation, "Modification prise en compte")
    Application.EnableEvents = False
ElseIf Not Application.Intersect(Target, [quantité]) Is Nothing Then
    Application.EnableEvents = False
    If Target.Value <= 0 Or Target.Value = "" Or Target.Value > 50000 Then
    MsgBox "Merci de renseigner une valeur entre 1 et 50 000", vbCritical
    Target.Value = "A remplir"
    Application.EnableEvents = True
End If
End Sub

Merci de fournir tous les éléments s'il y en a d'autres voir un fichier représentatif avec le résultat attendu. Travailler à l'aveugle n'est pas aisé.

Cdlt,

Bonsoir,

Merci de tout le temps que vous prenez. Si je comprends bien je ne peux mettre qu'une procédure événementielle. Mais du coup, ce sont deux événements à part. La première procédure fait quelque chose sur des cellules différentes de ma plage "quantité2". J'aimerais que les 2 procédures se fassent séparement. En remettant le code comme vous me l'avez montré, seulement la première procédure s’exécute bien. Mais pour la procédure qui consiste à mettre "à remplir" dans les cellulles vides ou égales à 0 de la plage quantité2, il ne se passe rien :(

J'ai bien vu votre fichier et ça marche super bien. Je dois avoir quelque chose qui bloque mais où...

Que puis-je vous fournir pour vous aider à voir où est mon erreur ? C'est un fichier pro je ne peux pas le joindre ici... Encore merci pour votre aide

Bonjour,

Au vu du fichier transmis ci-joint le code qui va bien. Comme les plages ne sont pas contiguës ou superposées il suffit de mettre les deux conditions les unes à la suite des autres et réaliser l'action voulue en fonction du cas :

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("B5:B300")) Is Nothing Then
Application.EnableEvents = False
    Rep = MsgBox("Attention : après chaque modification d'article, pensez à vérifier la cohérence de la configuration." & Chr(13) & Chr(10) & Chr(13) & Chr(10) & "Exemple : support mural adapté à l'écran etc.", vbOKOnly _
    + vbExclamation, "Modification prise en compte")
Application.EnableEvents = True
End If
If Not Application.Intersect(Target, Range("H5:H15")) Is Nothing Then
Application.EnableEvents = False
    If Target.Value <= 0 Or Target.Value = "" Or Target.Value > 50000 Then
        MsgBox "Merci de renseigner une valeur entre 1 et 50 000", vbCritical
        Target.Value = "A remplir"
    End If
Application.EnableEvents = True
End If
End Sub

Cdlt,

Merci pour tout !!!!

Rechercher des sujets similaires à "habiller texte aide saisie"