Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 MFC

Claudy

XLDnaute Accro
Bonjour à tous,
Je n'arrive pas à trouver la bonne MFC:
si le contenu de la cellule commence par un "4", alors format personnalisé "Blablaa"Standart"YYYY"(année en cours aujourd'hui)
sinon format standart.

Il reste au format standart!
Merci d'avance,
Claudy
 

Pièces jointes

  • 1593086481069.png
    14.9 KB · Affichages: 7
Solution
re claudy
pour éviter une autre colonne une solution simple avec formulaire qui s'ouvre sur double clic dans une cellule colonne E
les textbox sont pré remplies. saisie du N° de facture et sur validation, la cellule active reçoit les informations concaténées. si le numéro commence par 4, information complète, sinon uniquement n° de facture
cordialement
galougalou

job75

XLDnaute Barbatruc
N'essayez pas de modifier ma macro, Worksheet_Calculate n'a pas d'argument Target !
avec votre solution et celle de nos collègues du fil, claudy n'a plus que l'embarras du choix. A elle d'apprécier la solution qui convient le mieux à sa problématique.
Je pensais que Claudy était un homme car en général les femmes n'indiquent pas leur âge.
 

GALOUGALOU

XLDnaute Accro
re j'ai une collègue qui se prénomme claudy, mais je suis resté focalisé sur la problématique informatique et rien d'autre, donc si je me suis trompé, Claudy veuillez accepter mes excuses
cordialement
galougalou
 

Claudy

XLDnaute Accro
Hihihihihi
Je laisse deviner
Et les hommes préfèrent répondre aux femmes...
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("D3", "D" & Range("D65536").End(xlUp).Row)) Is Nothing Then
'If Target.Count > 1 Then Exit Sub

With Target 'cellule à adapter
    .NumberFormat = "General"
    If Left(.Value, 1) = "4" Then .NumberFormat = """Blablabla ""General""\" & Year(Date) & """"
End With

End If
End Sub
ça marche...
Merci à tous pour l'aide,

Claudy
 

job75

XLDnaute Barbatruc
Avec une Worksheet_Change il n'y a pas mise à jour automatique de l'année le 1er janvier...

Maintenant si l'on veut que toutes les cellules de la colonne D soient traitées utiliser :
VB:
Private Sub Worksheet_Calculate()
Dim c As Range
Application.ScreenUpdating = False
With [D:D] 'colonne à adapter
    .NumberFormat = "General"
    For Each c In Intersect(.Cells, UsedRange)
        If Left(c, 1) = "4" Then c.NumberFormat = """Blablabla ""General""\" & Year(Date) & """"
    Next
End With
End Sub
Fichier (2).

J'ai testé la macro avec un tableau de 20 000 lignes, elle s'exécute chez moi en [Edit] 1,4 seconde.
 

Pièces jointes

  • VBA Format personnalisé(2).xlsm
    17.3 KB · Affichages: 1
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour Claudy, le forum,

Les [Edit] 1,4 seconde sur 20 000 lignes ne me plaisent pas, pour allez vite il faut créer une MFC.

Voyez le fichier joint et cette macro dont l'exécution est immédiate même sur 100 000 lignes :
VB:
Private Sub Worksheet_Calculate()
Application.ScreenUpdating = False
With [D:D] 'colonne à adapter
    .NumberFormat = "General" 'format Standard
    .FormatConditions.Delete 'RAZ
    '---version française---
    .FormatConditions.Add xlExpression, Formula1:="=--GAUCHE(D1)=4"
    .FormatConditions(1).NumberFormat = """Blablabla ""Standard""/" & Year(Date) & """"
    '---version anglaise---
    '.FormatConditions.Add xlExpression, Formula1:="=--LEFT(D1)=4"
    '.FormatConditions(1).NumberFormat = """Blablabla ""General""/" & Year(Date) & """"
End With
End Sub
Bonne journée.
 

Pièces jointes

  • VBA MFC Format personnalisé(1).xlsm
    19.2 KB · Affichages: 2
Dernière édition:

Claudy

XLDnaute Accro
Bonjour à tous,
j'ai revu ma copie:
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("D3", "D" & Range("D65536").End(xlUp).Row)) Is Nothing Then

    If Left(Target.Value, 1) = "4" Then Target = Range("D1").Text & Target.Value & "/" & Year(Date)

End If
Mais je garde en mémoire vos Trop bonnes idées, merciiiii
A+
Claudy
 

Claudy

XLDnaute Accro
Non pas n'importe quoi!
D'accord plus rien à voir avec la MFC, mais le résutat est là: pas de blabla, numérotation cohérente.
L'avantage aussi, c'est que je pourrais également y mettre un select case, au cas où ma numérotation commencerait par un autre chiffre.
Bonne journée,
Claudy
 

Claudy

XLDnaute Accro
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("D3", "D" & Range("D65536").End(xlUp).Row)) Is Nothing Then
    Select Case Left(Target.Value, 1)
    Case Is = "4"
    Target = Range("D1").Text & Target.Value & "/" & Year(Date)
    Case Is = "2"
    Target = "blablabla" & Target.Value & "/" & Now() '& Year(Date)
    End Select

End If
Et ça ne modifie pas les lignes précédentes puisque ce n'est plus une MFC, mais un texte brut.
Merci quand même,
Claudy
PS:, en Belgique Claudy est un prénom Masculin.
 

job75

XLDnaute Barbatruc
D'après ce que j'ai compris il faut toujours pouvoir modifier l'année de la facture si nécessaire.

Donc utilisez le fichier joint et cette macro :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("D3:D" & Rows.Count)) Is Nothing Or Target.Count > 1 Then Exit Sub
Dim texte$, t$, an$
Target.Select
texte = "Blablabla " 'à adapter
t = Replace(Target, texte, "")
If InStr(t, "/") Then t = Left(t, InStr(t, "/") - 1)
If Left(t, 1) <> "4" Then Exit Sub
an = Application.InputBox("Entrez l'année :", "Facture", Year(Date))
If Not an Like "####" Then Exit Sub
Application.EnableEvents = False
Target = texte & t & "/" & an
Application.EnableEvents = True
End Sub
 

Pièces jointes

  • Facture(1).xlsm
    15.8 KB · Affichages: 4

Discussions similaires

Réponses
4
Affichages
369
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…