Erreur d'exécution 13 Incompatibilité de type

Fermé
mandrake007 Messages postés 14 Date d'inscription jeudi 6 octobre 2016 Statut Membre Dernière intervention 18 octobre 2016 - Modifié par jordane45 le 6/10/2016 à 10:37
jordane45 Messages postés 38295 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 19 novembre 2024 - 7 oct. 2016 à 16:35
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


A voir également:

4 réponses

jordane45 Messages postés 38295 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 19 novembre 2024 4 704
6 oct. 2016 à 10:38
Bonjour,

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

0
mandrake007 Messages postés 14 Date d'inscription jeudi 6 octobre 2016 Statut Membre Dernière intervention 18 octobre 2016
Modifié par jordane45 le 6/10/2016 à 11:42
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
jordane45 Messages postés 38295 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 19 novembre 2024 4 704
6 oct. 2016 à 11:42
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
mandrake007 Messages postés 14 Date d'inscription jeudi 6 octobre 2016 Statut Membre Dernière intervention 18 octobre 2016
Modifié par mandrake007 le 6/10/2016 à 14:28
onglet = XYZ^ACTMETER_PIT
col_val = D
j = 61
0
jordane45 Messages postés 38295 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 19 novembre 2024 4 704 > mandrake007 Messages postés 14 Date d'inscription jeudi 6 octobre 2016 Statut Membre Dernière intervention 18 octobre 2016
6 oct. 2016 à 14:35
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
mandrake007 Messages postés 14 Date d'inscription jeudi 6 octobre 2016 Statut Membre Dernière intervention 18 octobre 2016
Modifié par mandrake007 le 6/10/2016 à 14:40
ligne 47

val_x egal val_up
val_up = Sheets(onglet).Range(col_val & j - 1)
0
jordane45 Messages postés 38295 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 19 novembre 2024 4 704 > mandrake007 Messages postés 14 Date d'inscription jeudi 6 octobre 2016 Statut Membre Dernière intervention 18 octobre 2016
6 oct. 2016 à 14:49
Que contient la cellule D60 de la feuille XYZ^ACTMETER_PIT ?
0
mandrake007 Messages postés 14 Date d'inscription jeudi 6 octobre 2016 Statut Membre Dernière intervention 18 octobre 2016
7 oct. 2016 à 15:39
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
jordane45 Messages postés 38295 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 19 novembre 2024 4 704
7 oct. 2016 à 16:35
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