#1 Tue 01 October 2013 17:32
- Rouyer Cyril
- Participant occasionnel
- Date d'inscription: 27 Sep 2012
- Messages: 24
Arcgis 10 : Calcul conditionnel sur des dates
Bonjour à tous.
Je travaille sur une table attributaire contenant plusieurs champs, seul deux m’intéresse un [Controler] contenant la date du contrôle et un [Resultat] contenant les valeurs au format texte, Conforme ou Non-Conforme.
Je souhaiterai calculer un 3eme champs de manière conditionnel. C'est à dire si le résultat est conforme, prochain contrôle dans 10 ans, si le résultat est non conforme, prochain contrôle dans un an.
J'ai essayé ce script VB dans le calculateur de champs :
Code:
If [Resultat] = "Conforme" then [Prochain_C] = [Controle] + 3650 EsleIf [Resultat] = "Non-Conforme" then [Prochain_C] = [Controle] + 365 End if
Mais sans succès.
Merci de votre aide
Cyril
Hors ligne
#2 Tue 01 October 2013 17:35
- Spacejo
- Membre
- Lieu: Nancy
- Date d'inscription: 17 Aug 2008
- Messages: 2511
Re: Arcgis 10 : Calcul conditionnel sur des dates
Salut,
Un message d'erreur?
Le script doit être rédigé comme ceci:
Code:
If [Resultat] = "Conforme" then [Prochain_C] = [Controle] + 3650 EsleIf [Resultat] = "Non-Conforme" then [Prochain_C] = [Controle] + 365 End if
Quelle est la nature du champ --> Controle
A+
Joël
Dernière modification par Spacejo (Tue 01 October 2013 17:38)
Hors ligne
#3 Tue 01 October 2013 17:42
- Rouyer Cyril
- Participant occasionnel
- Date d'inscription: 27 Sep 2012
- Messages: 24
Re: Arcgis 10 : Calcul conditionnel sur des dates
Merci Spacejo
J'ai testé ton script et toujours pas de succès.
Les messages d'erreur sont :
- ERROR 999999: Erreur lors de l'exécution de la fonction.
- Echec de l'exécution de (CalculateField).
Cyril
Hors ligne
#4 Tue 01 October 2013 17:45
- Spacejo
- Membre
- Lieu: Nancy
- Date d'inscription: 17 Aug 2008
- Messages: 2511
Re: Arcgis 10 : Calcul conditionnel sur des dates
Et comme ceci:
Code:
I=[Resultat] ACalculer=[Prochain_C] Test=[Controle] If I="Conforme" then ACalculer=Test + 3650 ElseIf I="Non-Conforme" then ACalculer=Test + 365 End If
Mettre "ACalculer" dans le champ en dessous du code
Dernière modification par Spacejo (Tue 01 October 2013 17:51)
Hors ligne
#5 Tue 01 October 2013 17:53
- Rouyer Cyril
- Participant occasionnel
- Date d'inscription: 27 Sep 2012
- Messages: 24
Re: Arcgis 10 : Calcul conditionnel sur des dates
J'ai bien compris le script mais je ne comprends pas ta dernière remarque.
Mettre "ACalculer" dans le champ en dessous du code
Hors ligne
#6 Tue 01 October 2013 17:55
- Spacejo
- Membre
- Lieu: Nancy
- Date d'inscription: 17 Aug 2008
- Messages: 2511
Re: Arcgis 10 : Calcul conditionnel sur des dates
En dessous de la fenêtre oû tu places le code il doit y avoir un champ appeler "Prochain_C="
C'est dans ce champ qu'il te faut placer la variable "ACalculer"
Une question peut être bête (désolé) ---> tu as coché le mode "Avancé" ?
Dernière modification par Spacejo (Tue 01 October 2013 17:57)
Hors ligne
#7 Tue 01 October 2013 18:01
- Rouyer Cyril
- Participant occasionnel
- Date d'inscription: 27 Sep 2012
- Messages: 24
Re: Arcgis 10 : Calcul conditionnel sur des dates
Question pas bête du tout, où se trouve l'option avancé?
Je suis dans la calculatrice de valeur de champs. Peut être n'est ce pas par là?
Hors ligne
#8 Tue 01 October 2013 18:03
- Spacejo
- Membre
- Lieu: Nancy
- Date d'inscription: 17 Aug 2008
- Messages: 2511
Re: Arcgis 10 : Calcul conditionnel sur des dates
Comme tu as une version 10: Coche "VBscript" et "ShowCodeBlock"
Voir ---> Utilisation de blocs de code
Dans --- > http://help.arcgis.com/fr/arcgisdesktop … 002m000000
Dernière modification par Spacejo (Tue 01 October 2013 18:26)
Hors ligne
#9 Tue 01 October 2013 18:13
- Spacejo
- Membre
- Lieu: Nancy
- Date d'inscription: 17 Aug 2008
- Messages: 2511
Re: Arcgis 10 : Calcul conditionnel sur des dates
Une autre solution si tu n'arrives avec un code VBscript comme celui que je t'ai suggéré.
Faire une sélection SQL avec comme critère "Conforme" puis calcule ton champ avec [Controle] + 3650
en précisant sur la "sélection" et non sur la "table entière"
Puis tu fais une autre sélection avec "Non-Conforme" même manip qu'au dessus avec [Controle] + 365
Tout ça avec la fenêtre Calculer Champ en Non Avancé ce coup ci
Dernière modification par Spacejo (Wed 02 October 2013 00:57)
Hors ligne
#10 Wed 02 October 2013 09:04
- Rouyer Cyril
- Participant occasionnel
- Date d'inscription: 27 Sep 2012
- Messages: 24
Re: Arcgis 10 : Calcul conditionnel sur des dates
Merci pour les infos. La solution alternative que tu me proposes est ce que j'avais réalisé avant de faire ce post. Mais je voulais comprendre comment faire les conditionnelles pour la prochaine fois.
Je vais tester dans la journée les réglages et je te tiens au courant. Entre nancéen...
Hors ligne
#11 Wed 02 October 2013 10:21
- Rouyer Cyril
- Participant occasionnel
- Date d'inscription: 27 Sep 2012
- Messages: 24
Re: Arcgis 10 : Calcul conditionnel sur des dates
Bonjour Spacejo,
J'ai bien pris note des endroits où noté les code ainsi que la page vers laquelle tu m'a renvoyé mais cela ne fonctionne toujours pas. J'ai alors tenté avec un code encore plus simple :
Dim ACalculer
If [FID] < 100 Then
ACalculer = [Controler] + 365
ElseIf [FID] > 101 Then
ACalculer = [Controler] + 3650
End If
et en mettant ACalculer dans le champ en dessous du code.
Toujours pas de succès. Toujours les même messages d'erreur.
Hors ligne
#12 Wed 02 October 2013 10:57
- Spacejo
- Membre
- Lieu: Nancy
- Date d'inscription: 17 Aug 2008
- Messages: 2511
Re: Arcgis 10 : Calcul conditionnel sur des dates
Salut,
Depuis la version 10 la déclaration de variable standard n'est plus obligatoire et pose des problèmes (j'ai lus plusieurs posts là dessus )
Donc plus de --> Dim ACalculer
Une question de quelle nature est ta colonne ACalculer?
Hors ligne
#13 Wed 02 October 2013 11:05
- Rouyer Cyril
- Participant occasionnel
- Date d'inscription: 27 Sep 2012
- Messages: 24
Re: Arcgis 10 : Calcul conditionnel sur des dates
La variable ACalculer correspond au champ [prochain_C] c'est donc au format Date.
Si on ne met plus "Dim" comment présente t'on la variable?
Hors ligne
#14 Wed 02 October 2013 11:13
- Spacejo
- Membre
- Lieu: Nancy
- Date d'inscription: 17 Aug 2008
- Messages: 2511
Re: Arcgis 10 : Calcul conditionnel sur des dates
Déclaration de variable --> Voir post#3 --> http://www.forumsig.org/showthread.php/ … -ArcGis-10
Je suppose que la nature de "Acontroler" est aussi au format date.
Je pense que ce qui pose problème c'est le calcul des dates
Une possibilité pour voir si c'est ça qui pose problème.
Fais une copie de ta table (prudence )
Ajoute une colonne dans ta table "New" au format string
Puis
Code:
I=[Resultat] ACalculer=[New] If I="Conforme" then ACalculer="oui" ElseIf I="Non-Conforme" then ACalculer="Non" End If
Dernière modification par Spacejo (Wed 02 October 2013 11:28)
Hors ligne
#15 Wed 02 October 2013 11:23
- Rouyer Cyril
- Participant occasionnel
- Date d'inscription: 27 Sep 2012
- Messages: 24
Re: Arcgis 10 : Calcul conditionnel sur des dates
Pourtant lorsque je le fait sans condition, cela fonctionne parfaitement. C'est à dire une selection préalable et mettre à jour sur la sélection.
Hors ligne
#16 Wed 02 October 2013 11:32
- Rouyer Cyril
- Participant occasionnel
- Date d'inscription: 27 Sep 2012
- Messages: 24
Re: Arcgis 10 : Calcul conditionnel sur des dates
Je viens de réaliser la manip et cela fonctionne parfaitement.
Hors ligne
#17 Wed 02 October 2013 11:34
- Spacejo
- Membre
- Lieu: Nancy
- Date d'inscription: 17 Aug 2008
- Messages: 2511
Re: Arcgis 10 : Calcul conditionnel sur des dates
Une question bête encore une fois
Tu travailles sur un .shp ou sur une géodatabase?
Hors ligne
#18 Wed 02 October 2013 11:37
Re: Arcgis 10 : Calcul conditionnel sur des dates
Bonjour,
La question indispensable pour laquelle je n'ai pas vu de réponse c'est : Quel est la nature de ton champ [Controler] .
en fait il y a deux solutions
la première : tu utilise la fonction vbscrite dateAdd:
Code:
Dim MonCalcul Select case [TonChampConformite] case "Conforme" MonCalcul =DateAdd ("yyyy",10, [Controler] ) case "Non Conforme" MonCalcul =DateAdd ("yyyy",1, [Controler] ) end select
la deuxième : tu converti en nombre ta date pour lui ajouter un nombre de jour (tu ne peux pas ajouter simplement des jours a une date puisqu'une date est multivariée en année mois jours heure seconde)
Code:
Dim MonCalcul Select case [TonChampConformite] case "Conforme" MonCalcul =Int ([Controler] )+3650 case "Non Conforme" MonCalcul =Int ([Controler] )+365 end select
évidemment tout ça fonctionne uniquement si [Controler] est en type "date"
Dernière modification par Forestis (Wed 02 October 2013 11:41)
[Matthieu Pette - Ad Terram] (@Ad_Terram sur le PiouPiou bleu)
~Géomaticien Indépendant~
Hors ligne
#19 Wed 02 October 2013 11:40
- Spacejo
- Membre
- Lieu: Nancy
- Date d'inscription: 17 Aug 2008
- Messages: 2511
Re: Arcgis 10 : Calcul conditionnel sur des dates
Merci à toi Forestis
A+
Joël
Hors ligne
#20 Wed 02 October 2013 11:45
Re: Arcgis 10 : Calcul conditionnel sur des dates
Pour préciser quand tu converti une date en nombre cela affiche le nombre de jour depuis le 01/01/1900 (ou le 31/12/1899) je sais plus)
et c'est donc avec ce chiffre que tu peux rajouter des jours.
ex : aujourd'hui nous sommes 02/10/2013 soit 41549 jours après cette date de début du calendrier.
Pour DateAdd un lien vers les fonctions vbscript de date : http://www.w3schools.com/vbscript/vbscr … ctions.asp
EDIT en fait c'est le 30/12/1899 la date de reference
Dernière modification par Forestis (Wed 02 October 2013 11:57)
[Matthieu Pette - Ad Terram] (@Ad_Terram sur le PiouPiou bleu)
~Géomaticien Indépendant~
Hors ligne
#21 Wed 02 October 2013 11:48
- Rouyer Cyril
- Participant occasionnel
- Date d'inscription: 27 Sep 2012
- Messages: 24
Re: Arcgis 10 : Calcul conditionnel sur des dates
Merci Forestis, ta solution n°1 fonctionne parfaitement.
Merci Joël, pour le temps passer, j'ai appris pas mal de truc. Pour répondre à ta dernière question je bosse mes essai sur un .shp.
Merci à vous 2.
Cyril
Hors ligne