Erreur d'exécution 13 Incompatibilité de type

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. Modérateur
    Bonjour,

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

    0
    1. 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. Modérateur
        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. onglet = XYZ^ACTMETER_PIT
        col_val = D
        j = 61
        0
      3. Modérateur
        @mandrake007Je 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. ligne 47

        val_x egal val_up
        val_up = Sheets(onglet).Range(col_val & j - 1)
        0
      5. Modérateur
        @mandrake007Que contient la cellule D60 de la feuille XYZ^ACTMETER_PIT ?
        0
    2. 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
      1. Modérateur
        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