XL 2016 problème de trie de date lors de consolidation

jean marc1234

XLDnaute Occasionnel
re bonjour,
donc une nouvelle discussion, toujours mon problème de trie de date lors d'une consolidation.
Pour répondre à dranreb, j'ai donc copier les données du classeur qui ne fonctionne pas dans celui qui fonctionne. J'ai toujours ce problème dans les dernières lignes de consolidation. Alors qu'avec les données tests sa fonctionne très bien.
 

Pièces jointes

  • web 20181.xlsm
    174.1 KB · Affichages: 23

Staple1600

XLDnaute Barbatruc
Re,

@jean marc1234
Heureusement que je t'vais suggéré de prendre le temps de créer un fichier anonymisé...
Bonjour le fil, le forum
@jean marc1234
Suggestion du samedi après-midi
Comme ce fil de discussion contient désormais plus de trois pages, tu peux peut-être créer un autre fil en ayant pris le temps de construire un fichier exemple sans données confidentielles et ne contenant que le nécessaire pour traiter ta question
(à savoir neuf feuilles, une trentaine de lignes de données sur les feuilles avec nom de ville)
(Laisse également les différentes adaptations des code VBA que tu auras faites)

Je viens de tester sur ton classeur et la macro que j'avais proposer dans l'autre fil fonctionne.
Je n'ai pas de message d'erreur et le tri se fait sur la colonne A
(si tes colonnes A contiennent de "vraies dates")
(Je parle de la macro nommée consolider_Et_Trier)
L'autre ne sert que pour test sur un classeur test, il faut évidemment pas l'utiliser sur ton fichier réel
Mais cela je te l'ai déjà dit dans l'autre fil ;)
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Le plus souvent c'est la conséquence d'écritures directes de valeurs de TextBox servant à saisir une date, au lieu d'en écrire leurs conversions en dates à l'aide de la fonction CDate.
Cette procédure devrait vous intéresser :
VB:
Sub ConvertirEnDates()
Dim ArrWks, Wsh As Worksheet, Rng As Range, T(), L As Long, NbStr As Long, NbCDt As Long, Réécrire As Boolean
ArrWks = Array("ales", "arles", "bagnols", "calvisson", "grau du roi", "montpellier", "nimes", "uzes")
Application.ScreenUpdating = False
For Each Wsh In Sheets(ArrWks)
   Set Rng = Wsh.[A3].Resize(Wsh.[A1000000].End(xlUp).Row - 2)
   T = Rng.Value
   Réécrire = False
   For L = 1 To UBound(T, 1)
      If VarType(T(L, 1)) = vbString Then
         NbStr = NbStr + 1
         If IsDate(T(L, 1)) Then
            T(L, 1) = CDate(T(L, 1))
            NbCDt = NbCDt + 1
            Réécrire = True: End If: End If: Next L
   If Réécrire Then Rng.Value = T
   Next Wsh
Select Case NbStr
   Case Is > NbCDt: MsgBox NbStr & " textes trouvés, dont " & NbStr - NbCDt & _
      " n'ont pu être convertis en dates.", vbInformation, "ConvertirEnDates"
   Case 0: MsgBox "Aucun texte trouvé.", vbInformation, "ConvertirEnDates"
   Case Else: MsgBox NbStr & " textes trouvés, ayant tous été convertis en dates.", _
      vbInformation, "ConvertirEnDates"
   End Select
End Sub
 

jean marc1234

XLDnaute Occasionnel
Le plus souvent c'est la conséquence d'écritures directes de valeurs de TextBox servant à saisir une date, au lieu d'en écrire leurs conversions en dates à l'aide de la fonction CDate.
Cette procédure devrait vous intéresser :
VB:
Sub ConvertirEnDates()
Dim ArrWks, Wsh As Worksheet, Rng As Range, T(), L As Long, NbStr As Long, NbCDt As Long, Réécrire As Boolean
ArrWks = Array("ales", "arles", "bagnols", "calvisson", "grau du roi", "montpellier", "nimes", "uzes")
Application.ScreenUpdating = False
For Each Wsh In Sheets(ArrWks)
   Set Rng = Wsh.[A3].Resize(Wsh.[A1000000].End(xlUp).Row - 2)
   T = Rng.Value
   Réécrire = False
   For L = 1 To UBound(T, 1)
      If VarType(T(L, 1)) = vbString Then
         NbStr = NbStr + 1
         If IsDate(T(L, 1)) Then
            T(L, 1) = CDate(T(L, 1))
            NbCDt = NbCDt + 1
            Réécrire = True: End If: End If: Next L
   If Réécrire Then Rng.Value = T
   Next Wsh
Select Case NbStr
   Case Is > NbCDt: MsgBox NbStr & " textes trouvés, dont " & NbStr - NbCDt & _
      " n'ont pu être convertis en dates.", vbInformation, "ConvertirEnDates"
   Case 0: MsgBox "Aucun texte trouvé.", vbInformation, "ConvertirEnDates"
   Case Else: MsgBox NbStr & " textes trouvés, ayant tous été convertis en dates.", _
      vbInformation, "ConvertirEnDates"
   End Select
End Sub

bonjour dranreb,
la effectivement avec ce code sa fonctionne beaucoup mieux.
Je me doutais un peux que sa devais venir de lamise en forme du champs date et j'avais tous repris.
Mais effectivement au début de la création de mes classeurs les personnes rentrée les dates à partir d'un formulaire contenant des textbox.
Ce qui n'ai plus le cas.
J'ai une petite question, j'ai 5 classeurs identique 2014,2015,2016,2017 et 2018.
la macro de conversion fonctionne très bien sur 2018 et 2016 mais sur les autres classeurs elle m'indique une erreur 1004 avec une mise en surbrillance de la ligne "If Réécrire Then Rng.Value = T"
Serais t'il possible de mettre des annotations pour indiquer à quoi correspondent les lignes de code principal, comme cela se fait dans certains tuto.
Cela serais plus facile à suivre et comprendre pour moi et sa peut servir également à d'autres personnes.
en tout cas merci beaucoup sa me permet d'avances dans mon projet.
Bon dimanche et resté à l'ombre.
Encore une fois je suis pas programmeur et je fais à mon niveau. Alors faut pas trop m'en vouloir si je comprend pas vite.
Chacun son domaine. pour ma part c'est autre chose.
 

Dranreb

XLDnaute Barbatruc
C'est que je ne sais pas pourquoi ça plante.
J'en suis réduit à une hypothèse: certains tableaux seraient vides.
Je me suis borné à commenter les instructions essentielles :
VB:
Sub ConvertirEnDates()
Dim ArrWks, LMax As Long, Wsh As Worksheet, Rng As Range, T(), L As Long, NbStr As Long, NbCDt As Long, Réécrire As Boolean
ArrWks = Array("ales", "arles", "bagnols", "calvisson", "grau du roi", "montpellier", "nimes", "uzes")
Application.ScreenUpdating = False
For Each Wsh In Sheets(ArrWks)
   Set Rng = Wsh.[A1000000].End(xlUp)
   If Rng.Row >= 3 Then
      Set Rng = Wsh.Range(Wsh.[A3], Rng)
      If Rng.Rows.Count = 1 Then ReDim T(1 To 1, 1 To 1): T(1, 1) = Rng.Value Else T = Rng.Value
      ' Récupère les valeurs des cellules de la plage dans un tableau VBA 2D d'une seule colonne.
      Réécrire = False
      For L = 1 To UBound(T, 1)
         If VarType(T(L, 1)) = vbString Then
            NbStr = NbStr + 1 ' Compte les textes
            If IsDate(T(L, 1)) Then ' Si la conversion du texte en date est possible
               T(L, 1) = CDate(T(L, 1)) ' Remplace la valeur texte par sa conversion en date
               NbCDt = NbCDt + 1 ' Compte les corrections
               Réécrire = True: End If: End If: Next L
      If Réécrire Then Rng.Value = T ' Réécrit les valeurs corrigées s'il y a eu au moins une correction.
      End If: Next Wsh
Select Case NbStr
   Case Is > NbCDt: MsgBox NbStr & " textes trouvés, dont " & NbStr - NbCDt & _
      " n'ont pu être convertis en dates.", vbInformation, "ConvertirEnDates"
   Case 0: MsgBox "Aucun texte trouvé.", vbInformation, "ConvertirEnDates"
   Case Else: MsgBox NbStr & " textes trouvés, ayant tous été convertis en dates.", _
      vbInformation, "ConvertirEnDates"
   End Select
End Sub
Édition:
Je me doutais un peux que sa devais venir de lamise en forme du champs date
Non, il ne faut pas dire les chose comme ça. Ça mélange des notions qui n'ont rien à voir les unes avec les autres. Une cellule possède une valeur de cellule qui peut être de peu de types possibles: Vide, Erreur, Texte, Logique, Nombre, Date ou Monétaire. Indépendamment de cela elle possède un format de cellule qui indique seulement comment doit être resitué visuellement cette information.
 
Dernière édition:

jean marc1234

XLDnaute Occasionnel
C'est que je ne sais pas pourquoi ça plante.
J'en suis réduit à une hypothèse: certains tableaux seraient vides.
Je me suis borné à commenter les instructions essentielles :
VB:
Sub ConvertirEnDates()
Dim ArrWks, LMax As Long, Wsh As Worksheet, Rng As Range, T(), L As Long, NbStr As Long, NbCDt As Long, Réécrire As Boolean
ArrWks = Array("ales", "arles", "bagnols", "calvisson", "grau du roi", "montpellier", "nimes", "uzes")
Application.ScreenUpdating = False
For Each Wsh In Sheets(ArrWks)
   Set Rng = Wsh.[A1000000].End(xlUp)
   If Rng.Row >= 3 Then
      Set Rng = Wsh.Range(Wsh.[A3], Rng)
      If Rng.Rows.Count = 1 Then ReDim T(1 To 1, 1 To 1): T(1, 1) = Rng.Value Else T = Rng.Value
      ' Récupère les valeurs des cellules de la plage dans un tableau VBA 2D d'une seule colonne.
      Réécrire = False
      For L = 1 To UBound(T, 1)
         If VarType(T(L, 1)) = vbString Then
            NbStr = NbStr + 1 ' Compte les textes
            If IsDate(T(L, 1)) Then ' Si la conversion du texte en date est possible
               T(L, 1) = CDate(T(L, 1)) ' Remplace la valeur texte par sa conversion en date
               NbCDt = NbCDt + 1 ' Compte les corrections
               Réécrire = True: End If: End If: Next L
      If Réécrire Then Rng.Value = T ' Réécrit les valeurs corrigées s'il y a eu au moins une correction.
      End If: Next Wsh
Select Case NbStr
   Case Is > NbCDt: MsgBox NbStr & " textes trouvés, dont " & NbStr - NbCDt & _
      " n'ont pu être convertis en dates.", vbInformation, "ConvertirEnDates"
   Case 0: MsgBox "Aucun texte trouvé.", vbInformation, "ConvertirEnDates"
   Case Else: MsgBox NbStr & " textes trouvés, ayant tous été convertis en dates.", _
      vbInformation, "ConvertirEnDates"
   End Select
End Sub
Édition:

Non, il ne faut pas dire les chose comme ça. Ça mélange des notions qui n'ont rien à voir les unes avec les autres. Une cellule possède une valeur de cellule qui peut être de peu de types possibles: Vide, Erreur, Texte, Logique, Nombre, Date ou Monétaire. Indépendamment de cela elle possède un format de cellule qui indique seulement comment doit être resitué visuellement cette information.
 

jean marc1234

XLDnaute Occasionnel
C'est que je ne sais pas pourquoi ça plante.
J'en suis réduit à une hypothèse: certains tableaux seraient vides.
Je me suis borné à commenter les instructions essentielles :
VB:
Sub ConvertirEnDates()
Dim ArrWks, LMax As Long, Wsh As Worksheet, Rng As Range, T(), L As Long, NbStr As Long, NbCDt As Long, Réécrire As Boolean
ArrWks = Array("ales", "arles", "bagnols", "calvisson", "grau du roi", "montpellier", "nimes", "uzes")
Application.ScreenUpdating = False
For Each Wsh In Sheets(ArrWks)
   Set Rng = Wsh.[A1000000].End(xlUp)
   If Rng.Row >= 3 Then
      Set Rng = Wsh.Range(Wsh.[A3], Rng)
      If Rng.Rows.Count = 1 Then ReDim T(1 To 1, 1 To 1): T(1, 1) = Rng.Value Else T = Rng.Value
      ' Récupère les valeurs des cellules de la plage dans un tableau VBA 2D d'une seule colonne.
      Réécrire = False
      For L = 1 To UBound(T, 1)
         If VarType(T(L, 1)) = vbString Then
            NbStr = NbStr + 1 ' Compte les textes
            If IsDate(T(L, 1)) Then ' Si la conversion du texte en date est possible
               T(L, 1) = CDate(T(L, 1)) ' Remplace la valeur texte par sa conversion en date
               NbCDt = NbCDt + 1 ' Compte les corrections
               Réécrire = True: End If: End If: Next L
      If Réécrire Then Rng.Value = T ' Réécrit les valeurs corrigées s'il y a eu au moins une correction.
      End If: Next Wsh
Select Case NbStr
   Case Is > NbCDt: MsgBox NbStr & " textes trouvés, dont " & NbStr - NbCDt & _
      " n'ont pu être convertis en dates.", vbInformation, "ConvertirEnDates"
   Case 0: MsgBox "Aucun texte trouvé.", vbInformation, "ConvertirEnDates"
   Case Else: MsgBox NbStr & " textes trouvés, ayant tous été convertis en dates.", _
      vbInformation, "ConvertirEnDates"
   End Select
End Sub
Édition:

Non, il ne faut pas dire les chose comme ça. Ça mélange des notions qui n'ont rien à voir les unes avec les autres. Une cellule possède une valeur de cellule qui peut être de peu de types possibles: Vide, Erreur, Texte, Logique, Nombre, Date ou Monétaire. Indépendamment de cela elle possède un format de cellule qui indique seulement comment doit être resitué visuellement cette information.

Re,
merci pour les infos et le détails du code.
Je vais me pencher la dessus.
 

jean marc1234

XLDnaute Occasionnel
Re,

@jean marc1234
Heureusement que je t'vais suggéré de prendre le temps de créer un fichier anonymisé...


Je viens de tester sur ton classeur et la macro que j'avais proposer dans l'autre fil fonctionne.
Je n'ai pas de message d'erreur et le tri se fait sur la colonne A
(si tes colonnes A contiennent de "vraies dates")
(Je parle de la macro nommée consolider_Et_Trier)
L'autre ne sert que pour test sur un classeur test, il faut évidemment pas l'utiliser sur ton fichier réel
Mais cela je te l'ai déjà dit dans l'autre fil ;)

bonjour,
j'avais répondu directement sur le mail que j'avais reçu. Je répond toujours par politesse
Je disais donc que les données que j'avais dans le tableau ne pouvais pas servir. Données complètement bidons.
En ce qui concerne les dates j'avais déjà répondu en notant que j'avais vérifier tous mes formats.
Et pour le fichier test j'avais très bien compris qu'il ne devait pas etre utiliser dans mon classeur.
Je suis pas programmeur mais bon quand même.
Ya des personnes qui sont plus doués que d'autres dans certains domaines. Chacun le sien.
 

jean marc1234

XLDnaute Occasionnel
Re,

@jean marc1234
De quel mail tu parles???
Je n'ai jamais échangé avec toi par mail ??

Moi je parle de ce fil de discussion actuel, et du message#2 où je te disais avoir testé sur ton fichier exemple et que le tri se fait bien si le classeur contient de vraies dates en colonne A.

Mais bon, pas grave.
je suis aller trop , j'avais répondu directement sur le mail que j'avais reçu dans ma messagerie Outlook.
Désolé
Mais oui pas grave
 

jean marc1234

XLDnaute Occasionnel
Re bonjour staple1600 et dranreb,
voila tous fonctionne correctement.
Dranreb j'ai trouver pourquoi cela ne fonctionné pas sur certains classeurs.
Des lignes masquées et en plus avec des erreurs de frappes.
Faut que je fasse plus attention.
cela remis correctement, tout fonctionne impeccablement bien.
Je vais pouvoir continuer mon projet.
Encore merci à tous les deux. Vos analyse, vos réflexions,vos codes avec les annotations vont bien m'être utile.(d'autres idées de projets)
Je vous souhaite une bonne fin de wk et encore merci.
 

Discussions similaires

Réponses
2
Affichages
193

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 196
Messages
2 086 101
Membres
103 116
dernier inscrit
kutobi87