IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Créer format cellule perso en vba


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 19
    Par défaut Créer format cellule perso en vba
    Bonjour,

    Comme l'annonce le titre de mon post, je souhaiterais savoir comment créer un format de cellule personnalisé, comme le permet excel, à la différence près qu'il se réfère à une cellule. Je m'explique:

    Via "Format/Cellule/Nombre/Personnalisé", on dit vulgairement au logiciel: "si je rentre une valeur dans telle cellule tu ajoutes les informations suivantes à la suite de ce que j'ai tapé".

    ex: Format cellule = # ##0\ [$kgs]
    Si je tape "25" dans la cellule, il y a "25 kgs" qui s'affiche.


    Mon idée est donc de créer le même type de mise en forme automatique mais avec les informations que contient une cellule précise à la place de "kgs":

    - Cellule de référence B1 contient "Juin"
    - Si je tape "25" en B10, il s'affiche "25 Juin" ------------> Soit contenu de B10 + Contenu de B1.

    A priori, je ne vois pas comment on peut créer cela sans utiliser Visual Basic or je ne le maitrise pas. j'ai bien essayé mais sans succès donc je me repose désormais sur vos conseils. Merci d'avance pour votre aide.

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut sfab41
    Je suppose qu'en B1 tu as une liste de validation, contenant les mois ?
    Pour t'éviter de taper 2 caractères ou avoir un mois qui débute par une majuscules, tu vas tout compliquer à l'extrême .
    Je suppose que B10 est un exemple que tu étendras à la colonne

    Solution 1 :
    Voir celle de ouskel'n'or => mais ce n'est pas un format, c'est du texte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo Err_Worksheet_Change
    If Intersect(Target, [B10]) Is Nothing Then GoTo Sort_Worksheet_Change
    Application.EnableEvents = False
    Target = Target & " " & [B1]
    Sort_Worksheet_Change:
        Application.EnableEvents = True
        Exit Sub
    Err_Worksheet_Change:
        MsgBox Err.Description, vbOKOnly, "ERREUR n°" & Err.Number
        Resume Sort_Worksheet_Change
    End Sub
    je préfère la gestion des erreurs à un si B10 n'est pas numérique sortir,
    - Tu perds la facilité de traitement des dates (en tri, le 1 Juin sera avant le 1 Mars et celui-ci avant le 2 Janvier

    Solution 2 : Mettre un format numérique personnalisé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    If Intersect(Target, [B10]) Is Nothing Then exit sub
    Target.NumberFormat = "0" & """ " & [B1] & """"
    End Sub
    - tu gardes le nombre (le jour), mais un tri amène le même genre de réponse, sauf que les 1 seront avant les 2 dans l'ordre des lignes initiales

    La solution la plus simple restant un format numérique prévu :
    format personnalisé type "j mmmm"
    => tu entres 25/6 en B10 => excel affiche 25 juin
    - tu peux travailler sur la date, puisque la valeur entrée est une date

    Mais tout ça dépend du BUT à atteindre. Et comme on ne le connaît pas, la solution est peut-être toute autre!!!
    A+

  3. #3
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 19
    Par défaut
    Merci de vos réponses.
    Pour ce qui est des 2 propositions de macro cela me convient mis à part qu'en fait je voulais quelque chose comme un format de cellule type excel qui s'amorce automatiquement une donnée est présente dans la cellule concernée.
    Le problème avec Worksheet_Change c'est que le format n'est mis à jour que si la cellule est modifiée, or j'utilise un fichier excel pré-rempli dont seul le mois présent en B1 change:

    ex: 1 du mois = loyer
    5 du mois = paie
    ...etc

    Comme il y a des opérations dont la date est toujours la même, je laisse telle quelle la date mais je change le mois en B1.
    Je sais c'est lourd mais j'aimerais bien arriver à ce résultat.

  4. #4
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 19
    Par défaut
    Ce que je veux c'est avoir le mois en cours en B1 ("titre" de ma feuille), exemple "Juin" et que simplement en tapant "25" en B10, il apparaisse "25 Juin" en B10.

  5. #5
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 19
    Par défaut
    Et bien ce serait pour les cellules B10 à B30.

  6. #6
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 19
    Par défaut
    J'ai eu le temps d'essayer la macro donné par Ouskel'n'or mais ça ne marche pas chez moi...
    J'ai bien une modification quand je tape une valeur en cellule B10, mais j'arrivais déjà au même résultat avec cette macro:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    If Intersect(Range("B10:B30,"), Target) Is Nothing Then Exit Sub
    Application.EnableEvents = False
    If Not IsEmpty(Target) Then
    Target.Value = Target.Value & " " & Cells.Range("B1").Text
    Application.EnableEvents = True
     
    End If
    End Sub
    Le problème pour moi reste le même: la mise en forme ne se fait pas automatiquement quand je modifie ma cellule B1.
    J'ai joint ma trame de comptes pour que ce que j'espère avoir paraisse plus clair: Si je modifie le contenu de la cellule B1, ce dernier vient s'ajouter au contenu existant (s'il y en a un) en B10 à B30.
    Je fait cela car les dates des opérations restent fixes et donc j'ai une trame vierge avec des dates références.
    Fichiers attachés Fichiers attachés

  7. #7
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 19
    Par défaut
    Et bien ce code me permet bien d'avoir le contenu de la cellule B1 qui s'affiche à la suite de ce que je viens de taper (donc il y a modif de la cellule) en B20 par exemple , mais il ne permet pas d'afficher le contenu de B1 en B20 si je ne modifie pas cette dernière. Donc 2 questions se posent:

    - Il y aurait-il possibilité d'avoir 2 fonctions change sur une même feuille?
    - Si oui, comment peut-on retranscrire en vba "si je modifie la cellule B1, le contenu de cette dernière s'affiche dans les cellules de la plage B10 à B30 à condition que ces cellules contiennent quelque chose, sinon rien"

    Merci.

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut sfab41
    - Il y aurait-il possibilité d'avoir 2 fonctions change sur une même feuille?
    Non, un seul change par feuille, mais rien ne t'empêche de séparer les traitements avec soit une intersect soit un if (ou plusieurs

    - Si oui, comment peut-on retranscrire en vba "si je modifie la cellule B1, le contenu de cette dernière s'affiche dans les cellules de la plage B10 à B30 à condition que ces cellules contiennent quelque chose, sinon rien"
    essaie d'abord l'élucubration en pièce jointe
    à partir de B10 :
    Tu mets un nombre => transforme en formule liée à B1 et s'occupe du format numérique
    tu mets une date => s'occupe du format numérique
    Pour passer de l'un à l'autre, il y a nécessité à faire une suppression de la valeur de la formule, puis, soit mettre une date, soit mettre un nombre de 1 à 31, la macro le transformera en formule date, prenant son mois sur la cellule B1
    La liste des mois masquée est en K

    A+

Discussions similaires

  1. Cellules format HH:MM en vba
    Par nancy38 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/04/2013, 17h42
  2. [XL-2007] VBA: problème format cellule
    Par gorgio dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 30/07/2009, 17h07
  3. {VBA Excel}probleme format cellule
    Par Thomas69 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 01/08/2007, 12h12
  4. [VBA-E]automatiser "clic droit, format cellule, texte"
    Par jmlcea dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 21/04/2006, 17h21
  5. [VBA-E] Format cellule
    Par peon3 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 05/02/2006, 19h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo