Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/08/2011, 17h06   #1
Nouveau Membre du Club
 
Homme
Administrateur de base de données
Inscription : mai 2011
Messages : 99
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Bâtiment

Informations forums :
Inscription : mai 2011
Messages : 99
Points : 29
Points : 29
Par défaut Problème tableau et date

Bonjour forum,

j'alimente un tableau à partir d'une liste d'une feuille excel, et ensuite je retranscris les données de mon tableau sur une autre feuille excel. Le transfert se fait bien excepté les dates.
La macros inverse les mois et les jours, exemple dans ma liste de données originale, les dates sont 06/09/11, lorsque je transpose mon tableau il indique 09/06/11, mais il inverse les mois et jour seulement quand c'est possible, exemple 28/08/11, après mon transpose il garde la même valeur.

Je ne comprend pas pourquoi il inverse les jours et les mois, j'ai testé avec le mode pas à pas, lorsque j'alimente mon tableau les données sont entrées correctement, 06/09/11, c'est seulement lors du transposage que ça ne fonctionne plus.

Voici mon code:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
 
Sub tab()
Dim i, j, x, last, statut As Integer
Dim tabSche() As Variant
Dim tabScheDate() As Date
 
Application.ScreenUpdating = False
With Sheets("Data")
.Select
 
'test si il y a des valeur
If .Range("Q3").Value = "" Then
    Application.ScreenUpdating = True
    Exit Sub
End If
 
last = .Range("Q65536").End(xlUp).Row
x = 0
    For i = 3 To last
        If i = 3 Or Cells(i, 17) <> Cells(i - 1, 17) Then
            x = x + 1
            ReDim Preserve tabSche(1 To 11, 1 To x)
            For j = 1 To 9
                tabSche(j, x) = Cells(i, 16 + j)
            Next j
            ReDim Preserve tabScheDate(1 To 2, 1 To x)
            For j = 1 To 2
                tabScheDate(j, x) = Format(Cells(i, 25 + j), "dd/mm/yy")
            Next j
        End If
    Next i
End With
 
With Sheets("TCD")
.Select
 
Range(Cells(5, 29), Cells(UBound(tabSche, 2) + 4, 37)) = Application.WorksheetFunction.Transpose(tabSche)
Range(Cells(5, 38), Cells(UBound(tabScheDate, 2) + 4, 39)) = Application.WorksheetFunction.Transpose(tabScheDate)
end sub
Merci d'avance pour votre aide
Beaudelicius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2011, 18h26   #2
Expert Confirmé
 
Philippe Tulliez
Développeur et formateur VBA, Excel et Word.
Inscription : janvier 2010
Messages : 1 306
Détails du profil
Informations personnelles :
Nom : Philippe Tulliez
Localisation : Belgique

Informations professionnelles :
Activité : Développeur et formateur VBA, Excel et Word.

Informations forums :
Inscription : janvier 2010
Messages : 1 306
Points : 2 654
Points : 2 654
Bonjour,
Je modifierais la ligne 28
Code :
tabScheDate(j, x) = Format(Cells(i, 25 + j), "dd/mm/yy")
Par
Code :
tabScheDate(j, x) = CDate(Cells(i, 25 + j))
Je n'ai pas testé jusqu'à la dernière ligne car n'ayant pas les mêmes données que toi, je n'ai pas pu faire le Transpose.
A éviter aussi les Select.
__________________
Philippe Tulliez
http://philippe.tulliez.be
Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)

Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
corona est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2011, 20h00   #3
Nouveau Membre du Club
 
Homme
Administrateur de base de données
Inscription : mai 2011
Messages : 99
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Bâtiment

Informations forums :
Inscription : mai 2011
Messages : 99
Points : 29
Points : 29
Ça ne fonctionne pas...

Le tableau s'aliment bien, c'est vraiment lorsque je transpose mon tableau que les valeurs changent.

Il y aurait-il un moyen d'indiquer lors du transposage que les valeur sont des date?

Merci
Beaudelicius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2011, 20h04   #4
Rédacteur
 
Avatar de Ormonth
 
Homme Didier GONARD
Formateur Développeur Office - indépendant
Inscription : février 2008
Messages : 2 353
Détails du profil
Informations personnelles :
Nom : Homme Didier GONARD
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Formateur Développeur Office - indépendant

Informations forums :
Inscription : février 2008
Messages : 2 353
Points : 4 682
Points : 4 682
Citation:
Envoyé par Beaudelicius Voir le message
La macros inverse les mois et les jours, exemple dans ma liste de données originale, les dates sont 06/09/11, lorsque je transpose mon tableau il indique 09/06/11, mais il inverse les mois et jour seulement quand c'est possible, exemple 28/08/11, après mon transpose il garde la même valeur.

Je ne comprend pas pourquoi il inverse les jours et les mois...
Bonjour,

vois ceci

http://didier-gonard.developpez.com/...et-vba/#LIII-B

Tu peux essayer de passer par les N°s de série pour les manip (cf le tuto / N°s série) eux ne bougent pas, ensuite c'est une question de formatage...

cordialement,

Didier
__________________
Didier Gonard

Ps :
Pour noter positivement ou négativement un post, vous pouvez cliquer sur les pouces en bas à droite !
Tutoriels : Voir la liste de mes tutoriels et mon site pro sur ma Page DVP
N'oubliez pas de mettre : ..quand c'est le cas !
Ormonth est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2011, 20h05   #5
Expert Confirmé
 
Philippe Tulliez
Développeur et formateur VBA, Excel et Word.
Inscription : janvier 2010
Messages : 1 306
Détails du profil
Informations personnelles :
Nom : Philippe Tulliez
Localisation : Belgique

Informations professionnelles :
Activité : Développeur et formateur VBA, Excel et Word.

Informations forums :
Inscription : janvier 2010
Messages : 1 306
Points : 2 654
Points : 2 654
Bonjour,
Si les données sont correctes, c'est le bon formatage que tu dois appliquer à la cellule et pas à la variable de ton tableau lorsque tu écris dans la cellule.
__________________
Philippe Tulliez
http://philippe.tulliez.be
Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)

Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
corona est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2011, 20h57   #6
Nouveau Membre du Club
 
Homme
Administrateur de base de données
Inscription : mai 2011
Messages : 99
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Bâtiment

Informations forums :
Inscription : mai 2011
Messages : 99
Points : 29
Points : 29
Ok ça fonctionne, j'ai passé par les No de série.

Mon code

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Sub Liste_schedule()
Dim i, j, x, last, statut As Integer
Dim tabSche() As Variant
Dim tabScheDate() As Long
 
Application.ScreenUpdating = False
With Worksheets("Data")
 
    'test si il y a des valeur
    If .Range("Q3").Value = "" Then
        Application.ScreenUpdating = True
        Exit Sub
    End If
 
    last = .Range("Q65536").End(xlUp).Row
    x = 0
        For i = 3 To last
            If i = 3 Or .Cells(i, 17) <> .Cells(i - 1, 17) Then
                x = x + 1
                ReDim Preserve tabSche(1 To 10, 1 To x)
                For j = 1 To 9
                    tabSche(j, x) = .Cells(i, 16 + j)
                Next j
                ReDim Preserve tabScheDate(1 To 2, 1 To x)
                For j = 1 To 2
                    tabScheDate(j, x) = CLng(.Cells(i, 24 + j))
                Next j
            End If
        Next i
End With
Merci de votre aide!!
Beaudelicius est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h47.


 
 
 
 
Partenaires

Hébergement Web