#1 Wed 13 October 2010 14:00
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1670
Fonction if
Bonjour,
J'ai deux champs : "combu" et "Vent" avec des valeurs allant de 1 à 5. Je crée un champ "Classe" qui aura des valeurs allant de 1 à 5 en fonction des valeurs des deux 1ers champs. EX : si combu = 1 et vent = 1 alors Classe = 1. Je voudrais automatiser par la fonction IF l'ensemble des possibilités de croisement entre ces deux champs.
Pour l'instant, ce qui m'intéresse, c'est de savoir comment on fait pour mettre "1" au champ "Classe" lorsque "combu" et "vent" sont égaux à 1.
Cordialement.
Hors ligne
#2 Wed 13 October 2010 14:10
Re: Fonction if
Jérôme Cuinet
L'avantage de la Chine, c'est que le soleil se couche plus tard !
Hors ligne
#3 Wed 13 October 2010 14:24
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1670
Re: Fonction if
C'est un peu compliqué en anglais. Z'avez pas une fonction type if combu = 1 then classe = 1?
Hors ligne
#4 Wed 13 October 2010 14:39
Re: Fonction if
Euh, si si c'est exactement ça.
C'est la version en ligne uniquement en anglais de ce qui doit se trouver en local, sur ton PC : l'aide officielle d'ArcGIS. Regarde un peu où se situe cette page, et trouve là dans l'aide en français que tu as chez toi.
Lire une page d'aide complète, ça te permet de situer exactement le contexte et aussi voir les petites choses à côté (c'est comme t'apprendre à pêcher au lieu de te donner un poisson )
Jérôme Cuinet
L'avantage de la Chine, c'est que le soleil se couche plus tard !
Hors ligne
#5 Wed 13 October 2010 14:44
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1670
Re: Fonction if
OK ça marche, pour if combu = 1 then classe = 1
Ce que je cherche maintenant c'est if combu = 1 et vent = 1 then classe = 1. Ce qu'il me donne avec OR ou AND, c'est qu'il affiche 1 à chaque fois qu'il trouve 1 soit dans "combu" soit dans "vent". Ce que je veux, c'est uniquement lorsque les 2 conditions sont réunies, à savoir ssi "combu" =1 et "vent" =1. Après c'est promis, je me mets à la pêche.
Hors ligne
#6 Wed 13 October 2010 14:54
- shape_player
- Participant occasionnel
- Date d'inscription: 27 Sep 2010
- Messages: 20
Re: Fonction if
tu peux faire un truc du genre:
si combu = vent alors classe = la valeur de combu (ou vent puisqu'ils sont égaux)
DIM result as string
If ([combu] = [vent] ) Then
result = [combu]
Else
result = "non classé"
End If
__esri_field_calculator_splitter__
result
Dernière modification par shape_player (Wed 13 October 2010 14:55)
Hors ligne
#7 Wed 13 October 2010 14:57
Re: Fonction if
D'après les cours, par exemple http://www.pise.info/vb/partie1.htm l'utilisation de AND ou OR est "standard".
Lorsque les deux conditions sont réunis tu veux 1, tu utilises alors "AND". Mets ici exactement la formule que tu utilises si tu veux qu'on voit ce qui ne va pas. Les valeurs à comparer sont bien entre [] ?
Jérôme Cuinet
L'avantage de la Chine, c'est que le soleil se couche plus tard !
Hors ligne
#8 Wed 13 October 2010 15:03
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1670
Re: Fonction if
Merci mais les valeurs entre "combu" et "vent" ne sont pas tout le temps les mêmes. Elles vont invariablement de 1 à 5.
ssi combu =1 et vent =1 Then Classe = 1
ssi combu =2 et vent =1 then Classe = 2...............
Hors ligne
#9 Wed 13 October 2010 15:07
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1670
Re: Fonction if
Voilà le texte
if [combu]=1 or [VENT]=1 then [Classe]=1
Hors ligne
#10 Wed 13 October 2010 15:07
Re: Fonction if
Code:
ssi combu =1 et vent =1 Then Classe = 1
IF [combu] = 1 AND [vent] = 1 Then resultat = 1
ELSE IF [combu] = 2 AND [vent] = 1 Then resultat = 2
ELSE resultat = 0
__esri_field_calculator_splitter__
resultat
Ça ne va pas comme ça ?
(mais si tu dois traiter les 25 cas possibles, ça va faire une rude formule, tu n'as pas une généralisation exprimée avec des règles des maximum et de comparaison plus génériques que par valeurs ?
Jérôme Cuinet
L'avantage de la Chine, c'est que le soleil se couche plus tard !
Hors ligne
#11 Wed 13 October 2010 15:08
Re: Fonction if
Ben je crois qu'on a résolu le problème, le OR est un OU LOGIQUE, il donne un résultat positif si l'un de deux est vrai
Jérôme Cuinet
L'avantage de la Chine, c'est que le soleil se couche plus tard !
Hors ligne
#12 Wed 13 October 2010 15:15
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1670
Re: Fonction if
Ca ne marche pas. resultat devrait s'afficher dans le champ classe?
La méthode doit s'effectuer sur 20 cas possibles
Hors ligne
#13 Wed 13 October 2010 15:25
Re: Fonction if
Regarde bien mon exemple, tu dois avoir une variable résultat que tu indique dans le deuxième champ de saisie.
Jérôme Cuinet
L'avantage de la Chine, c'est que le soleil se couche plus tard !
Hors ligne
#14 Wed 13 October 2010 15:34
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1670
Re: Fonction if
J'ai bien saisi resultat au deuxième champ de saisie.
Classe =
resultat
Mais ça ne marche pas
Hors ligne
#15 Wed 13 October 2010 15:40
Re: Fonction if
Ici, c'est un forum, pas un service de maintenance. Tu dois donc mettre du tien et ne pas balancer des "ça ne marche pas" comme si on allait venir à côté de toi pour voir exactement ce qui ne va pas !
On ne va pas faire grand chose pour toi dans ces conditions. "Ça ne marche pas" alors qu'on sait à peine ce qu'est le "ça" (le cas précis combu et vent = 1, l'ensemble des 20 cas...)
Jérôme Cuinet
L'avantage de la Chine, c'est que le soleil se couche plus tard !
Hors ligne
#16 Wed 13 October 2010 15:51
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1670
Re: Fonction if
Quand j'écris ça ne marche pas c'est que qd je fais OK le traitement est interrompu!
Voici le texte tel que je l'ai copié
(je rappelle que c'est dans le champ "classe" que doivent se répercuter les résultats) :
IF [combu] = 1 AND [vent] = 1 Then resultat = 1
ELSE IF [combu] = 2 AND [vent] = 1 Then resultat = 2
ELSE resultat = 0
Classe =
resultat
Hors ligne
#18 Wed 13 October 2010 16:02
Re: Fonction if
le traitement est interrompu
On est sensé deviner comment le traitement est interrompu ?
Il n'y a que toi qui voit un quelconque message te faisant penser que le traitement est interrompu !
Regarde http://georezo.net/forum/viewtopic.php? … 15#p178315
Tu dois avoir Dim resultat as <type> (où type est le type de ton champ, string, integer, carotte, pomme de terre).
En informatique tu ce que tu fais et vois est important, même si tu te mouches pendant la procédure tu dois le signaler (cf le Professeur Foldingue qui fait échapper tous les lapins du laboratoire en sortant le soir à cause d'un faux mouvement) !
Jérôme Cuinet
L'avantage de la Chine, c'est que le soleil se couche plus tard !
Hors ligne
#20 Wed 13 October 2010 16:10
- foucher
- Participant occasionnel
- Date d'inscription: 13 Mar 2010
- Messages: 20
Re: Fonction if
t'as oublier le end if pour clore ton if
Hors ligne
#22 Wed 13 October 2010 16:16
- foucher
- Participant occasionnel
- Date d'inscription: 13 Mar 2010
- Messages: 20
Re: Fonction if
Ton code en modifié :
Dim resultat As Integer
if [combu] = 1 AND [vent] = 1 Then resultat = 1
elseif [combu] = 2 AND [vent] = 1 Then resultat = 2
else resultat = 0
end if
Classe =
resultat
essaie avec les modif que j'ai envoyé et ça devrais rouler comme sur des roulettes
Dernière modification par foucher (Wed 13 October 2010 16:19)
Hors ligne
#23 Wed 13 October 2010 16:21
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1670
Re: Fonction if
Même message d'erreur. Ces 3 champ sont de type entier court. Est-ce là le problème?
Hors ligne
#24 Wed 13 October 2010 16:34
- foucher
- Participant occasionnel
- Date d'inscription: 13 Mar 2010
- Messages: 20
Re: Fonction if
Je crois que l'erreur vient du fait que tu as oublier de mettredes parenthèses, comme ceci, la je pense que ça devrait marcher
Dim resultat As Integer
if ([combu] = 1 AND [vent] = 1) Then resultat = 1
elseif ([combu] = 2 AND [vent] = 1) Then resultat = 2
else resultat = 0
end if
Classe =
resultat
Normalement la ça marche, j'ai testé
Hors ligne
#25 Wed 13 October 2010 16:39
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1670
Re: Fonction if
Toujours désolé, toujours le même message. Comprends pourquoi ça marche chez toi et pas chez moi...
Tes champs sont de quel type?
Hors ligne
#26 Wed 13 October 2010 16:41
- foucher
- Participant occasionnel
- Date d'inscription: 13 Mar 2010
- Messages: 20
Re: Fonction if
mes champs sont des entiers court, essaie comme ceci
Dim resultat As Integer
if ([combu] = 1 AND [vent] = 1) Then resultat = 1
elseif ([combu] = 2 AND [vent] = 1) Then resultat = 2
else
resultat = 0
end if
Classe =
resultat
Hors ligne
#27 Wed 13 October 2010 16:47
- foucher
- Participant occasionnel
- Date d'inscription: 13 Mar 2010
- Messages: 20
Re: Fonction if
je me suis un peu trompé, voila le bon code, desolé
Dim resultat As Integer
if ([combu] = 1 AND [vent] = 1) Then
resultat = 1
elseif ([combu] = 2 AND [vent] = 1) Then
resultat = 2
else
resultat = 0
end if
Classe =
resultat
Cette fois 100% ça marche
essaie celui que je viens de mettre
ne jamais baisser les bras
Dernière modification par foucher (Wed 13 October 2010 16:49)
Hors ligne
#28 Wed 13 October 2010 16:47
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1670
Re: Fonction if
Même message. Je crois que je vais laisser tomber cette piste. Je vais passer en manuel.
Hors ligne
#29 Wed 13 October 2010 17:05
- shape_player
- Participant occasionnel
- Date d'inscription: 27 Sep 2010
- Messages: 20
Re: Fonction if
peux tu aller depuis ArcMap: outils > macro >
l'éditeur visual basic est il grisé ?
si oui:
il faut exécuter 2 packages d’installation présent sur le DVD d’installation d’ArcGis Desktop.
Explorer le DVD d’installation jusqu’au répertoire Desktop\VBA
Installer dans un premier temps le VBAOF11.msi
Puis dans le répertoire Desktop\VBA\1033
Installer le VBAOF11I.msi
Hors ligne
#30 Thu 14 October 2010 09:16
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1670
Re: Fonction if
Un grand merci!!! ça fonctionne.
Hors ligne