Incompatibilité de type

boom.hs

XLDnaute Nouveau
Bonjour,

Je code une fonction qui me permettrait d'obtenir une valeur proche de celle que je fourni dans le champ "entree_surface" présente dans la colonne "Surface" de mon tableau.

Avec le code suivant, j'obtiens une erreur : "Incompatibilité de type" au niveau de la première ligne du "If" et je ne comprend pas pourquoi...

Code:
Sub trouver_surface_proche()

Dim ecart As Double
Dim cellule As Range
Dim res As Double

ecart = 10000
res = 0


For Each cellule In ActiveWorkbook.Sheets("PARTS").Range("Surface")
     If Abs(cellule.Value - Worksheets("Feuil2").Range("entree_surface").Value) < ecart Then
        ecart = Abs(cellule.Value - ActiveWorkbook.Sheets("Feuil2").Range("C7").Value)
        res = cellule.Value
        
    End If
Next


Range("Surface_proche").Value = res

End Sub


Une idée ?


Merci
 

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : Incompatibilité de type

Bonjour Boom.hs

la variable 'ecart' est numérique alors que

Abs(cellule.Value - Worksheets("Feuil2").Range("entree_surface").Value)

ne l'est peut-être pas

.......... mais sans voir le fichier, difficile d'être formel

à+
Philippe
 

Papou-net

XLDnaute Barbatruc
Re : Incompatibilité de type

Bonjour boom.hs,

Comme souvent répété sur ce site, un fichier joint facilite grandement l'élaboration d'une réponse.

Mais bon, dans ce cas particulier, la problématique me semble simple :

Ta condition If teste la valeur absolue de ta variable cellule Or, si cette valeur n'est pas du type numérique, tu obtiens l'erreur que tu constates.

Tu as 2 solutions :

- Tu prévois avant ta boucle d'insérer la ligne On Error Resume Next

- Tu testes si cellule est du type numérique avant d'extraire sa valeur absolue.

Cordialement.

Edit : bonjour Philippe, on en arrive à la même conclusion.
 

boom.hs

XLDnaute Nouveau
Re : Incompatibilité de type

Bonjour Philippet et Papou-net,

Je ne peux hélas pas joindre mon excel, je suis en stage dans une grosse boite et je crains qu'on m'en veuille si je balançais leurs données sur le web ;)

Mais en effet, je réalise que la première cellule de la colonne (que j'ai nommé "Surface") contient... "Surface" et non pas une donnée numérique.

D'où ma seconde question : est ce qu'il y a moyen d'exclure la première cellule d'un range ?

En tout cas merci pour le coup de pouce.

A+
 

Habitude

XLDnaute Accro
Re : Incompatibilité de type

Bonjour

Inclure l'entete dans le calcul crée généralement des incompatibilité

Essaie

Code:
For Each cellule In ActiveWorkbook.Sheets("PARTS").Range("Surface")
   If isNumeric(cellule) then  
       If Abs(cellule.Value - Worksheets("Feuil2").Range("entree_surface").Value) < ecart Then
            ecart = Abs(cellule.Value - ActiveWorkbook.Sheets("Feuil2").Range("C7").Value)
            res = cellule.Value
        End If
    End if
Next
 

Papou-net

XLDnaute Barbatruc
Re : Incompatibilité de type

Bonsoir boom.hs, Philippe, Habitude,

D'où ma seconde question : est ce qu'il y a moyen d'exclure la première cellule d'un range ?

Oui, c'est tout-à-fait faisable en écrivant par exemple :

Code:
For Each Cel In Range("Surface")
  If Not Cel = Range("Surface").Range("A1") Then
    If Abs(Cel.Value) > 100 Then ...
  End If
Next
Et ce quel que soit l'emplacement de ta plage nommée Surface dans la feuille.

Si tu écris
Code:
Range("Surface").Range("A1")
le code recherche la première cellule de la plage comme si cette plage démarrait en A1 sur la feuille.

Je ne sais pas si je suis clair dans mes explications, aussi tu peux le constater et l'expérimenter sur le fichier exemple ci-joint.

Bonne soirée.

Cordialement.
 

Pièces jointes

  • Demo boom_hs.xls
    38 KB · Affichages: 34
Dernière édition:

Papou-net

XLDnaute Barbatruc
Re : Incompatibilité de type

RE

Pour info :

Si la zone comprend deux (ou plusieurs colonnes), la boucle peut alors s'écrire comme suit :

Code:
For Each Cel In Range("Surface").Range("A2:" & Range("Surface").SpecialCells(xlCellTypeLastCell).Address)
    If Abs(Cel.Value) > 100 Then msg = msg & Cel.Value & vbCrLf
Next
La boucle détermine d'elle-même le nombre de cellules contenues dans la plage.

Mais attention : dans ce cas, comme dans l'exemple de mon message précédent d'ailleurs, il faut absolument que les cellules contiennent des nombres ou soient vides. Sinon, il faut appliquer le test de type de valeur, comme l'a écrit Habitude, pour éviter tout plantage.

Cordialement.
 

Pièces jointes

  • Demoboom_hs 01 .xls
    38.5 KB · Affichages: 37

boom.hs

XLDnaute Nouveau
Re : Incompatibilité de type

Re !

J'ai ajouté un second test à mon "If" mais j'obtiens une nouvelle erreur : "Variable objet ou variable de bloc non définie".

Voilà mon code :

Code:
Dim ecart As Double
Dim cellule As Range
Dim intersection As Range
Dim res As Double

ecart = 1000000
res = 0


For Each cellule In ActiveWorkbook.Sheets("PARTS").Range("Surface")
   If IsNumeric(cellule) Then
   With ActiveWorkbook.Sheets("PARTS")
    intersection = Application.Intersect(Range("Famille"), cellule.EntireRow)
    End With
       If (Abs(cellule.Value - Worksheets("Feuil2").Range("entree_surface").Value) < ecart) And intersection.Value = Range("entree_famille").Value Then
            ecart = Abs(cellule.Value - ActiveWorkbook.Sheets("Feuil2").Range("C7").Value)
            res = cellule.Value
        End If
    End If
Next


Range("Surface_proche").Value = res

End Sub

J'imagine qu'il ne reconnait pas "intersection" mais je ne comprend pas pourquoi. La déclarer n'est pas suffisant ?

Merci
 

boom.hs

XLDnaute Nouveau
Re : Incompatibilité de type

Je viens de me rendre compte que lorsque je passe mon curseur sur "cellule" au niveau de la déclaration ("dim") j'ai "cellule=773.56" (773.56 est la première valeur de ma série) qui s'affiche, alors que sur intersection j'ai "intersection=nothing"...



EDIT : Cette fois mon ami Google a su m'aider ! Problème résolu, merci encore
 
Dernière édition:

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : Incompatibilité de type

Re-bonjour

11 posts dans ce fil de discussion et toujours pas de fichier joint qui nous aurais sans doute permis de mieux cerner le problème
.........et peut-être procéder d'une manière différente

à+
Philippe
 

Discussions similaires

Réponses
6
Affichages
191

Statistiques des forums

Discussions
312 764
Messages
2 091 860
Membres
105 082
dernier inscrit
saragestion