IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Incompatibilité de type / Date


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2008
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 46
    Par défaut Incompatibilité de type / Date
    Bonjour !
    J'ai un pb d'incompatibilité de type : je voudrais rentrer des dates dans un tableau déclaré de type "date". Ca ne marchait pas donc pour plus de sureté j'ai rajouté une ligne de code comme quoi les données à rentrer dans le tableau sont bien des dates. Et ça ne marche toujours pas.... (L'ordi m'affiche explicitement que c'est un pb d'incompatibilité de type). Voici mon code : (en gras les lignes intéressantes, en souligné celle qui pose problème)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Option Explicit
    Option Base 0
    Public lMSN() As Integer
    Public lSDT() As String
    Public lTEST() As String
    Public lDATE() As Date
    
    Sub Listes()
    
        Dim tbl As Range, tbl2 As Range, cel As Range, cel2 As Range
        Dim n As Integer
        
        Set cel = ThisWorkbook.Worksheets("Sheet1").Range("A1")
        Set cel2 = ThisWorkbook.Worksheets("Sheet3").Range("A1")
    
    'instructions.................................
    
        Set tbl2 = cel2.CurrentRegion
        tbl2.NumberFormat = "dd/mm/yy"
    
    'Rentrée des données dans un tableau
        n = 1
        lDATE(0) = cel2
        Do While cel2.Offset(n, 0) <> ""
        lDATE(n) = cel2.Offset(n, 0)
        n = n + 1
        Loop
    
    'instructions......................................
    
    End Sub
    Si quelqu'un a un avis sur la question... Toute aide est la bienvenue !

  2. #2
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonjour,

    - un tableau dynamique doit être dimensionné pour recevoir des valeurs (je ne voizs pas où tu dimensionnes le tien)

    exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Command1_Click()
      Dim letableau(3) As Date
      For i = 0 To UBound(letableau)
        letableau(i) = Date + i
      Next
      DoEvents
      For i = 0 To UBound(letableau)
       MsgBox letableau(i)
      Next
    End Sub
    - typé en date, il ne peut recevoir que des valeurs typées en date.

  3. #3
    Membre Expert
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    Par défaut
    bah forcément t'essaie de mettre un Range dans un tableau de dates...
    Il faudrait scanner toutes les cellules du Range et les introduire une à une dans le tableau...

  4. #4
    Membre averti
    Inscrit en
    Juillet 2008
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 46
    Par défaut
    un tableau dynamique doit être dimensionné pour recevoir des valeurs(je ne vois pas où tu dimensionnes le tien)
    Ici : (je ne l'avais pas noté dans mon message)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set tbl2 = cel2.CurrentRegion
        ReDim Preserve lMSN(tbl2.Rows.Count)
    bah forcément t'essaie de mettre un Range dans un tableau de dates...
    Si je comprends bien "cel2" est de type Range même si je le mets en format Date...

    Il faudrait scanner toutes les cellules du Range et les introduire une à une dans le tableau...
    Ca se fait comment ça ?

  5. #5
    Membre averti
    Inscrit en
    Juillet 2008
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 46
    Par défaut
    J'ai la vague impression que Gorfael et supersnail vous n'êtes pas d'accord....

    J'ai essayé ton code Gorfael, il marche. J'avais regardé l'aide en ligne sur ReDim mais effectivement je n'avais tout compris; je vais revoir ça... Merci pour l'aide !

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut pythagore3_14 et le forum
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    J'ai la vague impression que Gorfael et supersnail vous n'êtes pas d'accord....
    C'est qu'une impression.
    On ne parle pas de la même chose :
    Sur la macro initiale, on avait : lDATE() = cel2 est je pense que c'est cette instruction que supersnail "critiquait".
    A+

  7. #7
    Membre Expert
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    Par défaut
    Effectivivement je critiquais bien cette instruction...
    par contre je n'avais pas vu l'histoire des redim...
    PS: N'oublie pas le tag !

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut pythagore3_14 et le forum
    Public lDATE() As Date
    Tu as donc déclaré un tableau comme devant recevoir des dates
    Excel attend :
    - que tu initialises ce tableau à l'aide d'une instruction Redim (pour fixer le nombre d'indice (1 par défaut) et la valeur maximale de chaque indice (pas de valeur par défaut)
    Regardes l'aide pour les tableau et ReDim
    'Rentrée des données dans un tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    n = 0
    redim lDATE(0)
    Do While cel2.Offset(n, 0) <> ""
         redim preserve lDATE(n) 
         lDATE(n) = cel2.Offset(n, 0)
         n = n + 1
    Loop
    La première instruction Redim ne peut pas comporter Preserve (comment sauvegarder une chose inexistante ?).
    La seconde n'est pas forcément à la bonne place, ou demandera peut-être un test (si n>0 alors, redim preserve...). Mais j'ai la flemme de tester
    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Incompatibilité de type pour une date
    Par emulamateur dans le forum VBA Access
    Réponses: 1
    Dernier message: 29/04/2011, 13h03
  2. Annuler InputBox en format date. Incompatibilité de type
    Par Mairequimby dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 18/12/2009, 15h01
  3. [AC-2002] Requête SQL avec date => Incompatibilité de type
    Par waici dans le forum VBA Access
    Réponses: 3
    Dernier message: 31/08/2009, 09h59
  4. Réponses: 10
    Dernier message: 26/11/2008, 18h13
  5. Incompatibilité de type de date
    Par Kalvin_20 dans le forum VBA Access
    Réponses: 4
    Dernier message: 12/06/2008, 08h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo