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 :

- Erreur Type Mismatch - additem Sheets( ).cells( )


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2007
    Messages : 89
    Points : 41
    Points
    41
    Par défaut - Erreur Type Mismatch - additem Sheets( ).cells( )
    Alors là j'ai une erreur très très très bizare...

    Je viens de finir une macro, tout fonctionne, je suis content, je l'envoi par mail et là sur certaines machines on me met une erreur "TypeMismatch" quand je veux remplir des listes déroulantes !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     With Cbo_parameters
            .AddItem Sheets("Data").Range("A2") 'de cette manière ou 
            .AddItem Sheets("Data").Cells(5, 1)
            . etc.....    
       End With
    Que j'utilise cells ou range rien ne fonctionne.... Bizarre !

    Surtout qu'en vérifiant les versions nous avons exactement les mêmes...

    Si quelqu'un sais pourquoi ?

    @+

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2007
    Messages : 89
    Points : 41
    Points
    41
    Par défaut
    En fait toute ma macro n'est pas utilisable, dès que j'utilise cells ou Range ça s'arrete !! C'est dommage car forcement j'en utilise partout....

    Voilà mon Code, je le trouve plus ou moins basic alors M**** qu'est ce qui marche pas ??? J'étais dans les temps ça m'ennerve !

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    Private Sub CommandButton1_Click()
     
    Dim i As Integer
    Dim r1 As Range
    Dim r2 As Range
    Dim ranges As Range
    Dim DebutX As Integer
    Dim FinX As Integer
    Dim j As Integer
    Dim k As Integer
    Dim titre As String
    Dim ch As ChartObject
    Dim nompage As String
     
    nompage = Cbo_parameters.Value
     
     
     
    'Error Messages
     
    If cbo_debut.ListIndex > cbo_fin.ListIndex Then
    MsgBox "The end Date has to be greater than the stat date"
    End If
     
    If cbo_debut.Value = "Select" Then
    MsgBox "Please enter a start date"
    End If
     
    If cbo_fin.Value = "Select" Then
    MsgBox "Please enter an end date"
    End If
     
    If Cbo_parameters.Value = "Select" Then
    MsgBox "Please Select a Parameters"
    End If
     
     
     
     
    'Define i depending on Parameters selected
     
     
     
      If Cbo_parameters.Value = "PET Coincidence Mean Value" Then
            i = 2
        ElseIf Cbo_parameters.Value = "PET Coincidence Variance" Then
            i = 5
        ElseIf Cbo_parameters.Value = "PET Singles Mean" Then
            i = 8
        ElseIf Cbo_parameters.Value = "PET Singles Variance" Then
            i = 11
        ElseIf Cbo_parameters.Value = "PET Mean Deadtime" Then
            i = 14
        ElseIf Cbo_parameters.Value = "PET Timing Mean" Then
            i = 17
        ElseIf Cbo_parameters.Value = "PET Energy Shift" Then
            i = 20
        ElseIf Cbo_parameters.Value = "All of the above" Then
            All_Graphs.All_Graphs
     
     
     
            Exit Sub
     
        End If
     
     
    'Define Chart title
     
     If Cbo_parameters.Value = "PET Coincidence Mean Value" Then
            titre = "PET Coincidence Mean Value"
     
        ElseIf Cbo_parameters.Value = "PET Coincidence Variance" Then
            titre = "PET Coincidence Variance"
     
        ElseIf Cbo_parameters.Value = "PET Singles Mean" Then
           titre = "PET Singles Mean"
     
        ElseIf Cbo_parameters.Value = "PET Singles Variance" Then
            titre = "PET Singles Variance"
     
        ElseIf Cbo_parameters.Value = "PET Mean Deadtime" Then
            titre = "PET Mean Deadtime"
     
        ElseIf Cbo_parameters.Value = "PET Timing Mean" Then
           titre = "PET Timing Mean"
     
        ElseIf Cbo_parameters.Value = "PET Energy Shift" Then
            titre = "PET Energy Shift"
     
      End If
     
     
     
    'Start & End Date selection based on the Combo Boxes
    'ICI PREMIER ERREUR  !!!!! car j'utilise cells
    For j = 2 To 256
    If CDate(Cells(1, j).Value) = CDate(cbo_debut.Value) Then
    DebutX = j
    End If
    Next j
     
    For k = 2 To 256
     If CDate(Cells(1, k).Value) = CDate(cbo_fin.Value) Then
    FinX = k
    End If
    Next
     
    'Chart Range Definiton
    'Erreur Majeur ici !!!!
    Set r1 = Sheets("Data").Range(Cells(1, DebutX), Cells(1, FinX))
    Set r2 = Sheets("Data").Range(Cells(i, DebutX), Cells(i + 2, FinX))
    Set ranges = Union(r1, r2)
     
     
    'Chart Creation
     
    Charts.Add
     
     
    'Chart options
     
        ActiveChart.ChartType = xlLineMarkers
        ActiveChart.SetSourceData Source:=ranges, PlotBy:= _
            xlRows
        ActiveChart.Location Where:=xlLocationAsNewSheet, Name:=nompage
        ActiveChart.Axes(xlCategory, xlPrimary).HasTitle = False
        ActiveChart.Axes(xlValue, xlPrimary).HasTitle = False
        ActiveChart.HasAxis(xlCategory, xlPrimary) = True
        ActiveChart.HasAxis(xlValue, xlPrimary) = True
        ActiveChart.Axes(xlCategory, xlPrimary).CategoryType = xlCategoryScale
     
     
    'Chart Series & Title Names
        ActiveChart.SeriesCollection(1).Name = "Mean Value"
        ActiveChart.SeriesCollection(2).Name = "Min"
        ActiveChart.SeriesCollection(3).Name = "Max"
        ActiveChart.HasTitle = True
        ActiveChart.ChartTitle.Characters.Text = titre
     
    'X axis layout
     
        ActiveChart.Axes(xlCategory, xlPrimary).CategoryType = xlAutomatic
        ActiveChart.Axes(xlCategory).Select
        Selection.TickLabels.NumberFormat = "mm/dd/yyyy"
     
     
    cbo_debut.Clear
    Cbo_parameters.Clear
    cbo_fin.Clear
    Unload Alliance_Form
     
     
    End Sub
     
    Private Sub Label5_Click()
     
    End Sub
    Private Sub UserForm_Activate()
     
    Dim X As Integer
    Dim Y As Integer
     
    'Combo Boxes filling
     
        For X = 2 To 256
        If Cells(1, X).Value = "" Then
        Else
        cbo_debut.AddItem Format(Sheets("Data").Cells(1, X), "mm/dd/yyyy")
         End If
          Next X
     
         For X = 2 To 256
         If Cells(1, X).Value = "" Then
        Else
        cbo_fin.AddItem Format(Sheets("Data").Cells(1, X), "mm/dd/yyyy")
        End If
          Next X
     
        With Cbo_parameters
            .AddItem "PET Coincidence Mean Value"
            .AddItem "PET Coincidence Variance"
            .AddItem "PET Singles Mean"
            .AddItem "PET Singles Variance"
            .AddItem "PET Mean Deadtime"
            .AddItem "PET Timing Mean"
            .AddItem "PET Energy Shift"
            .AddItem "All of the above"
     
     
     
     
       End With
     
    End Sub
    En faitr c'est aussi quand il y a sheets("Data") alors ptet que c'est ça aussi ???

    Moi qui voulais mettre ma macro bien utile en ligne pour creer des graphs et des rapport tout automatique !!

    @+++

    Arnaud

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 514
    Points : 824
    Points
    824
    Par défaut
    Bonjour,

    Je crois comprendre que tu veux recuperer la position de l'element sélectionné dans tes variables DebutX et FinX. Si c'est bien le cas tu devrais pouvoir le faire en remplacant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    For j = 2 To 256
    If CDate(Cells(1, j).Value) = CDate(cbo_debut.Value) Then
    DebutX = j
    End If
    Next j
     
    For k = 2 To 256
     If CDate(Cells(1, k).Value) = CDate(cbo_fin.Value) Then
    FinX = k
    End If
    Next
    Par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    DebutX=cbo_debut.ListIndex + 2
    FinX=cbo_fin.ListIndex + 2
    Le +2 compense le décalage entre l'index des listes (commencant à 0) et les colonnes auxquelle elles correspondent.

    'Erreur Majeur ici !!!!
    Set r1 = Sheets("Data").Range(Cells(1, DebutX), Cells(1, FinX))

    Plusieurs choses peuvent poser problemes:
    - La feuille "Data" n'existe pas.
    - DebutX (et/ou FinX) est supérieur à 256.
    - Cells n'est pas précédé du nom de la feuille, ce sont donc les cellules de la feuille active au moment de l'exécution qui sont renvoyées.

    Enfin, et meme si ca n'a rien a voir avec ton probleme tu peux optimiser ton code en plusieurs endroits:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
        For X = 2 To 256
        If Cells(1, X).Value = "" Then
        Else
        cbo_debut.AddItem Format(Sheets("Data").Cells(1, X), "mm/dd/yyyy")
         End If
          Next X
         For X = 2 To 256
         If Cells(1, X).Value = "" Then
        Else
        cbo_fin.AddItem Format(Sheets("Data").Cells(1, X), "mm/dd/yyyy")
        End If
          Next X
    Peut etre remplace par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    For x = 2 To 256
        If Cells(1, x).Value <> "" Then _
            cbo_debut.AddItem Format(Sheets("Data").Cells(1, x), "mm/dd/yyyy")
    Next x
    cbo_fin.List = cbo_debut.List
    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
     
     If Cbo_parameters.Value = "PET Coincidence Mean Value" Then
            titre = "PET Coincidence Mean Value"
     
        ElseIf Cbo_parameters.Value = "PET Coincidence Variance" Then
            titre = "PET Coincidence Variance"
     
        ElseIf Cbo_parameters.Value = "PET Singles Mean" Then
           titre = "PET Singles Mean"
     
        ElseIf Cbo_parameters.Value = "PET Singles Variance" Then
            titre = "PET Singles Variance"
     
        ElseIf Cbo_parameters.Value = "PET Mean Deadtime" Then
            titre = "PET Mean Deadtime"
     
        ElseIf Cbo_parameters.Value = "PET Timing Mean" Then
           titre = "PET Timing Mean"
     
        ElseIf Cbo_parameters.Value = "PET Energy Shift" Then
            titre = "PET Energy Shift"
     
      End If
    Peut etre remplace par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    titre=Cbo_parameters.Value
    Tiens nous au courant,

    Tirex28/

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2007
    Messages : 89
    Points : 41
    Points
    41
    Par défaut
    Bonjour,

    Merci pour les optimisation tirex28 c'est vrai qu'à beaucoup d'endroit elles peuvent être intéressantes... Y en à même encore plein d'autre !!!

    Très malin le coup du
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DebutX=cbo_debut.ListIndex + 2
    FinX=cbo_fin.ListIndex + 2
    Pour ce qui est des erreurs :
    Plusieurs choses peuvent poser problemes:
    - La feuille "Data" n'existe pas.
    - DebutX (et/ou FinX) est supérieur à 256.
    - Cells n'est pas précédé du nom de la feuille, ce sont donc les cellules de la feuille active au moment de l'exécution qui sont renvoyées.
    - La feuille Data existe, j'en suis sur c'est la feuille de base !
    - DebutX est recherché sur la ligne 1 donc comme il n'y a que 256 collones il ne peut ê > à 256... Et puis de tout façon mon tableau comporte que 10 collones pour l'instant !
    - Cells est précédé par le nom de la feuille puisque Range l'est, non ????

    Je vais essayer de rajouter Sheets("Data").cells() .. sur les machines avec lesquelles ça bug !

    Néanmoins, pourquoi alors que nous avons la même version d'Excel, ça ne fonctionne sur certains machines ?

    @+
    Arnaud

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2007
    Messages : 89
    Points : 41
    Points
    41
    Par défaut
    Effectivement les deux erreurs qui faisait planter la macro ont été résolu par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DebutX=cbo_debut.ListIndex + 2
    FinX=cbo_fin.ListIndex + 2
    et par le rajout de la feuille avant cells !!

    Merci mille fois Tirex28 ...

    @+

    Arnaud

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

Discussions similaires

  1. Erreur Type Mismatch
    Par DonaldTron dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 13/11/2007, 19h06
  2. Erreur type mismatch
    Par bugland dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 21/03/2007, 19h54
  3. Erreur : Type mismatch !
    Par Interruption13h dans le forum Langage SQL
    Réponses: 2
    Dernier message: 25/01/2007, 21h21
  4. Erreur type Mismatch
    Par bov13 dans le forum Access
    Réponses: 7
    Dernier message: 25/09/2006, 11h22
  5. Erreur : Type Mismatch
    Par ekinoxe dans le forum ASP
    Réponses: 1
    Dernier message: 17/02/2006, 10h51

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