Date en anglais après Transpose

L

Law

Guest
Bonjour le forum,

Dans le classeur ci-joint, je possède 4 feuilles.

Les 3 premières feuilles correspondent à des classes de comptes comptables et contiennent des tableaux qui représentent les différents comptes (205.000, 215.000 etc...)

J'aimerais construire une macro qui, en fonction du n° de mois que je saisi dans l'inputbox, me recense toutes les lignes dont la date est comprise dans ce mois.

Par exemple si je saisi 8 dans l'inputbox, la macro ne doit me recenser que les lignes dont la date est comprise entre le 01/08/2005 et le 31/08/2005.

M'étant inspiré de l'aide précieuse d'Hervé sur ce forum, j'ai commencé à élaborer une macro qui crée un 'tableau virtuel' contenant les lignes et qui, en fin de code, transpose ce tableau sur la 4ème feuille.

Le problème, c'est que lors de cette transposition, le format date change et passe au format 'mm/jj/aaaa'. Si mes observations sont exactes, ceci ne se produit que pour les dates dont le jour est < ou = à 12, pour les autres dates, le format reste 'jj/mm/aaaa'.

Mes 2 questions :

1. Comment faire pour que la méthode transpose conserve TOUTES mes dates au format 'jj/mm/aaaa'.

2. Comment faire pour qu'au regard de chaque ligne que recense ma macro dans la feuille 'Consolidation', dans la colonne A apparaisse le n° du compte ad hoc ?

Merci beaucoup à tous par avance. [file name=ForumXL.zip size=10999]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/ForumXL.zip[/file]
 

Pièces jointes

  • ForumXL.zip
    10.7 KB · Affichages: 17
  • ForumXL.zip
    10.7 KB · Affichages: 14
  • ForumXL.zip
    10.7 KB · Affichages: 15

PascalXLD

XLDnaute Barbatruc
Modérateur
Bonjour

Pour ton problème de date je n'ai pas eu de problème chez moi elles passent bien en jj/mm/aaaa

Si le problème persiste chez toi essaies d emodifier cette ligne

tablo(3, X) = .Cells(k, j).Offset(0, 0)

par

tablo(3, X) = CDate(.Cells(k, j).Offset(0, 0))


Sinon je t'ai rajouté la ligne pour prendre le numero de compte

Bonne journée [file name=ForumXL_20050920081147.zip size=10700]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/ForumXL_20050920081147.zip[/file]
 

Pièces jointes

  • ForumXL_20050920081147.zip
    10.4 KB · Affichages: 16
L

Law

Guest
Bonjour le forum,
Bonjour Pascal.

Merci pour ta modif afin que le n° de compte figure dans mes résultats.

Par contre malgré ta modif 'tablo(3, X) = CDate(.Cells(k, j).Offset(0, 0))', rien y fait, chez moi j'ai toujours certaines dates qui se transposent au format mm/jj/aaaa.

Et ce sont pourtant bien des lignes au format date, mais simplement c'est du 'mm/jj/aaaa' ! Pourtant

C'est vraiment très étrange que ça ne le fasse pas partout ?! Sans indiscrétion, tu possèdes quelle version d'Excel ? 2003 comme moi ?

En tout cas ce problème reste en suspens ;
Remerciements renouvelés pour le reste ;)

@+
 

Law

XLDnaute Junior
RE,

Même avec ta nouvelle proposition que je viens d'intégrer dans mon code, ça ne fonctionne toujours pas.

En fait, je crois que le problème vient d'ailleurs. Je m'explique.
Dans mon fichier joint, si on saisit par exemple 8 dans l'inputbox, dans ma feuille 'Consolidation' j'aurai 3 lignes, dont, à la colonne 'C', 3 dates (en C2, C3 et C4).

- la première est '24/08/2005' (range'C2')... qd je regarde les propriétés de la cellule, dans l'onglet 'nombre', cette cellule est bien au format de type date, cad '*jj/mm/aaaa'. Mais là où ça devient bizarre, c'est que si par exemple en G2 je tape la formule '=droite(C2;4)', j'obtiens '2005' !

- par contre, pour la 2ème et 3ème ligne (ranges 'C3' et 'C4'), les propriétés de la cellule sont strictement les mêmes ('*jj/mm/aaaa'), mais là par contre, si je fais ma formule '=droite(C3;4)' ou '=droite(C4;4)', j'obtiens respectivement '8633' et '8572' (car les dates représentent respectivement '38633' et '38572' au format 'maison' d'Excel).

En bref, suite à la transposition, avec 8 dans mon inputbox, j'obtiens 3 occurences :
1 au format 'jj/mm/aaaa' (youpi !!) mais visiblement pas au format date ! :(
2 au format 'mm/jj/aaaa' (snif !!), et manifestement au format date ! :(

Sacré Excel...

Merci, @+
 

Hervé

XLDnaute Barbatruc
Bonjour law, pascal

avec excel 2002 pas de souci pour le retour de la date ???

law, tu peux peut etre tenter de forcer le format au moment du renvoi de la date sur la feuille consolidation :

En remplacant le transpose par tout ca :

l = 2
With Sheets('Consolidation')
&nbsp; &nbsp;
For i = 1 To UBound(tablo, 2)
&nbsp; &nbsp; &nbsp; &nbsp;
For j = 1 To UBound(tablo)
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
Select Case j
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
Case 3
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .Cells(l, 3) = CDate(tablo(j, i))
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
' .Cells(l, 3) = Format(CDate(tablo(j, i)), 'dd/mm/yyyy')
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
Case Else
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .Cells(l, j) = tablo(j, i)
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
End Select
&nbsp; &nbsp; &nbsp; &nbsp;
Next j
&nbsp; &nbsp; &nbsp; &nbsp; l = l + 1
&nbsp; &nbsp;
Next i
End With

sans garanti de réussite, ne rencontrant pas ton souci.

salut
 

myDearFriend!

XLDnaute Barbatruc
Bonsoir Law, Pascal76, Hervé,

Je suis sous Excel 2003 et je rencontre le même problème que Law...

Cela dit, je me confronte souvent à ce genre de problème lorsque je stocke des valeurs 'Date' dans un tableau (généralement de type 'Variant' dans mon cas) et que je réinjecte le tout - d'une seule traite - dans une autre plage de cellules, du style suivant :
Range(Cells(1, 1), Cells(UBound(TabTemp, 1), UBound(TabTemp, 2))).Value = TabTemp
Le seul moyen efficace que j'ai trouvé pour contourner ce problème, c'est de ne pas utiliser cette pratique dans ce cas et de procéder à la réaffectation des cellules une par une au moyen d'une simple boucle. C'est forcément un peu plus long au traitement, mais c'est efficace...

Aussi Law, tu trouveras ci-joint ton fichier modifié en conséquence pour test. Pour éviter les multiples jeux de boucles et afin d'optimiser le temps de traitement global, j'ai préféré reprendre la procédure dans son ensemble :
Sub GdLivre()
Dim ws As Worksheet
Dim TabTemp As Variant, NumMois As Variant
Dim
L As Long, LignConsol As Long
Dim
C As Integer
Dim
ColConsol As Byte

      NumMois = Application.InputBox(prompt:= _
                  'Veuillez saisir le numéro du mois - Exemple, pour Août, ''8''', _
                  Title:='choix du mois...', Type:=1)
           
      If NumMois = False Or NumMois = '' Then Exit Sub
      Application.ScreenUpdating = False
      With Sheets('Consolidation')
            .Rows('2:65536').Delete
            LignConsol = 1
            For Each ws In Worksheets
                  If ws.Name <> 'Consolidation' Then
                        TabTemp = ws.UsedRange.Value
                        For C = 1 To UBound(TabTemp, 2) Step 5
                              For L = 3 To UBound(TabTemp, 1)
                                    If Month(TabTemp(L, C + 1)) = NumMois Then
                                          LignConsol = LignConsol + 1
                                          .Cells(LignConsol, 1).Value = TabTemp(1, C)
                                          For ColConsol = 2 To 5
                                                .Cells(LignConsol, ColConsol).Value = _
                                                                  TabTemp(L, C + ColConsol - 2)
                                          Next ColConsol
                                    End If
                              Next L
                        Next C
                  End If
            Next ws
      End With
      Application.ScreenUpdating = True
End Sub
Cordialement, [file name=PourLaw.zip size=10442]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/PourLaw.zip[/file]
 

Pièces jointes

  • PourLaw.zip
    10.2 KB · Affichages: 20
L

Law

Guest
Bonsoir tout le monde,

Merci à tous, notamment à Pascal76, Hervé et myDearFriend!

Ca fonctionne avec ta macro et en effet (c'est vraiment sympa d'avoir tout repris !!), c'est un poil plus long lors de l'exécution, mais au moins ça fonctionne parfaitement ! :)

Donc voilà, merci beaucoup à tous.

Et heu... s'il fallait quand même trouver une morale à tout ça, c'est que les dernières versions d'un prog' ne sont pas toujours les meilleures... :)

@+
 

Statistiques des forums

Discussions
312 215
Messages
2 086 322
Membres
103 178
dernier inscrit
BERSEB50