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

Problème mise en forme conditionnelle

Joanna

XLDnaute Nouveau
Bonjour,

Je suis nouvelle ici et c'est la première fois que je poste un sujet. Je pense que le titre est assez commun mais je n'arrive pas à trouver le problème malgré les recherches répétitives pour trouver la solution.

J'ai réalisé une macro qui copie colle les informations d'un userform vers des cellules.
Puis j'ai fait une mise en forme conditionnelle en fonction des dates. Malheureusement, je n'ai guère l'impression que les cellules sont détectées en tant que dates une fois le copie colle des données (usf vers onglet) est réalisée. (Colonne G et H en PJ). Par contre cela fonctionne quand, je clique sur la cellule pour saisir ou non.

Je vous ai mis un fichier avec le résultat des copies colles. J'ai enlevé les données confidentielles et les macros.

Ma macro qui copie colle, la voici au cas où le problème vient d'ici :
VB:
Dim i As Integer
derlig = Worksheets("Suivi des Actions").Range("G65000").End(xlUp).Row + 1
  
For i = 1 To derlig
    
    If UserForm1.TextBox1 <> "" And UserForm1.OptionButton1 = True And UserForm1.CheckBox2 = True Then
    Worksheets("Suivi des Actions").Cells(derlig, 1).Value = "R"
    Worksheets("Suivi des Actions").Cells(derlig, 2).Value = UserForm1.OptionButton1.Caption
    Worksheets("Suivi des Actions").Cells(derlig, 3).Value = Me.ComboBox1.Value
    Worksheets("Suivi des Actions").Cells(derlig, 4).Value = Me.TextBox1.Value
    Worksheets("Suivi des Actions").Cells(derlig, 5).Value = Me.TextBox2.Value
    Worksheets("Suivi des Actions").Cells(derlig, 6).Value = Me.ComboBox2.Value
    Worksheets("Suivi des Actions").Cells(derlig, 8).Value = Format(Me.TextBox3.Value, "dd/mm/yyyy")
        End If
  
    If UserForm1.TextBox1 <> "" And UserForm1.OptionButton2 = True And UserForm1.CheckBox2 = True Then
    Worksheets("Suivi des Actions").Cells(derlig, 1).Value = "R"
    Worksheets("Suivi des Actions").Cells(derlig, 2).Value = UserForm1.OptionButton2.Caption
    Worksheets("Suivi des Actions").Cells(derlig, 3).Value = Me.ComboBox1.Value
    Worksheets("Suivi des Actions").Cells(derlig, 4).Value = Me.TextBox1.Value
    Worksheets("Suivi des Actions").Cells(derlig, 5).Value = Me.TextBox2.Value
    Worksheets("Suivi des Actions").Cells(derlig, 6).Value = Me.ComboBox2.Value
    Worksheets("Suivi des Actions").Cells(derlig, 7).Value = Format(Now(), "dd/mm/yyyy")
    Worksheets("Suivi des Actions").Cells(derlig, 8).Value = Format(Me.TextBox3.Value, "dd/mm/yyyy")
    End If
Next i

En vous remerciant par avance de votre aide

Bien à vous

Joanna
 

Pièces jointes

  • Format cellule.xlsm
    23 KB · Affichages: 9

Joanna

XLDnaute Nouveau
Salut,

Si je fais un Ctrl+H, puis . remplacé par /. Ceci fonctionne
Mais quand je le fais sous forme VBA, il me change bien "." par "/" mais la mise en forme conditionnelle ne fonctionne pas tant que je n'ai pas cliqué sur la cellule pour saisir ou non. Sachant qu'au fil du temps, il va y avoir des centaines et milliers de lignes, je ne peux pas faire ça pour chaque ligne.

Merci de ton retour

Joanna
 

xUpsilon

XLDnaute Accro
Re,

Si tu rajoutes ça au début de ta macro pour changer le format des dates d'abord puis copier/coller est-ce que ça marche ?

VB:
Dim c as Range

For Each c In Range([G2], [G65536].End(xlUp))
        c.value = Replace(c, ".", "/")
 
    Next c

Bonne continuation
 

Joanna

XLDnaute Nouveau
Salut à tous,

Cela change bien les . en / mais j'ai l'impression qu'il ne détecte toujours pas la cellule.
C'est vraiment bizarre.

Je pense qu'il n'y a rien à faire. C'est énervant !!!

Je suis à peu près sur que cela vient du copier coller, le format de valeur de collage ne doit pas s'adapter correctement.

Merci pour votre aide

Joanna
 

haonv

XLDnaute Occasionnel
Bonsoir,
Je pense qu'en modifiant la date par macro, il faut aussi inverser l'ordre d'entrée du mois et du jour.
J'ai testé sur ton fichier, mis en retour, ça marche.

Cordialement
 

Pièces jointes

  • Format cellule (2).xlsm
    16.8 KB · Affichages: 3

xUpsilon

XLDnaute Accro
Re,

J'ai déjà par le passé (et encore en ce moment) développé des trucs qui utilisent une BDD dans laquelle il y a des dates : à part un risque d'inversion du mois et du jour en sortie lorsque le jour <= 12 sinon j'ai jamais rencontré de problème.
Je ne comprends pas d'où peut venir le problème ici.

Bonne continuation
 

haonv

XLDnaute Occasionnel
Re ,

@xUpsilon
Je ne suis pas un spécialiste de VBA, loin de là, mais à mon avis:

Les dates en VBA sont au format anglo-saxon, mois/jour/année.
Lorsque la date est entrée par un code VBA, excel comprend que c'est une date et le met au format date de la version excel utilisée.
Quand on ecrit, par exemple, par vba "13/12/2019", excel ne reconnait pas une date, puis ce que pour lui, 13 est le mois.
Quand on ecrit, par exemple, par vba "01/02/2019", excel reconnait une date, mais le 2 janvier 2019.

Un petit fichier en exemple.
Cordialement
 

Pièces jointes

  • Test date vba.xlsm
    15.4 KB · Affichages: 2

Joanna

XLDnaute Nouveau
Salut haonv et xUpsilon,

Je vois ce que vous voulez dire, je vous remercie de votre aide et questionnement.
Ceci explique cela alors. Un moment donné, mon excel français est passé en excel anglais sans que je lui en demande.
Donc je pense que le problème venait de ce changement brutal.

Je pense que problème est résolu.
Il faut juste que j'explore cette piste et comprendre pourquoi mon excel est passé de la version française à anglaise. Je vais faire des recherches pour savoir comment remettre en français.

Merci encore pour votre aide
Des bisous à vous ^^

Joanna
 
Dernière édition:

xUpsilon

XLDnaute Accro
Re,

Tu as tout à fait raison c'est comme ça que Excel fait mais à ce moment là pourquoi est-ce malgré tout traité correctement sur mon ordi ? (j'ai l'erreur en sortie jusqu'au 12 de chaque mois où il inverse jour et mois mais en dehors de ça ça fonctionne très bien et la copie de date ne pause aucun souci).
On peut malgré tout via du VBA forcer la sortie en format anglo saxon ou en format français, c'est ce que j'ai déjà fait par le passé pour avoir quelque chose de propre. Mais dans le cas présent je comprends pas pourquoi l'entrée n'est pas bonne, il ne comprend pas que l'entrée est une date, qu'importe le format, c'est ça qui est bizarre.

Bref bonne continuation
 

haonv

XLDnaute Occasionnel
Re,

@Joanna
VB:
Ceci explique cela alors. Un moment donné, mon excel français est passé en excel anglais sans que je lui en demande.
Donc je pense que le problème venait de ce changement brutal.

A mon avis ce n'est pas ça.
C'est simplement que, quelque soit la langue d'excel, VBA sera toujours en anglais.
Donc en VBA, tu écris ta date sous la forme "mois/jour/année" et excel mettra le format selon sa langue.

Cordialement
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour @xUpsilon,

inverse jour et mois

J'avais commis, il y a quelques temps, une fonction pour éviter l'inversion du mois et du jour quand on interprète une date supposée écrite en français. Je l'ai ressortie et adaptée.
x est le texte à convertir et sep est le séparateur à utiliser
VB:
Function EnDate(x, sep As String)
Dim y, t&(0 To 2), d
   EnDate = x: sep = Left(sep, 1): y = Split(x, sep)
   If IsEmpty(x) Then EnDate = "": Exit Function
   If UBound(y) = 2 Then
      If IsNumeric(y(0)) And IsNumeric(y(1)) And IsNumeric(y(2)) Then
         t(0) = y(0): t(1) = y(1): t(2) = y(2)
         If t(0) >= 0 And t(1) >= 1 And t(2) >= 2 Then
            If Len(y(2)) <= 2 Then y(2) = y(2) + 2000
            d = DateSerial(y(2), y(1), y(0))
            If Day(d) = 0 + y(0) And Month(d) = 0 + y(1) And Year(d) = 0 + y(2) Then EnDate = d
         End If
      End If
   End If
End Function

Si on l'utilise dans une macro, le code pour la fonction jn de Joanna devient:
Code:
Sub jn()
Dim der&, t, i&, y, x
   With Sheets("Suivi des Actions")
      der = .Cells(.Rows.Count, "g").End(xlUp).Row
      If der = 1 Then Exit Sub
      t = .Range("g1:g" & der)
      For i = 2 To UBound(t): t(i, 1) = EnDate(t(i, 1), "."): Next i
      .Range("g1:g" & der).NumberFormat = "General"
      .Range("g1:g" & der) = t
   End With
End Sub
 

Pièces jointes

  • Joanna- Format cellule- v1a.xlsm
    40.8 KB · Affichages: 3
Dernière édition:
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…