ERREUR 13 incompatibilité de type [RESOLU]

goldfinger13

XLDnaute Occasionnel
Dans un fichier (trop volumineux pour être mis en ligne) j'organise le suiviv d'un parc automobile.
Cette opération s'effectue en plusieurs temps.
Dans un premier temps je rentre les données au moyen d'un formulaire simple.
Ensuite pour effectuer ce suivi je recherche les données précédentes afin de pouvoir les compléter.
J'ai plusieurs champs date à saisir (champs qui ne seront pas tous mis à jour en même temps et donc vont rester vides)
je rencontre une difficulté que je n'arrive pas à résoudre une erreur 13 incompatibilité de type sur cette ligne
Code:
      BASEINTERVENTIONS.Cells(K, J + 9) = CDate(ListView1.ListItems(I).ListSubItems(J).Text)

je joins un fichier vous donne la structure de la feuille concernée
et ci dessous le code complet

Code:
Private Sub UserForm_initialize()
 Dim derlig As Long
derlig = BASEINTERVENTIONS.[A65000].End(xlUp).Row
    
    With Me.ListView1
    .View = 3
    .Gridlines = True
           With .ColumnHeaders
               .Add , , "NUMERO DEMANDE", 80
               .Add , , "TRAVAUX DEMANDES", 150
               .Add , , "AUTO 24", 50
               .Add , , "GARAGISTE", 50
               .Add , , "DATE DEBUT TRAVAUX", 60
               .Add , , "TRAVAUX REALISES", 30
               .Add , , "DATE RESTITUTION", 60
               .Add , , "VALIDATION FACTURE", 30
               .Add , , "COMMENTAIRES", 200
               .Add , , "FACTURE ", 80

           End With
           

    For I = 2 To derlig
    
      .ListItems.Add , , BASEINTERVENTIONS.Cells(I, 5).Value
      .ListItems(.ListItems.Count).ListSubItems.Add , , BASEINTERVENTIONS.Cells(I, 10).Value
      .ListItems(.ListItems.Count).ListSubItems.Add , , BASEINTERVENTIONS.Cells(I, 11).Value
      .ListItems(.ListItems.Count).ListSubItems.Add , , BASEINTERVENTIONS.Cells(I, 12).Value
      .ListItems(.ListItems.Count).ListSubItems.Add , , Format(BASEINTERVENTIONS.Cells(I, 13).Value, "dd/mm/yyyy")
      .ListItems(.ListItems.Count).ListSubItems.Add , , BASEINTERVENTIONS.Cells(I, 14).Value
      .ListItems(.ListItems.Count).ListSubItems.Add , , Format(BASEINTERVENTIONS.Cells(I, 15).Value, "dd/mm/yyyy")
      .ListItems(.ListItems.Count).ListSubItems.Add , , BASEINTERVENTIONS.Cells(I, 16).Value
      .ListItems(.ListItems.Count).ListSubItems.Add , , BASEINTERVENTIONS.Cells(I, 17).Value
      .ListItems(.ListItems.Count).ListSubItems.Add , , BASEINTERVENTIONS.Cells(I, 18).Value

    Next I
    
End With

End Sub

Private Sub ListView1_BeforeLabelEdit(Cancel As Integer)
    
    
End Sub
Private Sub ListView1_click()
  Me.TextBox1.Text = ListView1.SelectedItem.Text
    Me.TextBox2.Text = ListView1.SelectedItem.ListSubItems(1).Text
    Me.TextBox3.Text = ListView1.SelectedItem.ListSubItems(2).Text
    Me.ComboBox1.Text = ListView1.SelectedItem.ListSubItems(3).Text
    Me.TextBox4.Value = ListView1.SelectedItem.ListSubItems(4).Text
    Me.ComboBox2.Text = ListView1.SelectedItem.ListSubItems(5).Text
    Me.ComboBox3.Text = ListView1.SelectedItem.ListSubItems(7).Text
    Me.TextBox5.Value = ListView1.SelectedItem.ListSubItems(6).Text
    Me.TextBox6.Text = ListView1.SelectedItem.ListSubItems(8).Text
    Me.TextBox7.Text = ListView1.SelectedItem.ListSubItems(9).Text

End Sub
Private Sub CommandButton1_Click()
    ListView1.SelectedItem.Text = Me.TextBox1.Text
    ListView1.SelectedItem.ListSubItems(1).Text = Me.TextBox2.Text
    ListView1.SelectedItem.ListSubItems(2).Text = Me.TextBox3.Text
    ListView1.SelectedItem.ListSubItems(3).Text = Me.ComboBox1.Text
    ListView1.SelectedItem.ListSubItems(4).Text = CDate(Me.TextBox4.Value)
    ListView1.SelectedItem.ListSubItems(5).Text = Me.ComboBox2.Text
    ListView1.SelectedItem.ListSubItems(6).Text = CDate(Me.TextBox5.Value)
    ListView1.SelectedItem.ListSubItems(7).Text = Me.ComboBox3.Text
    ListView1.SelectedItem.ListSubItems(8).Text = Me.TextBox6.Text
    ListView1.SelectedItem.ListSubItems(9).Text = Me.TextBox7.Text

Dim I As Integer
Dim J As Byte
Dim K As Integer
    K = 2
    For I = 1 To ListView1.ListItems.Count
    BASEINTERVENTIONS.Cells(K, 5) = ListView1.ListItems(I).Text
    For J = 1 To ListView1.ColumnHeaders.Count - 1
    If J = 4 Or J = 6 Then
        BASEINTERVENTIONS.Cells(K, J + 9) = CDate(ListView1.ListItems(I).ListSubItems(J).Text)
    Else
        BASEINTERVENTIONS.Cells(K, J + 9) = ListView1.ListItems(I).ListSubItems(J).Text
    End If
Next J
    BASEINTERVENTIONS.Cells(K, 19).FormulaR1C1 = "=RC[-4]-RC[-6]"
    BASEINTERVENTIONS.Cells(K, 20).FormulaR1C1 = "=RC[-7]-RC[-11]"
    K = K + 1
    Next I
  

End Sub
j'ai bien cherché une solution sur le forum et d'autres sites mais je n'arrive pas à trouver de solution

si quelqu'un pouvait m'aider à débrouiller ce bug j'en serais ravi


ps:j'ai un petit doute sur le fait que certaines lignes avec dates soient vides mais je ne sais pas si cela constitue un début de sulotion
merci d'avance pour votre aide
 

Pièces jointes

  • BASEINTERVENTIONS.xls
    20.5 KB · Affichages: 50
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : ERREUR 13 incompatibilité de type

2 solutions:
1 - Testez si le subitem n'est pas vide avant d'essayez de l'affecter converti en date à la cellule,
2 - Mettez avant l'insruction qui plante: On Erreur Resume Next,
après elle If Err Then MesureÀPrendreEnConséquence
et enfin: On Error GoTo 0
À +
 

goldfinger13

XLDnaute Occasionnel
Re : ERREUR 13 incompatibilité de type

bonsoir j'ai testé avec la première solution de cette manière

Code:
......
If ListView1.ListItems(I).ListSubItems(J).Text <> "" Then
    BASEINTERVENTIONS.Cells(K, J + 9) = CDate(ListView1.ListItems(I).ListSubItems(J).Text)
  Else
    BASEINTERVENTIONS.Cells(K, J + 9) = ""
  End If
.......

excel "mouline" aucune date ne s'incrivent dans la base

Sur la deuxième solution
Code:
    BASEINTERVENTIONS.Cells(K, 5) = ListView1.ListItems(i).Text
For J = 1 To ListView1.ColumnHeaders.Count - 1
  If J = 4 Or J = 6 Then
   On Error Resume Next
            BASEINTERVENTIONS.Cells(K, J + 9) = CDate(ListView1.ListItems(i).ListSubItems(J).Text)
   If Err Then
     BASEINTERVENTIONS.Cells(K, J + 9) = ""
    Else
        BASEINTERVENTIONS.Cells(K, J + 9) = ListView1.ListItems(i).ListSubItems(J).Text
    End If
   On Error GoTo 0
Next J
j'obtiens une erreur next sans for
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : ERREUR 13 incompatibilité de type

Manque un End If dans la seconde solution, alors en effet il n'y a pas de For dans le bloc If_Then contenant le Next
Vous auriez intérêt à mieux soigner l'indentation...
À +
 

goldfinger13

XLDnaute Occasionnel
Re : ERREUR 13 incompatibilité de type

problème résolu
merci à Dranreb
suppression des cdate sur les textbox 4 et 5 qui bloquaient lorsqu'une des deux était vide
la solution on error
l'indentation un peu mieux soignée !!!
le code rectifié ça peut servir à quelqu'un
Code:
Private Sub CommandButton1_Click()
Dim i As Integer
Dim J As Byte
Dim K As Integer

    ListView1.SelectedItem.Text = Me.TextBox1.Text
    ListView1.SelectedItem.ListSubItems(1).Text = Me.TextBox2.Text
    ListView1.SelectedItem.ListSubItems(2).Text = Me.TextBox3.Text
    ListView1.SelectedItem.ListSubItems(3).Text = Me.ComboBox1.Text
    ListView1.SelectedItem.ListSubItems(4).Text = Me.TextBox4.Text  'suppression du cdate
    ListView1.SelectedItem.ListSubItems(5).Text = Me.ComboBox2.Text
    ListView1.SelectedItem.ListSubItems(6).Text = Me.TextBox5.Text 'suppression du cdate
    ListView1.SelectedItem.ListSubItems(7).Text = Me.ComboBox3.Text
    ListView1.SelectedItem.ListSubItems(8).Text = Me.TextBox6.Text
    ListView1.SelectedItem.ListSubItems(9).Text = Me.TextBox7.Text

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
K = 2
    For i = 1 To ListView1.ListItems.Count
        BASEINTERVENTIONS.Cells(K, 5) = ListView1.ListItems(i).Text
            For J = 1 To ListView1.ColumnHeaders.Count - 1
                If J = 4 Or J = 6 Then
                    On Error Resume Next
                        BASEINTERVENTIONS.Cells(K, J + 9) = CDate(ListView1.ListItems(i).ListSubItems(J).Text)
                    If Err Then
                        BASEINTERVENTIONS.Cells(K, J + 9) = ""
                    End If
                    Else
                        BASEINTERVENTIONS.Cells(K, J + 9) = ListView1.ListItems(i).ListSubItems(J).Text
                    
                End If
                    On Error GoTo 0
            Next J
        BASEINTERVENTIONS.Cells(K, 19).FormulaR1C1 = "=IF(RC[-4]="""","""",RC[-4]-RC[-6] & "" jours"")"
        BASEINTERVENTIONS.Cells(K, 20).FormulaR1C1 = "=IF(RC[-7]="""","""",RC[-7]-RC[-11] & "" jours"")"
K = K + 1
    Next i
 
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
 

Discussions similaires

Réponses
17
Affichages
727

Statistiques des forums

Discussions
314 628
Messages
2 111 337
Membres
111 105
dernier inscrit
Joffrette