[Déplacé VB6 --> VBA] mise en forme conditionnelle

inkballs Messages postés 11 Date d'inscription lundi 7 septembre 2009 Statut Membre Dernière intervention 11 janvier 2010 - 8 janv. 2010 à 13:32
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 11 janv. 2010 à 22:38
Bonjour,
Je souhaiterai,avec la mise en forme conditionnelle ne pas pouvoir utiliser dans une cellule excel,le caractere "espace" de la barre d'espace.Celui-ci me donne une indication fausse d'information.
Mais si j'utilise"ESTVIDE(D9),ou ESTTEXTE(D9)ne me convient pas.
J'opterai plus vers une formule du style:si(cellule contient espace)elle passe au rouge.J'ai un peu de mal à mettre en place le code.
Merci de votre aide.
INKBALLS

11 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
9 janv. 2010 à 01:00
Salut
"Je souhaiterai,avec la mise en forme conditionnelle ne pas pouvoir utiliser dans une cellule excel,le caractere "espace"" : ça ne veut rien dire !
"Celui-ci me donne une indication fausse d'information" : ça nous aide vachement à comprendre ton problème !

Simplement, dans la mise en forme conditionnelle :
- Si la valeur de la cellule est
- égale à
- le caractère "espace"
...
je ne vois pas comment ça pourrait te donner "une indication fausse d'information"

Soit ta cellule ne contient qu'un seul espace : alors animation conditionnelle
Soit ta cellule contient autre chose : alors que faire ? que contient-elle ? que faudrait-il que la cellule contienne ? quel format faudrait-il adopter ?

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
10 janv. 2010 à 11:26
Bonjour,

Je pense que inkballs ne connait pas le menu FORMAT>MISE EN FORME CONDITIONNELLE dans Excel, et donc essaye en vain de le faire à partir d'une formule...

Donc regarder ce menu...

Amicalement,
Us.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
10 janv. 2010 à 12:05
Bonjour,

je lis ceci :
Je souhaiterai,avec la mise en forme conditionnelle ne pas pouvoir utiliser dans une cellule excel,le caractere "espace" de la barre d'espace.Celui-ci me donne une indication fausse d'information.


Je croiuis que le mieux ne serait pas de mettre en forme, mais de ne pas autoriser, tout simplement.

Alors :

1) on peut "forcer la main" une fois la saisie faite, en revenant sur la cellule (avec ou sans message), ainsi, par exemple :
Private zouzou As Range

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If zouzou Is Nothing Then Set zouzou = Target: Exit Sub
  If InStr(zouzou.Text, " ") > 0 Then
    zouzou.Interior.Color = vbRed
    zouzou.Activate
  Else
    zouzou.Interior.Color = vbWhite
    Set zouzou = Target
  End If
End Sub


Ne pas oublier alors de redéfinir également les bordures
et on peut bien évidemment y adjoindre à son gré une expression conditionnelle si l'on ne veut une telle vérification que pour une plage de cellules

2) j'ai presque terminé de peaufiner un outil permettant de contrôler (impossible avec Excel dans l'état actuel dses choses) les saisies dans les cellules elles-mêmes, lors de la frappe. J'y reviendrai donc plus tard, car cette métrhode me parait bien plus ergonomique (l'espace ne pourrait alors être utilisé penddant la saisie elle-même)

____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
0
inkballs Messages postés 11 Date d'inscription lundi 7 septembre 2009 Statut Membre Dernière intervention 11 janvier 2010
10 janv. 2010 à 18:20
Bonjour,
Merci de vos réponses,et commentaires mais je n'arrive pas à resoudre mon problème.Je reformule ma demande afin quelle soit plus comprehensive.je souhaiterai une formule avec "si".
La seule ligne de code que j'ai trouvé et qui se rapproche de ce que je voudrai.

"If Cellule.Value Chr(32) Then Cellule.Value Empty"

Le test:"si cellule contient(caractère ascii"32";alors la cellule reste vide.
Mais à chaque fois que j'essai une combinaison ça ne passe pas(#ERREUR#).
Merci de votre aide
INKBALLS.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
10 janv. 2010 à 19:32
Ah !
1) et as-tu essayé mon code ? Avec quel résultat ?
2) pour que cellule.value soit = chr(32) , il faut qu'elle ne conhtienhne qu'un espace (et rien d'autre) !.. et instr ou like s'imposent alors dans le cas contraire !
3) pourquoi mettre ta cellule à vide et forcer à re-saisir (peu gentil pour un utilisateur) ? Tu peux obliger à corriger uniquement (voir mon code) ...

____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
10 janv. 2010 à 23:09
Pour moi ce qui ne passe pas, c'est ce que veut vraiment inkballs...

ucfoutu, moi je lis aussi ceci :

J'opterai plus vers une formule du style:si(cellule contient espace)elle passe au rouge.


Le mieux inkballs, c'est d'expliquer simplement et clairement ce que tu veux. Décris un exemple basique et du résultat que tu attends... Évites les phrases à tournures négatives... voir incompréhensibles. Ensuite, je pense que les réponses seront simples et limpides et tu auras ce que tu attends...

Amicalement,
Us.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
11 janv. 2010 à 00:12
Ben...
On va lui faire la totale, alors :

Dans le module de sa feuille :
Private colonne_a_proteger As Integer, couac As Boolean
Private Sub Worksheet_Activate()
  colonne_a_proteger = 3 ' <<<<<<<<=========  ici le numero de colonne à protéger
  With Columns(colonne_a_proteger)
    .FormatConditions.Add Type:=xlTextString, String:=" ", TextOperator:=xlContains
    .FormatConditions(.FormatConditions.Count).SetFirstPriority
    With .FormatConditions(1).Font
        .Color = vbWhite '-16383844
        .TintAndShade = 0
    End With
    With .FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .Color = vbRed '13551615
        .TintAndShade = 0
    End With
    .FormatConditions(1).StopIfTrue = True
  End With
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Not couac Then Worksheet_Activate: couac = True
  Static zouzou As Range
  If zouzou Is Nothing Then Set zouzou = Target: Exit Sub
  If InStr(zouzou.Text, " ") > 0 And zouzou.Column = colonne_a_proteger Then
    zouzou.Activate
    For i = 1 To 4
      Beep
      deb = Timer
      Do While Timer < deb + 0.1
        DoEvents
      Loop
    Next
  Else
    Set zouzou = Target
  End If
End Sub


Voilà qui ;
1) assure la mise en forme conditionnelle de la colonne 3
2) de ce fait : les cellules de la colonne 3 contenant un espace seront en blanc sur fond rouge
3) l'utilisateur sera forcé de revenir sur une saisie erronée (retour à la cellule tant que pas bon) + série de beeps.

Voilà : la totale. Bien que, me lire plus haut, je préfère nettement le contrôle de la saisie pendant la frappe elle-même (empêchement de l'espace pendant la frappe)===>> je sais déjà faire (comme dit plus haut) mais me manque à peaufiner encore un peu (car je traite plusieurs types de saisie, dont les dates sous différents formats, les heures, les nombres, etc...)



____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
0
inkballs Messages postés 11 Date d'inscription lundi 7 septembre 2009 Statut Membre Dernière intervention 11 janvier 2010
11 janv. 2010 à 18:55
Bonsoir,
Merci de votre soutient à tous;U30,JACK,UCFOUTU.Je doit rester le plus simple possible,est ne pas passer par le langage "VBA" si possible.
Donc,en utilisant la fonction"si".
J'ai une macro,mais qui ne me convient pas;sauf une partie du code.
-----------------------------------------------------------------
Sub SupprimeEspace()
Dim Cellule As Range
For Each Cellule In Range("c30")
If Cellule.Value Chr(32) Then Cellule.Value "" 'Partie utile'
Next Cellule
End Sub
---------------------------------------------------------------
La fonction si devrait ressembler à:
SI(C30"chr(32) ";"")
mais je n'arrive pas à la faire passer(erreur#nom#).
Pourquoi passer par le code "ascii";un espace,est reconnu comme du texte sous excel.
J'espère avoir éte assez clair.
Merci à vous.
INKBALLS.
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
11 janv. 2010 à 22:30
Bou...

Donc, sous tableur tu dois écrire:
Si(C30" ";"";C30)

mais, franchement, personne ne comprend le but d'une telle formule... Que tu veux faire ?

Amicalement,
Us.
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
11 janv. 2010 à 22:31
euh... lire : Que veux-tu faire ?

dsl,
Us.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
11 janv. 2010 à 22:38
Ecoute,
1) si tu veux savoir si une cellule contient un caractère espace, voilà un exemple qui te renverra la position (donc un entier) du premier espace trouvé dans la cellule A2. Si cet entier est > 0, c'est qu'il y a un espace. Te renverra par contre une erreur si pas d'espace

= CHERCHE(" ";A2;1)

CHERCHE est donc à mettre au sein d'une F0ONCTION SI

2) cette fonction, comme toutes les fonctions d'Excel, ne peut à la fois se trouver dans une cellule et se référer au contenu de cette cellule (la fonction exemple plus haut ne peut être mise dans la cellule A2). Sans l'observation de cette règle ===>> référence circulaire assurée !

3) je veux bien que tu veuilles "faire simple" et avec uniquement des formules Excel, mais là, vois-tu... ===>> tu vas sacrément la compliquer, ton "affaire"...
Nous sommes pare ailleurs dans la section VBA (et les formules en cellules depuis Excel ne sont pas du VBA).
____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
0
Rejoignez-nous