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 !

roidurif

XLDnaute Occasionnel
Bonjour

Comment retranscrire en Macro qui verifie si :

- Le format date "début et fin" est jj/mm/aaaa => si Faux "Numéro célulle" dans onglet feuil2 (Format date jj/mm/aaaa)

- Si date manquante dans date début et Fin => Si vrai "Numéro célulle" dans onglet feuil2 (Numéro client manquant)

- Date début doit être identique et la date de Fin aussi => Si faux "Numéro célulle" dans onglet feuil2 (Incohérence date)

- Si numéro client est renseigné, alors la date début et Fin est obligatoire => Si faux "Numéro célulle" dans onglet feuil2

Merci
 

Pièces jointes

Re : Macro Format date

Bonjour,

Dans la macro contrôle Sub Test2() 'Contrôle Format Date et Client
il y'a un script qui dit :
- La Date de début doit être identique sur l'ensemble de la colonne BB et la date de Fin doit être identique sur l'ensemble de la colonne BC
=> Si Faux indiquer le "Numéro célulle" dans onglet feuil2 (Incohérence date)


Cela fonctionne, mais lorsque par exemple je fais un copier / coller de date d'un fichier vers celui-ci, malgré les dates identique en début et date de fin et le bon format date jj/mm/aaaa bien sur, en lançant la macro, il détecte des date incohérentes.

Pour que cela fonctionne, je dois valider chaque cellule par la touche "entrée", du coup la date s'aligne de la gauche vers droite de la celulle.
Et en relançant la macro ca marche bien.

Je vois pas comment corriger cela, dans le fichier que j'ai joins, j'ai fais le copier/coller, merci de votre aide

Code :

If x <> Sheets(DATA).Cells(2, x.Column) Then Sheets(CONTROLE).Cells(11, 256).End(xlToLeft).Offset(0, 1) = x.Address(REF_ABS, REF_ABS) 'Incoherence date
Next
 

Pièces jointes

Dernière édition:
Re : Macro Format date

Bonjour,

Cas
Les erreurs sont détectées en BB4 à B19 et de BC4 à BC19 pour des "Dates Incohérentes" dans la feuil2 car il s agit d un copier /coller. ( La macro pense que ce ne se sont pas les même date identique dans la colonne BB et BC)

Tu verras que les date en BB2 BB3 et BC2 BC3 ont été validé en appuyant sur la touche entrée pour forcer la sate.

Je sais pas si c'est possible car j ai pas eu de réponse à mon précédent post?


Dites moi si ya une solution a me proposer pour forcer le format ou si tu as autre chose a me proposer pour ameliorer cela.. je suis partent


Merci d avance
Cdt
 
Dernière édition:
Re : Macro Format date

Bonjour

Bonjour,

Cela fonctionne, mais lorsque par exemple je fais un copier / coller de date d'un fichier vers celui-ci, malgré les dates identique en début et date de fin et le bon format date jj/mm/aaaa bien sur, en lançant la macro, il détecte des date incohérentes.

Pour faciliter la compréhension j'ai modifié la procédure en rajoutant un MSGBOX.
Code:
Sub Test2() 'Contrôle Format Date et Client
MonMax = Application.Max(Sheets(DATA).Range("BB65536").End(xlUp).Row, Sheets(DATA).Range("BC65536").End(xlUp).Row)
For Each x In Sheets(DATA).Range("BB2:BC" & MonMax)
    If x = "" Or x = 0 Then
    Sheets(CONTROLE).Cells(10, 256).End(xlToLeft).Offset(0, 1) = x.Address(REF_ABS, REF_ABS) 'Date manquante
    Select Case MsgBox("" _
                       & vbCrLf & "" _
                       & vbCrLf & "" _
                       , vbOKCancel Or vbExclamation Or vbDefaultButton1, Application.Name)
    
        Case vbOK
    
        Case vbCancel
    
    End Select
    
    Select Case MsgBox("Date manquante (1)" _
                & vbCrLf & "" & x _
                & vbCrLf & "" & x.Address(REF_ABS, REF_ABS) _
                & vbCrLf & "" & x _
                , vbOKCancel Or vbExclamation Or vbDefaultButton1, Application.Name)
        Case vbOK
    
        Case vbCancel
            Exit Sub
    End Select
    
    
     End If
    If x.NumberFormat <> "m/d/yyyy" Then
    Sheets(CONTROLE).Cells(8, 256).End(xlToLeft).Offset(0, 1) = x.Address(REF_ABS, REF_ABS) 'Format date
     Select Case MsgBox("Incohérence de date (2)" _
                & vbCrLf & "" & x.NumberFormat _
                & vbCrLf & "" & x _
                & vbCrLf & "" & x.Address(REF_ABS, REF_ABS) _
                & vbCrLf & "" & x _
                , vbOKCancel Or vbExclamation Or vbDefaultButton1, Application.Name)
              Case vbOK
    
        Case vbCancel
            Exit Sub
    End Select
                
    End If
    If x <> Sheets(DATA).Cells(2, x.Column) Then
    Select Case MsgBox("Incohérence de date (3)" _
                & vbCrLf & "" & x _
                & vbCrLf & "" & x.NumberFormat _
                & vbCrLf & "" & x.Address(REF_ABS, REF_ABS) _
                & vbCrLf & "différent de " _
                & vbCrLf & "" & Sheets(DATA).Cells(2, x.Column) _
                & vbCrLf & "" & Sheets(DATA).Cells(2, x.Column).NumberFormat _
                & vbCrLf & "ligne 2 et colonne " & x.Column _
                & vbCrLf & "" _
                , vbOKCancel Or vbExclamation Or vbDefaultButton1, Application.Name)
            Case vbOK
    
        Case vbCancel
            Exit Sub
    End Select
    Sheets(CONTROLE).Cells(11, 256).End(xlToLeft).Offset(0, 1) = x.Address(REF_ABS, REF_ABS) 'Incoherence date
    End If
Next

For Each x In Sheets(DATA).Range("A2:" & Sheets(DATA).Range("A65536").End(xlUp).Address)
    If x = "" Or x = 0 Then Sheets(CONTROLE).Cells(9, 256).End(xlToLeft).Offset(0, 1) = x.Address(REF_ABS, REF_ABS) 'N° client manquant
    If x <> Sheets(DATA).Cells(2, x.Column) Then Sheets(CONTROLE).Cells(12, 256).End(xlToLeft).Offset(0, 1) = x.Address(REF_ABS, REF_ABS) 'Incohérence N° client
Next
Call CtrlPrix
End Sub

En transformant les dates en valeur numérique on obtient
39814,00
39814,00
01/01/2009
01/01/2009
Les deux premières lignes sont des dates les suivantes sont des chaines de caractères, d'où problème.

JP
 
Re : Macro Format date

Bonjour

Comme cela je pense

If IsDate(target) Then Sheets(CONTROLE).Cells(11, 256).End(xlToLeft).Offset(0, 1) = x.Address(REF_ABS, REF_ABS) 'Incoherence date
Next

merci

Il vaut mieux prévenir que guérir.
exemple de macro
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
'Dim flag As Boolean
'Option Explicit

If Target.Count > 1 Then Exit Sub
Dim dl1 As Long ' dernière ligne
With Sheets(Target.Worksheet.Name)
dl1 = .Range("bb65536").End(xlUp).Row
        Application.EnableEvents = False
        Target.NumberFormat = "m/d/yyyy"
        If Not Intersect(Target, Range("bb2:bb" & dl1)) Is Nothing Then
            If Not IsDate(Target.Value) Then
                Call MsgBox("Vous devez inscrire une date sous la forme jj/mm/aaaa", vbInformation, Application.Name)
        Target.Value = ""
        End If
        Application.EnableEvents = True
    End If
'flag = False
End With

End Sub


Pour transformer les dates qui sont alignées à gauche il faut sélectionner la zone puis utiliser l'option convertir du menu Données.

JP
JP

JP
 
Re : Macro Format date

Bonjour,

ce code ci dessous permet de contrôler si la celulle est au format date "m/d/yyy" mais je remarque qu'il ne controle pas comment est saisie une date.
Exemple le fait d'écrire 1204/2009 au lieu 12/04/2009, c'est pareil pour lui, alors que ça devrait être faux

Code:
If x.NumberFormat <> "m/d/yyyy" Then Sheets(CONTROLE).Cells(8, 256).End(xlToLeft).Offset(0, 1) = x.Address(REF_ABS, REF_ABS)

Merci d'avance
Codialement
 
- 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
134
Affichages
5 K
Réponses
3
Affichages
418
  • Question Question
Microsoft 365 format date
Réponses
3
Affichages
239
Réponses
18
Affichages
1 K
Réponses
6
Affichages
453
Réponses
6
Affichages
655
Retour