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 :

Variables tableau : erreur Type Mismatch


Sujet :

Macros et VBA Excel

  1. #1
    Membre éprouvé
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Points : 1 124
    Points
    1 124
    Par défaut Variables tableau : erreur Type Mismatch
    Bonjour à tous et meilleurs voeux pour 2016
    Je suis en train de modifier une macro en utilisant des tableaux à deux dimensions afin d’optimiser mon temps de traitement, actuellement 144,6 sec…
    Dans un premier temps j’ai déclaré mes deux tableaux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim Table1() As String 'Declaration du tableau 1
    Dim Table2() As String 'Declaration du tableau 2
    Puis j’ai chargé mes tableaux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     ReDim Table1(0 To NbLine, 18) '18 etant le Nb de Col du fichier avec les donnees detaillees
    ReDim Table2(0 To NbLine1, 20) '20 etant le Nb de Col du fichier qui doit être importe 
     
            For i = 0 To UBound(Table1, 1)
                For j = 0 To 18
                    Table1(i, j) = Up.Offset(i, j)
                Next j
            Next i
     
            For i2 = 0 To UBound(Table2, 1)
                For j2 = 0 To 18
                    Table2(i2, j2) = Tsk.Offset(i2, j2)
                Next j2
            Next i2
    L’objectif de ma macro est de comparer certaines valeurs des deux tableaux pour modifier l’un d’entre eux et ensuite aller modifier mon fichier Excel avec le tableau mis à jour.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    For i = 0 To NbLine1
        For j = 0 To NbCol1
            Tsk.Offset(i, j) = Table1(i, j)
        Next j
    Next i
    Le problème est que j’obtiens une erreur “Type Mismatch” sur la ligne suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    If ((Table2(i2, 12) = 0 Or Table2(i2, 12) = "") And Table1(i, 14) = "00:00:00") Or ((Table2(i2, 12) = 0 Or Table2(i2, 12) = "") And Table1(i, 14) <> "00:00:00") Then
    J’ai mis un espion sur
    Table2(i2, 12)
    et je vois que ma variable est du type String, comme déclarée précédemment
    J’ai mis un autre espion sur l’expression
    (Table2(i2, 12) = 0 Or Table2(i2, 12) = "")
    et là mon expression est du type Integer, je pense que c’est là que ça cloche mais je ne sais pas pourquoi…
    Quelqu’un a-t-il une idée sur la co..rie que j’ai pu faire ou sur ce que je n’ai pas fait ?
    Merci pour votre aide et votre collaboration
    Eric
    "Vous n’avez cessé d’essayer ? Vous n’avez cessé d’échouer ? Aucune importance !
    Réessayez, échouez encore, échouez mieux." Samuel Beckett
    Pensez aux balises et
    Visitez les FAQ Excel et allez faire un tour ici
    Tutoriels de SilkyRoad

  2. #2
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    déclarer tes tableaux en String, et tout manipuler ainsi, c'est vraiment ce que tu souhaites ?

    si tel est le cas, entourer ton 0 par des guillemets, afin d'avoir une chaine de caractère au lieu d'un nombre... ça devrait le faire pour ce problème ?

  3. #3
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut


    'soir !

    Juste en passant, pas besoin de boucle pour affecter les valeurs d'une plage de cellules à une variable tableau !
    Suffit de lire le tutoriel ou les nombreux exemples dans les discussions de ce forum …
    Et si les données ne sont pas du même type, mieux vaut laisser la variable en Variant !


    ______________________________________________________________________________________________________
    Je suis Paris, Charlie, …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  4. #4
    Membre éprouvé
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Points : 1 124
    Points
    1 124
    Par défaut
    MarcL,
    Si j'écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Table1(i,j)= Range(A1: T6630)
    Toutes les valeurs de mon tableau prendront les valeurs de chacune des cellules et donc pas besoin de boucler, c'est ça?
    Éric
    "Vous n’avez cessé d’essayer ? Vous n’avez cessé d’échouer ? Aucune importance !
    Réessayez, échouez encore, échouez mieux." Samuel Beckett
    Pensez aux balises et
    Visitez les FAQ Excel et allez faire un tour ici
    Tutoriels de SilkyRoad

  5. #5
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    teste ça sur une feuille vierge

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Tableaux()
    Dim LesValeurs()
     
    For i = 1 To 20
        For j = 1 To 26
            Cells(i, j).Value = "$" & Chr(64 + j) & "$" & i
        Next j
    Next i
     
    LesValeurs = Cells(1, 1).CurrentRegion.Value
    MsgBox LesValeurs(2, 4) & " = " & Cells(2, 4).Address
     
    End Sub

  6. #6
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Table1()= Range(A1: T6630)
    Range(A1: T6630)=Table1
    Range("a1").Resize(ubound(Table1),ubound(Table1,1))=Table1
    Dernière modification par Invité ; 30/01/2016 à 01h19.

  7. #7
    Membre éprouvé
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Points : 1 124
    Points
    1 124
    Par défaut
    MarcL,
    Voici la page que j'ai consulté et qui m'a fait pensé que je codais correctement pour charger mon tableau, mais j'ai peut-être zappé une subtilité

    http://didier-gonard.developpez.com/...s-tableau-vba/

    et plus précisément le chapitre: VIII-B-2. Via une variable tableau à deux dimensions.

    Voilà donc pour charger mon tableau, ce n'est peut-être pas la méthode la plus rapide, (j'ai testé les propositions de Robert et de Joe sans succès ) mais le tableau se charge -> vérification avec Debug.Print.

    Mon souci, Type Mismatch demeure, même si j'ai déclaré mes tableaux différemment
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim Table1()  'Declaration du tableau 1
    Dim Table2()  'Declaration du tableau 2
    Ce que je souhaite faire n'est peut-être pas possible avec les tableaux car je veux effectuer des comparaisons des valeurs de mes tableaux entre eux et avec des données extérieures du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Month(Table2(i2, 14)) = Month(Data_Date) And Year(Table2(i2, 14)) = Year(Data_Date) Then
                Table2(i2, 12) = Table2(i2, 14)
    End If
    Dans l'exemple ci-dessus
    a pour valeur dans ma fenêtre d'espions
    <Type mismatch>
    Comme mon code sans utilisation des tableaux à deux dimensions fonctionne et a moins que quelqu'un ne puisse m'aiguiller, je vais donc rester sur cette version.

    Eric
    "Vous n’avez cessé d’essayer ? Vous n’avez cessé d’échouer ? Aucune importance !
    Réessayez, échouez encore, échouez mieux." Samuel Beckett
    Pensez aux balises et
    Visitez les FAQ Excel et allez faire un tour ici
    Tutoriels de SilkyRoad

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    ton tableau contient des variants pas des dates!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Dim Table1() as varaiant  'Declaration du tableau 1
    Dim Table2()  as varaiant  'Declaration du tableau 2
    '<Type mismatch>
    'Month(Table2(i2, 14))
    Month(cdate(Table2(i2, 14))) '<Type Date>

  9. #9
    Membre éprouvé
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Points : 1 124
    Points
    1 124
    Par défaut
    Bonjour Robert,
    Erreur de copie de mon code, voici ce que j'ai mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim Table1() 'As Variant 'Declaration du tableau 1
    Dim Table2()  'As Variant 'Declaration du tableau 2
    De fait l'erreurType Mismatch intervient plus loin dans mon code et non plus au début
    Eric
    "Vous n’avez cessé d’essayer ? Vous n’avez cessé d’échouer ? Aucune importance !
    Réessayez, échouez encore, échouez mieux." Samuel Beckett
    Pensez aux balises et
    Visitez les FAQ Excel et allez faire un tour ici
    Tutoriels de SilkyRoad

  10. #10
    Membre éprouvé
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Points : 1 124
    Points
    1 124
    Par défaut
    Robert,
    Je viens de m'apercevoir que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim Table1() As Variant 'Declaration du tableau 1
    Dim Table2()   As Variant 'Declaration du tableau 2
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim Table1()  'Declaration du tableau 1
    Dim Table2()   'Declaration du tableau 2
    c'est la même chose
    "Vous n’avez cessé d’essayer ? Vous n’avez cessé d’échouer ? Aucune importance !
    Réessayez, échouez encore, échouez mieux." Samuel Beckett
    Pensez aux balises et
    Visitez les FAQ Excel et allez faire un tour ici
    Tutoriels de SilkyRoad

  11. #11
    Invité
    Invité(e)
    Par défaut
    Oui

  12. #12
    Membre éprouvé
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Points : 1 124
    Points
    1 124
    Par défaut
    Robert,
    Et donc ce que je souhaite faire n'est pas possible avec des tableaux à deux dimensions, car certaines données sont des dates, d'autre des nombres, c'est ça?
    Eric
    "Vous n’avez cessé d’essayer ? Vous n’avez cessé d’échouer ? Aucune importance !
    Réessayez, échouez encore, échouez mieux." Samuel Beckett
    Pensez aux balises et
    Visitez les FAQ Excel et allez faire un tour ici
    Tutoriels de SilkyRoad

  13. #13
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if isdate(Table2(i2, 14))=true and instr(Table2(i2, 14),"/")<>0 then Month(cdate(Table2(i2, 14)))
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if isdate(Table2(i2, 14))=true and instr(Table2(i2, 14),"/")<>0 then M= Format(Table2(i2, 14),"mm")

  14. #14
    Membre éprouvé
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Points : 1 124
    Points
    1 124
    Par défaut
    Robert,
    Ton code m'a mis la puce a l'oreille, voici ce que j'ai écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Table2(i2, 14) = IsDate(Table2(i2, 14))
     
            If Month(Table2(i2, 14)) = Month(Data_Date) And Year(Table2(i2, 14)) = Year(Data_Date) Then
                Table2(i2, 12) = Table2(i2, 14)
            End If
    J'ai donc passe un écueil mais je bloque par la suite, il semblerai que lors du chargement de ma Table2 je bifurque à un certain moment vers les données qui alimentent ma Table1.
    L'une des données de ma Table2 a pour valeur ce que je devrai avoir en Table1, il faut que je vérifie si je ne me suis pas mélangé les pinceaux

    Eric
    "Vous n’avez cessé d’essayer ? Vous n’avez cessé d’échouer ? Aucune importance !
    Réessayez, échouez encore, échouez mieux." Samuel Beckett
    Pensez aux balises et
    Visitez les FAQ Excel et allez faire un tour ici
    Tutoriels de SilkyRoad

  15. #15
    Invité
    Invité(e)
    Par défaut
    Attention un numérique est vu comme une date
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if isdate(632) then msgbox "Ok"
    d'ou le instr pour tester le "/" d'une date

  16. #16
    Membre éprouvé
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Points : 1 124
    Points
    1 124
    Par défaut
    Tout a fait d'accord mais j'obtiens ce que je recherche car Table2(i2, 14) contient bien une date mais précédée d'une apostrophe (donc du texte ). Avec la fonction [IsDate], ma comparaison fonctionne.
    "Vous n’avez cessé d’essayer ? Vous n’avez cessé d’échouer ? Aucune importance !
    Réessayez, échouez encore, échouez mieux." Samuel Beckett
    Pensez aux balises et
    Visitez les FAQ Excel et allez faire un tour ici
    Tutoriels de SilkyRoad

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

Discussions similaires

  1. - Erreur Type Mismatch - additem Sheets( ).cells( )
    Par nono le golfeur dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 04/07/2007, 17h51
  2. Erreur type mismatch
    Par bugland dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 21/03/2007, 18h54
  3. Erreur : Type mismatch !
    Par Interruption13h dans le forum Langage SQL
    Réponses: 2
    Dernier message: 25/01/2007, 20h21
  4. Erreur type Mismatch
    Par bov13 dans le forum Access
    Réponses: 7
    Dernier message: 25/09/2006, 10h22
  5. Erreur : Type Mismatch
    Par ekinoxe dans le forum ASP
    Réponses: 1
    Dernier message: 17/02/2006, 09h51

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