Microsoft 365 Transfert listbox, problème les dates

Scorpio

XLDnaute Impliqué
Bonjour à tous, et bonne année à tous les membres.
J'ai téléchargé ce classeur, que j'aimerais bien utilisé, mais mes connaissances en code sont très insufisante pour faire des corrections,
ainsi je m'adresse à vous, pour vous demander un coup de pouce, et je vous en remercie.
En fait, dans le formulaire s'ouvrant en feuille "BD", je fais une sélection et je la transfert dans la feuille "Result".
Alors, les dates en feuille "BD" sont (mercredi, 30 mai 2022, et les dates reçues dans la feuille "Result" sont 30.05.2022)
Et je voudrais les dates longues dans la feuille "Result",

Merci de votre aide, à +++
Scorpio
 

Pièces jointes

  • FormChoixColonneRechercheTextBox (1).xlsm
    40.9 KB · Affichages: 11

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Scorpio,
Le plus simple est peut être à la fin du transfert d'ajouter :
VB:
  With Sheets("Result")
    For i = 2 To .Range("E65500").End(xlUp).Row
        .Cells(i, "E") = Format(.Cells(i, "E"), "dddd dd mmmm yyyy")
        .Cells(i, "F") = Format(.Cells(i, "E"), "dddd dd mmmm yyyy")
    Next i
  End With
Ce qui est bizarre c'est que même sous le bon format de cellule, le collage s'effectue sous le bon format mais pas pour toutes les cellules.
Au moins avec ce rajout tout est correct.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
A tester, mais j'ai l'impression qu'on peut remplacer :
Code:
  f.[A2].Resize(n) = Application.Index(Tbl, , 1) 'Société
  f.[B2].Resize(n) = Application.Index(Tbl, , 2) 'Compte
  f.[C2].Resize(n) = Application.Index(Tbl, , 3) 'Somme
  f.[D2].Resize(n) = Application.Index(Tbl, , 4) 'Facture N°
  f.[E2].Resize(n) = Application.Index(Tbl, , 5) '"dddd dd mmmm yyyy") 'Date du payement
  f.[F2].Resize(n) = Application.Index(Tbl, , 6) 'Echéance le:
  f.[G2].Resize(n) = Application.Index(Tbl, , 7) 'Année:
  f.[H2].Resize(n) = Application.Index(Tbl, , 8) 'Mois:
  With Sheets("Result")
    For i = 2 To .Range("E65500").End(xlUp).Row
        .Cells(i, "E") = Format(.Cells(i, "E"), "dddd dd mmmm yyyy")
        .Cells(i, "F") = Format(.Cells(i, "E"), "dddd dd mmmm yyyy")
    Next i
  End With
par
Code:
f.Range("$A$2").Resize(1+UBound(Tbl, 1), 1+UBound(Tbl, 2)) = Tbl
Le format date est correct, si le format des cellules est le bon.
 
Dernière édition:

ChTi160

XLDnaute Barbatruc
Bonsoir le Fil
On pourrait aussi utiliser un truc du genre , pour éviter la Boucle.
VB:
Dim DerLgn As Long
With f
 DerLgn = .Cells(.Rows.Count, 5).End(xlUp).Row
          .Range(.Cells(2, 5), .Cells(DerLgn, 6)).NumberFormat = "dddd dd mmmm yyyy"
'ou
'         .Cells(2, 5).Resize(DerLgn, 2).NumberFormat = "dddd dd mmmm yyyy"
End With
Jean marie
 
Dernière édition:

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour ChTi,
Avec cette ligne du post #3 :
VB:
f.Range("$A$2").Resize(1+UBound(Tbl, 1), 1+UBound(Tbl, 2)) = Tbl
On évite tout ce code ainsi que la boucle car la mise en forme des colonnes est conservée.
Ce qui est bluffant c'est que si le transfert se fait via le code de Scorpio alors la mise en forme des colonnes n'est pas toujours pris en compte, elle est correcte sur certaines lignes mais pas sur d'autres.
Avec le transfert direct array/cellules la mise en forme est conservée. Bizarre.
 

Scorpio

XLDnaute Impliqué
Bonjour Scorpio,
Le plus simple est peut être à la fin du transfert d'ajouter :
VB:
  With Sheets("Result")
    For i = 2 To .Range("E65500").End(xlUp).Row
        .Cells(i, "E") = Format(.Cells(i, "E"), "dddd dd mmmm yyyy")
        .Cells(i, "F") = Format(.Cells(i, "E"), "dddd dd mmmm yyyy")
    Next i
  End With
Ce qui est bizarre c'est que même sous le bon format de cellule, le collage s'effectue sous le bon format mais pas pour toutes les cellules.
Au moins avec ce rajout tout est correct.
Bonjour Sylvanu
Juste 1 précision si tu me permet:
Correction de cette ligne, 2 F .Cells(i, "F") = Format(.Cells(i, "F"), "dddd dd mmmm yyyy")
Mais ça marche super bien et je te remercie.
Et, si je peux demander encore une chose ;
J'aimerais compter le NB de lignes de ma sélection, j'ai fait cette ligne ;
Me.NbLignes.Caption = n & " Facture(s)" 'NB de ligne slectionnée
Mais cela ne fonctionne pas, et je ne sais pas ou la mettre, pourrais-tu m'aider, je te remercie et
très bonne journée.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Comme vous l'avez remarqué, la listbox est traité via un array ( ici nommé Tbl).
Donc le nombres de factures est :
VB:
NbFactures=1 + UBound(Tbl)

et je ne sais pas ou la mettre
Quoi ? Calculer le nombre de factures ou où l'afficher ?
Où l'afficher, j'en sais rien.
Ou mettre le calcul, n'importe où après la ligne Tbl = Me.ListBox1.List où on fait le transfert listbox dans Tbl.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Dans le module Initialize mettre :
VB:
Me.NbFactures = UBound(TblBD) & " factures trouvées"
NbFactures étant un label mis dans userform.
Dans la PJ j'ai mis les deux modifs Tranfert, et nombre de factures.
 

Pièces jointes

  • FormChoixColonneRechercheTextBox (1) (4).xlsm
    34.9 KB · Affichages: 3

Statistiques des forums

Discussions
312 104
Messages
2 085 330
Membres
102 862
dernier inscrit
Emma35400