Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
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é ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#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

Jeirhome
Membre
Lieu: Liverion
Date d'inscription: 22 Aug 2006
Messages: 4298
Site web

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

Jeirhome
Membre
Lieu: Liverion
Date d'inscription: 22 Aug 2006
Messages: 4298
Site web

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 smile)


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

Jeirhome
Membre
Lieu: Liverion
Date d'inscription: 22 Aug 2006
Messages: 4298
Site web

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

Jeirhome
Membre
Lieu: Liverion
Date d'inscription: 22 Aug 2006
Messages: 4298
Site web

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

Jeirhome
Membre
Lieu: Liverion
Date d'inscription: 22 Aug 2006
Messages: 4298
Site web

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

Jeirhome
Membre
Lieu: Liverion
Date d'inscription: 22 Aug 2006
Messages: 4298
Site web

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

Jeirhome
Membre
Lieu: Liverion
Date d'inscription: 22 Aug 2006
Messages: 4298
Site web

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

 

#17 Wed 13 October 2010 15:56

conejo
Participant assidu
Lieu: Lunel
Date d'inscription: 2 Dec 2005
Messages: 1670

Re: Fonction if

Voici la boite de dialogue pour être + précis


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#18 Wed 13 October 2010 16:02

Jeirhome
Membre
Lieu: Liverion
Date d'inscription: 22 Aug 2006
Messages: 4298
Site web

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

 

#19 Wed 13 October 2010 16:08

conejo
Participant assidu
Lieu: Lunel
Date d'inscription: 2 Dec 2005
Messages: 1670

Re: Fonction if

Voici le message d'erreur


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

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

 

#21 Wed 13 October 2010 16:16

conejo
Participant assidu
Lieu: Lunel
Date d'inscription: 2 Dec 2005
Messages: 1670

Re: Fonction if

Toujours le même message d'erreur.
J'y joins le message d'erreur.


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

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

 

Pied de page des forums

Powered by FluxBB