banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

#1 Thu 08 December 2011 11:21

Florent45
Juste Inscrit !
Date d'inscription: 1 Nov 2010
Messages: 4

ArcGis 10 : Calculatrice de valeurs de champs : Script VB

Bonjour,

j'essaie actuellement de classer des teneurs en cadmium enregistrées dans le champ "Cd" (réel double) d'une table de ma géodatabase (en 6 classes différentes). Pour cela j'ai créé un second champs "ICMM_Cd" (réel double) afin de calculer ces classes selon la teneurs en Cadmium. J'utilise ensuite la calculatrice d'ArcGis pour calculer le champs "ICMM_Cd" selon la valeur rencontrée à l'aide d'un script VB que voici :

Code:

Dim icmmcd

If [Cd] <="0,25" Then
icmmcd ="1"

ElseIf [Cd]>0,25 and <=0,35 Then
icmmcd="2"

ElseIf [Cd]>"0,35" and <="0,50" Then
icmmcd="3"

ElseIf [Cd]>"0,50" and <="1" Then
icmmcd="4"

ElseIf [Cd]>"1" and <="2" Then
icmmcd="5"

ElseIf [Cd]>"2" Then
icmmcd="6"

End If

Sachant que ICMM_Cd=icmmcd.

Or quand je lance le calcul du champs, ArcGis me retourne une erreur 99999, je pense que la structure de mon script est correcte (en même temps on peut pas faire beaucoup plus simple..) mais il doit y avoir une erreur de syntaxe que je n'arrive pas à déceler.
Auriez vous une idée pour me décoincer ? 
Merci d'avance.

Hors ligne

 

#2 Thu 08 December 2011 11:48

dominique.lys
Participant assidu
Date d'inscription: 5 Oct 2006
Messages: 473
Site web

Re: ArcGis 10 : Calculatrice de valeurs de champs : Script VB

Salut,

Deux choses:
-Pour comparer des nombres il faut que tes variables soient des nombres et non du texte. Donc d'une part vérifier le type du champs [Cd] et convertir les valeurs en nombre si nécessaire, d'autre part ne pas mettre de guillemets pour la valeur de comparaison.
-Pour évaluer plusieurs critère dans ta condition il faut que pour chaque comparaison que les deux valeurs soient explicites, donc ici on mets deux fois [cd] --> [Cd]>1 and [Cd]<=2

Code:

Dim icmmcd as integer

If [Cd] <=0.25 Then
icmmcd =1

ElseIf [Cd]>0.25 and [Cd]<=0.35 Then
icmmcd=2

ElseIf [Cd]>0.35 and [Cd]<=0.50 Then
icmmcd=3

ElseIf [Cd]>0.50 and [Cd]<=1 Then
icmmcd=4

ElseIf [Cd]>1 and [Cd]<=2 Then
icmmcd=5

ElseIf [Cd]>2 Then
icmmcd=6

End If

Hors ligne

 

#3 Thu 08 December 2011 13:08

Robin
GeoRezo forever
Lieu: France
Date d'inscription: 31 Aug 2005
Messages: 13614
Site web

Re: ArcGis 10 : Calculatrice de valeurs de champs : Script VB

Petit conseil : la commande Case évite de s'enquiquiner avec les boucles wink

Pas besoin de remplacer Mavariable, elle ne sert que pour le calcul du champ concerné.

Code:

Dim Mavariable as integer

Select Case True
  Case [Cd] <= 0.25
   Mavariable = 1
  Case [Cd] > 0.25 and [Cd] <= 0.35
  Mavariable = 2
  Case [Cd] > 0.35 and [Cd] <= 0.50
  Mavariable = 3
  Case [Cd] > 0.50 and [Cd] <= 1
  Mavariable = 4
  Case [Cd] > 1 and [Cd] <= 2
  Mavariable = 5
  Case [Cd] > 2
  Mavariable = 6
End select
__esri_field_calculator_splitter__
Mavariable

Hors ligne

 

#4 Thu 08 December 2011 14:26

Florent45
Juste Inscrit !
Date d'inscription: 1 Nov 2010
Messages: 4

Re: ArcGis 10 : Calculatrice de valeurs de champs : Script VB

Merci pour ces réponses, du coup j'ai pris la solution de Dominique car bien que mes variables soient bien des nombres (réels doubles) et après avoir fait les changements proposés dans les remarques, la solution de Robin ne fonctionnait toujours pas (toujours le même message d'erreur). Pour le code de Dominique je croit qu'il ne faut pas préciser le type de variable utilisé avec ArcGis 10, du coup avec :

Code:

Dim Mavariable

Select Case True
  Case [Cd] <= 0.25
   Mavariable = 1
  Case [Cd] > 0.25 and [Cd] <= 0.35
  Mavariable = 2
  Case [Cd] > 0.35 and [Cd] <= 0.50
  Mavariable = 3
  Case [Cd] > 0.50 and [Cd] <= 1
  Mavariable = 4
  Case [Cd] > 1 and [Cd] <= 2
  Mavariable = 5
  Case [Cd] > 2
  Mavariable = 6
End select

sa fonctionne. Il y a juste une erreur au niveau des valeurs "Null" dans le champs "Cd" mais par défaut ArcGis met des "0" dans le champs "ICMM_Cd" donc cela me convient smile. Je me demande d'ailleurs si mon problème ne vient pas des valeurs nulles au départ.
En tout cas merci beaucoup, le sujet est résolu.

Hors ligne

 

Pied de page des forums

Powered by FluxBB