MFC en séries ou automatisées

Eloid

XLDnaute Nouveau
Bonjour a tous

Voilà, j’ai un petit souci que je n’arrive pas à résoudre dans un fichier qui me servira de gabarit pour créer des index de rues.

J’aimerais que lorsque, dans l’onglet « saisie », je saisis en colonne B une lettre seule, la mise en forme change automatiquement pour montrer que c’est un titre et annoncer un changement de lettre dans un classement alphabétique.

J’ai bien trouvé une formule : voir onglet « Test MFC », ligne 3, colonnes B à G
Testez la réaction si vous saisissez un mot ou une lettre seule (attention, ne fonctionne qu’avec les lettres A, B et C)

Le problème c’est que cette MFC impliquerait un énorme travail :
- une formule qui serait ultra-longue si elle doit prendre en compte tout l’alphabet
- induire une mise en forme différente selon que l’on est dans la colonne B, la G, ou de C à F
- recommencer avec une nouvelle formule à chaque ligne (en sachant qu’il y a 1052 lignes !)

Connaissez-vous une solution pour « tirer » la formule de mise en forme comme si c’était une formule de calcul (ainsi avoir le N° de ligne qui change automatiquement)

Evidemment, toute autre solution serait aussi la bienvenue car en plus, une MFC ne permet pas de centrer le texte ou d’utiliser une bordure grasse…
Je pensais peut-être ajouter une macro qui ferait le boulot au moment où je clique sur le bouton "Trier", le problème c'est que je suis une bille en macros....:eek:

Version utilisée : Excel 2000 (eh oui…)

Merci d'avance si une bonne âme peut m'aider !
 

Pièces jointes

  • Index_Rues.zip
    35.5 KB · Affichages: 31

Tibo

XLDnaute Barbatruc
Re : MFC en séries ou automatisées

Bonjour,

En sélectionnant de B7 à G...

Format - Mise en forme conditionnelle - La formule est :

Code:
=NBCAR($B7)=1

Format : Choisir Police : Gras - Motif : Gris

Limite : ne permet pas de centrer.

Il me semble (mais plus très sûr) que les MFC d'Excel 2007 permettent de centrer. Je suis ici sous 2003. Je pourrais vérifier ce soir.

@+
 

Eloid

XLDnaute Nouveau
Re : MFC en séries ou automatisées

Merci Tibo, c'est vrai que la formule est déjà plus simple que la mienne !!
(en fait si je comprends bien elle réagit si un seul caractère est saisi... donc n'exclut pas les chiffres mais pas grave, je ne pense pas que les utilisateurs seront assez crétins pour mettre un chiffre... quoique... ^^)

Par contre ça ne résout pas tous mes soucis :
- obligée de mettre 3 MFC par ligne si je veux une bordure exterieure
- obligée de répéter la manip sur 1052 lignes...

Pour ce qui est des fonctions de centrages possibles avec Excel 2007, tant mieux pour ceux qui l'ont pais moi je suis sous 2000 :(

Merci, ta formule m'avance quand même un peu !!

De mon côté je suis en train de chercher une soluce sous forme de macro mais suis tellement nulle que je galère grave !!
 

ERIC S

XLDnaute Barbatruc
Re : MFC en séries ou automatisées

Bonjour

c eque te disait aussi Tibo, c'est que tu peux sélectionner toute une zone (exemple colonnes de B à G) pour n'écrire qu'une seule fois tes conditions et qu'elles s'appliquent partout

je vais essayer de te donner la façon de faire. Je connais 2003 , pas 2000. avec un peu de chance il n'y aura pas trop de différence.

Par contre je quitte pour changer de PC, sur l'actuel j'ai 2007

A toute à l'heure
 

ERIC S

XLDnaute Barbatruc
Re : MFC en séries ou automatisées

re

je sélectionne B19 à G30
format mfc
"la formule est " =ET(NBCAR($B19)=1; CODE($B19)>64;CODE($B19<91))

puis format
onglet police : gras
onglet bordure : sans
onglet motif : gris


la formule tient compte aussi de la présence d'une lettre en majuscule.
le $B19 permet à la formule de s'incrémenter en ligne sur ta zone sélectionnée, mais en se référant toujours à la colonne B
Si tu veux réellement une bordure gauche en B et une droite en G, il faut sélectionner B19:B30, faire format, mfc, et là tu retournes dans format, onglet bordure, et tu valide la bordure gauche.
même opération avec G et bordure droite
 

Eloid

XLDnaute Nouveau
Re : MFC en séries ou automatisées

Trop top Eric S, ça marche du tonerre !!

:D Donc je n'avais pas bien compris l'utilité des "$" dans les formules des MFC, j'avais juste vu que parfois ça ne fonctionnais pas si je les oubliais !! Là, mon erreur était d'avoir mis "$B$3" ce qui limitait l'étendue de la MFC à la cellule B3, alors qu'un $ uniquement devant le B permet de prendre en compte toute la colonne... (arrêtes moi si je me trompe)
Tibo avait déjà corrigé cette erreur mais sans que je ne remarque ! :eek:

:D Pour ce qui est de la fonction "CODE", je ne la conaissais pas et elle s'avère effectivement très pratique !

:D Enfin, pour les bordures, j'ai remarqué que si je la laissais par défaut, la MFC s'applique sans influer sur les bordures déjà présentes.
Donc, dans un premier temps, j'applique la MFC sur toute la plage sans configurer de bordures et c'est seulement ensuite que j'utilise "Aucune" sur des morceaux de cette plage :
Colonne de gauche : "Aucune" à droite
Colonne de droite : "Aucune" à gauche
4 colonnes centrales : "Aucune" de chaque côté

Cela me permet de mettre par défaut une bordure grasse autour de la plage entière (eh oui, en plus je suis maniaque !)

:confused: En ce qui concerne le centrage des textes, je pensais à une petite macro du type "If...then..." mais je pateauge lamentablement avec VBA...

En tout cas merci merci merci à Tibo et Eric S car grâce à vous mon fichier est presque fini !
 

Eloid

XLDnaute Nouveau
Re : MFC en séries ou automatisées

Eh bien je crois avoir trouvé un début de macro pour aligner le texe...
Pour l'instant, voici ce que ça donne :
Code:
Sub Centrage_lettre_seule()
'
' Centrage_lettre_seule Macro
' Macro enregistrée le 02/08/2010 par Elodie
'

'Selectionne la 1ère cellule en colonne E
Range("B7").Select
'Si, dans la cellule active, il n'y a qu'un seul caractère, alors l'alignement horizontal est centré
If Len(ActiveCell.Value) = 1 Then
With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .ShrinkToFit = False
        .MergeCells = False
    End With
'Sinon, alignement horizontal à gauche
Else
With Selection
        .HorizontalAlignment = xlLeft
        .VerticalAlignment = xlCenter
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .ShrinkToFit = False
        .MergeCells = False
    End With
End If
End Sub

Il me reste "juste à trouver une commande pour executer ça sur toute la colonne --> Prendre en compte toute la colonne ou répéter la commande ligne par ligne ?

Heu, vu que là on tombe dans le VBA et les macros, dites-moi si il vaut mieux que je crée un nouveau sujet ?

Merci pour votre aide précieuse
 
Dernière édition:

tototiti2008

XLDnaute Barbatruc
Re : MFC en séries ou automatisées

Bonjour Elodie, Bonjour Eric, Bonjour Tibo,

Si j'ai bien compris, la macro doit s'appliquer de B7 à la dernière ligne de la colonne G ?

si c'est ça :

Code:
Sub Centrage_lettre_seule()
Dim Cellule as range
For each Cellule in Range("B7", Range("G65536").end(xlup))
If Len(Cellule.Value) = 1 Then
        Cellule.HorizontalAlignment = xlCenter
'Sinon, alignement horizontal à gauche
Else
        Cellule.HorizontalAlignment = xlLeft
End If
Next
End Sub
 

Eloid

XLDnaute Nouveau
Re : MFC en séries ou automatisées

Génial, Tototiti, ça marche à merveille !! :D :D
Et oui, c'est ce que je voulais !! (uniquement sur la colonne B mais la correction est facile ^^)

Du coup, je l'ai inséré dans le codage de la feuille en elle-même, ça s'applique au fur et à mesure de la saisie (comme la mise en majuscules) pour un résultat impeccable !! :cool:

Si ce n'est pas abuser, j'ai une toute dernière question : est-il possible de modifier cette commande pour qu'elle s'applique à une cellule contenant une fonction ?
Je m'explique : dans un onglet "Impression", les cellules reprennent les données de l'onglet "Saisie". Donc la cellule à mettre en forme contient une formule du type : SI(Saisie!B7 ="";"";Saisie!B7)
Si j'insère les commandes que tu viens de me donner dans le codage de la feuille "Impression", cela ne fonctionne pas...
je subodore qu'il faille changer le "For Each Cell In Range" car ici la cellule n'est pas vraiment modifiée.... ??

Quoiqu'il en soit, si je crée une macro pour appliquer cela à l'onglet "Imprimer", alors là ça fonctionne ! (bizarre ?)

Je fais des recherches pour trouver moi-même des réponses mais j'avoue ne pas trouver grand chose quand c'est si spécifique...
 

tototiti2008

XLDnaute Barbatruc
Re : MFC en séries ou automatisées

Re,

Du coup, je l'ai inséré dans le codage de la feuille en elle-même, ça s'applique au fur et à mesure de la saisie

Donc sur l'évènement Change, je suppose

est-il possible de modifier cette commande pour qu'elle s'applique à une cellule contenant une fonction

Il suffit juste de changer d'évènement : Evènement Calculate
 

Discussions similaires

Statistiques des forums

Discussions
312 493
Messages
2 088 956
Membres
103 989
dernier inscrit
jralonso