Erreur d'exécution 13 Incompatibilité de type

mandrake007 Messages postés 14 Date d'inscription   Statut Membre Dernière intervention   -  
jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

val_x = Sheets(onglet).Range(col_val & j - 1) 


EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici :ICI

Merci d'y penser dans tes prochains messages.


j'ai une error 'Erreur d'exécution 13 Incompatibilité de type' pour cest lien

4 réponses

  1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
     
    Bonjour,

    Que valent tes variables : onglet , col_val et j
    au moment où ça plante ?

    0
  2. mandrake007 Messages postés 14 Date d'inscription   Statut Membre Dernière intervention  
     
    bonjour Jordane,

    cest ca la code

    Sub abcdDeltaColor(onglet As String, column_date As String, abcdDelta As Double, col_val As String, column_date_manq As Integer, col_val_manq As Integer)
    'Paramètres : (onglet, colonne des dates à comparer, abcdDelta de comparaison, colonne des valeurs à utiliser, colonne des dates à remplir)
        'Initialisation variables
            Dim maxValue As Integer 'nombre de points maximum manquants
            maxValue = 24 * 60 * delais 'delais = 1 min : maxValue = 1 jour
            Dim nb_points As Integer 'nombre de points ajoutés au total
            nb_points = 0
            Dim nb_points_temp As Integer 'nombre de points ajoutés d'affilé
            nb_points_temp = 1
            Dim val_up As Double 'valeur réelle précédente
            Dim val_down As Double 'valeur réelle suivante
            Dim i As Integer 'compteur pour la boucle for
           
        'Traitement des points manquants
            Sheets(onglet).Cells(1, column_date_manq).Value = "Dates manquantes"
            Sheets(onglet).Cells(1, col_val_manq).Value = "Valeurs manquantes"
            Sheets(onglet).Cells(1, column_date_manq).EntireColumn.AutoFit
            Sheets(onglet).Cells(1, col_val_manq).EntireColumn.AutoFit
            j = 3
           
            While j <= Sheets(onglet).Range(column_date & "65536").End(xlUp).Row
                If Sheets(onglet).Range(column_date & j - 1).NumberFormat = "dd/mm/yyyy hh:mm:ss" Then
                    calc = CDbl(Sheets(onglet).Range(column_date & j) - Sheets(onglet).Range(column_date & j - 1)) 'Calcul du délais entre deux mesures
                    If (calc > abcdDelta * nb_points_temp) And (calc < maxValue) Then 'délais supérieur au abcdDelta (prenant en compte les valeurs artificielles) et inférieur au seuil max
                        Sheets(onglet).Cells(2 + nb_points, column_date_manq).Value = Sheets(onglet).Range(column_date & j - 1) + abcdDelta * nb_points_temp 'création nouvelle date
                        nb_points = nb_points + 1 'la taille du tableau des points ajoutés a augmenté
                        nb_points_temp = nb_points_temp + 1 'le nombre de points ajoutés à la suite à augmenté
                    Else
                        If nb_points_temp <> 1 Then
                            val_up = Sheets(onglet).Range(col_val & j - 1) 'valeur de la ligne précédente
                            val_down = Sheets(onglet).Range(col_val & j) 'valeur de la ligne actuelle
                            For i = 1 To nb_points_temp - 1
                                Sheets(onglet).Cells(2 + nb_points - nb_points_temp + i, col_val_manq).Value = _
                                val_up + (val_down - val_up) / nb_points_temp * i 'nouvelle valeur : trace une droite entre les valeurs précédentes et suivantes
                            Next i
                        End If
       
                        nb_points_temp = 1 'aucun point ne vient d'être ajouté
                        j = j + 1
                    End If
                End If
               
            Wend
           
            'Largeur des nouvelles colonnes
           
            If nb_points <> 0 Then
                Sheets(onglet).Cells(1, column_date_manq).Interior.Color = RGB(255, 0, 0)
                Sheets(onglet).Cells(1, col_val_manq).Interior.Color = RGB(255, 0, 0)
                Sheets(onglet).Tab.Color = RGB(255, 0, 0)
            End If
           
    End Sub
    
    


    EDIT : Ajout du LANGAGE dans les balises de code (la coloration syntaxique).
    Explications disponibles ici :ICI

    Merci d'y penser dans tes prochains messages.
    0
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
       
      Je ne t'ai pas demandé le code (même si ça peut servir) mais simplement que tu me dises quelles sont les valeurs stockées dans tes variables....
      Pour cela..... lance ton programme puis lorsque le programme s’arrêtera sur la ligne concernée.. passe la souris dessus pour savoir ce que contiennent tes variables.
      (tu peux éventuellement placer un point d'arrêt dans ton code à cette ligne )
      0
    2. mandrake007 Messages postés 14 Date d'inscription   Statut Membre Dernière intervention  
       
      onglet = XYZ^ACTMETER_PIT
      col_val = D
      j = 61
      0
    3. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832 > mandrake007 Messages postés 14 Date d'inscription   Statut Membre Dernière intervention  
       
      Je ne vois pas dans le code que tu nous as posté la ligne concernée dans ton premier message...
      Quoi qu'il en soit, comment à tu initialisé val_x ?
      Si c'est une RANGE il faut alors dans ton code ajouter un SET
      Dim val_x as RANGE
       Set val_x = Sheets(onglet).Range(col_val & j - 1) 
      

      Si c'est pour y stocker le contenu (la valeur) dans ce cas, ajoute un .value
      Dim val_x as variant ' ou integer ou string en fonction de son contenu...
      val_x = Sheets(onglet).Range(col_val & j - 1) .value
      
      0
    4. mandrake007 Messages postés 14 Date d'inscription   Statut Membre Dernière intervention  
       
      ligne 47

      val_x egal val_up
      val_up = Sheets(onglet).Range(col_val & j - 1)
      0
    5. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832 > mandrake007 Messages postés 14 Date d'inscription   Statut Membre Dernière intervention  
       
      Que contient la cellule D60 de la feuille XYZ^ACTMETER_PIT ?
      0
  3. mandrake007 Messages postés 14 Date d'inscription   Statut Membre Dernière intervention  
     
    bonjour, il plant a dernier lien

    //Code a toi
    Dim sh as Worksheet
    Dim rng as Range
    Dim strRng as string

    strRng = col_val & j-1 '//strRng= ''D60"

    set sh = Sheets(onglet)
    set rng = sh.Range(strRng) '//rng = 0.0078125

    val_up = rng.value '//val_up=0 //Plante
    0
  4. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
     
    Tu a lu mon précédent message ??
    Cela vient, je pense, de ton séparateur décimal.....
    0.0078125 n'est pas la même chose que 0,0078125 ( un point... ou une virgule).
    Quel est ton séparateur par défaut dans ton excel ??

    Essaye de le changer en définissant le ";" comme séparateur
    https://docs.microsoft.com/fr-fr/office/vba/api/excel.application.decimalseparator?redirectedfrom=MSDN

    'On change le séparateur
     Application.DecimalSeparator = "." 
    
    Dim sh as Worksheet 
    Dim rng as Range 
    Dim strRng as string 
    
    strRng = col_val & j-1 '//strRng= ''D60" 
    
    set sh = Sheets(onglet) 
    set rng = sh.Range(strRng) '//rng = 0.0078125 
    
    val_up = rng.value '//val_up=0 //Plante
    
    


    NB : Lorsque tu postes du code sur le forum ... utilise LES BALISES DE CODE !!!
    0