• Initiateur de la discussion Initiateur de la discussion Claudy
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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.
1593086600669.png

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

Pièces jointes

  • 1593086481069.png
    1593086481069.png
    14.9 KB · Affichages: 10
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
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
 
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

Dernière édition:
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

Dernière édition:
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
 
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
 
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.
 
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

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
7
Affichages
176
Réponses
3
Affichages
225
Réponses
6
Affichages
162
Réponses
12
Affichages
282
Retour