Vous êtes sur la page 1sur 62

COLLECTE DES DONNÉES PAR

CAPI
Sommaire
Introduction________________________________________________________________4

Présentation de CS Pro_____________________________________________________4
Installation :______________________________________________________________5
Chapitre ii : Dispositif organisationnel et architecture technique._____________________6

2.1. Exemple de dispositifs :_________________________________________________6


2.2. Les résultats attendus du dispositif________________________________________6
3.2. Architecture technique proposée__________________________________________8
Chapitre 3  : Développement d’une application CAPI_______________________________9

3.1. La définition du dictionnaire des données__________________________________9


3.1.1. Création du dictionnaire______________________________________________9
3.1.2. Ajouter des records (Sections du questionnaire)___________________________11
3.1.3. Ajouter des Items (questions)_________________________________________12
3.1.4. Ajout des values sets (modalités)_______________________________________13
3.2. Génération d’un masque de saisie :______________________________________14
3.3. La spécification des procédures de contrôle________________________________17
3.4. La Programmation sous CSPro et Les commandes de contrôle______________17
3.4.1. Généralités.______________________________________________________17
3.4.2. Section de déclaration (PROC GLOBAL)____________________________19
3.5.3. Les opérateurs____________________________________________________20
3.5.4. Liste des commandes_____________________________________________21
3.3. Implémentation de la fonctionnalité CAPI_________________________________37
3.3.1. Affiner la présentation : Sélection des contrôles étendus____________________38
3.3.2. Ajouter un libellé pour chaque question :________________________________41
3.3.3. Faire des menus :___________________________________________________42
3.3.4. Déploiement de l’application__________________________________________43
Chapitre 4  : Etude de Cas : Développement d’un application CAPI___________________46

4.1. Objet________________________________________________________________46
4.2. Pré-requis____________________________________________________________46
4.3. Organisation du développement_________________________________________46
4.4. Les fonctions essentielles_______________________________________________48
Run pff________________________________________________________________48
Selcase________________________________________________________________48
Loadcase______________________________________________________________48
Writecase______________________________________________________________48
Find__________________________________________________________________48
Show_________________________________________________________________48
Filecopy_______________________________________________________________48
Fileempty______________________________________________________________48
Filedelete______________________________________________________________48
setfile_________________________________________________________________48
Fileread_______________________________________________________________48
Close_________________________________________________________________48
4.5. Réalisation de l’application de collecte de la République :___________________48
4.5.1. Travaille demandé__________________________________________________48
4.5.2. DECOUPAGE DU TERRITOIRE DE LA REPUBLIQUE DE NDIAYENE____49
4.5.3. Organisation de la collecte :___________________________________________49
Fonctionnalité attendues :_________________________________________________51
INTRODUCTION
CSPro permet de réaliser des interviews assistées par ordinateur communément appelées aussi
interview CAPI (Computer-Assisted Personal Interviewing). Cette approche permet un gain de
temps énorme en combinant la collecte et la saisie. L'interview est réalisée en face-à-face, et
l'application de saisie détermine l'ordre des questions, et effectue également l'édition des
réponses.

Le CAPI offre une approche flexible de la collecte, une amélioration de la qualité des données,
des entrevues plus efficaces et un traitement plus rapide. Cependant, le déploiement d'une
enquête CAPI pourrait être une entreprise coûteuse, puisque chaque intervieweur a besoin d'un
ordinateur portable ou PDA , et peut-être plus de formation.

Pour une réussite d’une collecte sur CAPI, outre le développement des applications de collecte,
cette opération nécessite un certain dispositif organisationnel (serveurs, PDF, Ultra Portable,
clé connexion, chargeur…), une architecture technique cohérente…

L’objectif de ce document est de revenir sur les différentes étapes du processus de mise en place
d’une enquête CAPI avec l’utilisation de CSPro
PRÉSENTATION DE CS PRO
CSPRO est le produit de la fusion des logiciels « IMPS » et « ISSA». MPS intégrait trois
logiciels à savoir : le CENTRY (saisie des données), le CONCOR (des données de
Recensements) et le CENTS (Tabulation). Il a été développé par le CENSUS Bureau.
ISSA a été développé par MACRO International.
CSPRO a remplacé ces deux applications citées plus haut dans le domaine des enquêtes et
recensements. Son principal avantage se situe dans le traitement des fichiers hiérarchiques. Il
contient plusieurs modules dont :
Data Entry : Permet d’ajouter, de modifier, de vérifier et d’afficher des données
(questionnaires). Il offre entre autre la possibilité de:
 Créer un nombre illimité de formulaires (écrans au écran de saisie);
 Créer des contrôles de cohérence;
 Affichage des messages définis à l’utilisateur au cours de la saisie;
 Lire et écrire dans des fichiers secondaires;
 Éviter de saisie plusieurs fois les mêmes informations;
 Produire des statistiques de l'opérateur.
 
Batch Editing: Il permet de:

 Identifier et de signaler la structure, la valeur et les erreurs de cohérence dans les


données du questionnaire;
 Modifier les valeurs (imputation) de données basées sur des méthodes simples ou
complexes;
 Produire sommaires ou des rapports détaillés des erreurs et de corrections;
 Plusieurs fichiers de consultation de l'accès.
 Lire et écrire dans des fichiers secondaires.

Tabulation : Elle permet de :


 Définir et sélectionner les variables à totaliser.
 Sélectionnez l'univers de la totalisation.
 Dresser un tableau des valeurs et des poids.
 Tableaux de format pour l'affichage ou l'impression.
 Produire des tableaux par zone géographique.
 Carte des résultats par zone géographique.

Data Dictionary :
 Définir l'organisation hiérarchique de fichiers simple ou complexe;
 Définir les niveaux hiérarchiques, articles d'identification, des dossiers, des éléments
(champs ou variables), des ensembles de valeurs (catégories de valeurs), et des valeurs

Export Data : Permet d’exporter les données sur d’autres formats : Excel, SAS, SPSS, Stata, R.

Nous aurons l’occasion ne revenir plus en détail sur chacun de ces composants

INSTALLATION :
La version de CSPro que nous utilisons dans cette formation est la Version 5.0. Elle est
téléchargeable gratuitement sur :
http://www.census.gov/population/international/software/cspro/csprodownload.html

CSPro s’installe comme la plupart des logiciels habituels de Windows. Il suffit de suivre la
procédure d’installation jusqu’à la fin.
CHAPITRE 2 : DISPOSITIF ORGANISATIONNEL ET ARCHITECTURE
TECHNIQUE.

2.1. EXEMPLE DE DISPOSITIFS :


Le dispositif organisationnel et l’architecture technique dépendent souvent des types de
technologies utilisées. Il en existe trois types qui sont utilisés dans les enquêtes et recensements
en fonction des les nouveaux terminaux de collecte (ultra portable, PDA, tablet etc):

 Le Dot Net  mis en place par Microsoft, permet le développement d’applications sur
mobiles et desktops [voir le Resencement Général de la Population, l’Habitat, de
l’élévage de l’Agriculture (RGPHAE) du Sénégal de 2013] ;
 L’Andoid avec le développement d’application de collecte mobile à partir du langage
Java [voir l’enquête Listening to Senegal (L2S), 2014] ;
 CSPro CAPI utilisable à la fois sur windows mobile et sur Android. La mise en œuvre
d’une enquête ou recensement avec cette dernière technologie est l’objet du présent
document.

2.2. LES RÉSULTATS ATTENDUS DU DISPOSITIF


Quelque soit le dispositif organisationnel, il doit permettre :

 Une coordination entre les différentes entités qui composent le dispositif de collecte :
Concernant cet aspect, il est souvent développé une plateforme Web qui permet entre
autre :
o Le recrutement des agents de terrain : Des applications de dépôt de candidature
peuvent être développées et mise à la disposition du public
o Faire la composition des équipes
o Faire le lien entre les équipes/enquêteurs avec les zones/dr de dénombres ;
o Le suivi de la collecte en temps réel, globalement, par superviseur, par enquêteur et
zone d’enquête ;
o Le téléchargement des mises à jour, en effet il arrive souvent qu’après le
déploiement des enquêteurs sur le territoire que l’on se rend compte que l’outil ou
les outils de collectes rencontrent quelques problèmes. Pour les résoudre, des mises
à jour qui permettent de corriger les défauts notés, sont mises à la disposition des
équipes sur le terrain ;
o une réactivité face aux problèmes qui vont survenir au niveau du terrain ;
o Retour de questionnaire vers un agent pour correction
o Transfert de question vers un autre agent
o Restitution des résultats de la collecte
o Envoie de notification au enquêteurs/PDA/Tablettes
 Le déploiement des applications sur les terminaux de collectes ainsi que l’installation
des mises à jour :
Généralement pour les opérations du type, les équipes sont accompagnées de
techniciens informaticiens chargés de gérer l’ensemble des aspects liés à l’entretien des
matériels, à l’installation des applications et des mises à jour…
 L’échange des données entre les unités de collectes et le niveau central/superviseur (pré-
chargement des applications des applications de collecte et envoie des données
collectées vers le niveau central). Ce volet est peut être géré de différentes manières
suivant la complexité du choix des répondants et le niveau de contrôle souhaité au
niveau des données transmises.
o La première manière est d’inclure toutes ces fonctionnalités dans l’application de
l’agent enquêteur aussi bien les informations à pré-chargées (au niveau central) que
la remontée des données (souvent stockées dans des cartes SD ou remontées
directement vers un serveur).
o La deuxième manière est de faire jouer au superviseur un rôle d’interface entre le
niveau central et l’agent enquêteur. Pour se faire, une application superviseur doit
être développée. Cette dernière doit lui permettre de faire le dispatching des unités
à interviewer entre ses agents enquêteurs sur le terrain mais de récupérer les
données une fois collectées, d’en faire faire une première vérification avant de les
envoyer vers le niveau central. Dans ce document cette approche sera privilégiée
dans la mesure où :
 Elle permet plus de contrôles donc une meilleure qualité des données ;
 Elle permet de dispatcher le travail en tenant compte des réalités du
terrain (contraintes linguistiques, rapidité de chaque enquêteur…) ;
 Elle donne la possibilité de demander à un enquêteur de retourner une
unité si les données ne sont pas de bonnes qualités
 Elle permet Remplacer une unité statistique non
disponible/refus/introuvable
3.2. ARCHITECTURE TECHNIQUE PROPOSÉE
L’architecture dépend souvent du type de la technologie utilisée et du dispositif mis en place.
Toutefois nous pensons que le ci-dessous est adéquat dans la plupart des cas. Cependant, il peut
être plus ou moins allégé selon les besoins :
CHAPITRE 3 :
DÉVELOPPEMENT D’UNE APPLICATION CAPI
A quelques différences prés, le développement d’une application CAPI passe par les mêmes étapes
que celles d’un masque de saisie émanant d’un questionnaire papier sous CSPro à savoir :
 La définition du dictionnaire des données ;
 La génération du masque de saisie ;
 L’implémentation des contrôles de cohérence ;

En plus de ces points, il faut ajouter l’activation du mode CAPI, la définition des types de
captures, la segmentation des différents dictionnaires de données et l’implémentation de
quelques fonctions avancées de CSPro. Nous aborderons ces différents points dans ce qui suit.

Le chapitre 4 est consacré à une étude de cas de l’utilisation du CAPI pour la collecte. Il est
basé sur les questionnaires du recensement agricole du Mali. Ce chapitre 4, abordera
l’ensemble des dispositions à prendre pour réussir le développement d’une application CAPI
sous CSPro.

3.1. LA DÉFINITION DU DICTIONNAIRE DES DONNÉES

3.1.1. CRÉATION DU DICTIONNAIRE


Pour créer le masque de saisie sous CSPRO, il faut, sur la base du questionnaire, décrire la structure
des données en question. C’est pour cette raison que la conception du questionnaire et du masque
de saisie doivent être des opérations intégrées. Le dictionnaire des données décrit l’organisation du
fichier de données. Il permet ainsi de préciser la nature, le type et la taille des records, des variables,
des modalités (selon le cas). Un record correspond à une section du questionnaire. Il permet
d’enregistrer les réponses relatives aux questions (item) traitant d’un thème commun. Les records
(sections) et les items (questions) possèdent des propriétés (type, libellé, taille, etc.).

Sous-CSPRO, on crée un nouveau dictionnaire des données en utilisant l’option File/new… du


menu. Le choix de cette option affiche la boîte de dialogue suivante :

Le type d’objet correspondant au dictionnaire de données c’est « Data Dictionnary ». En


sélectionnant cette option, l’écran suivant apparait :
Il reste donc à donner un nom au fichier, ainsi que le chemin, puis cliquer sur create. Un
dictionnaire a comme extension « .dcf ».

Si les informations données sont conformes à celles affichées, faire terminer. A défaut, faire
précédent pour modifier les erreurs éventuelles. On obtient alors l’environnement de travail
suivant :

3.1.2. AJOUTER DES RECORDS (SECTIONS DU QUESTIONNAIRE)


Le dictionnaire initial comporte deux records : un record « Id items » destiné à contenir
l’identifiant (composé le cas échéant de plusieurs variables) et un record vide. La première chose à
faire, c’est (en fonction de la structure du questionnaire) d’insérer et de modifier le nom des records
pour chaque section du questionnaire.

Pour ajouter un record, il est conseillé de cliquer sur le bouton questionnaire de la fenêtre de
gauche. L’environnement de travail se présente alors comme suit :

En utilisant les menus contextuels dans la fenêtre de droite, on a la possibilité d’ajouter, de modifier
ou de supprimer un record. Les propriétés d’un record sont les suivantes :

Record Label : il s’agit du libellé que l’on veut donner au record

Record Name : correspond au nom logique du record, c’est lui qui sera utilisé le cas échéant dans
les procédures de contrôle pour faire référence au record. Il est composé d’au plus 32 caractères.
Les caractères possibles sont : A-Z, 0-9, et le _. Rmq : la première position est réservée pour les
lettres de A à Z. Par ailleurs, la dernière position ne saurait être le _. Il faut noter pour finir que
CSPRO possède des noms réservés1 qui ne peuvent être utilisés au niveau du dictionnaire.

Type value : C’est un alphanumérique qui permet d’identifier les lignes du fichier des données qui
représentent un record donné.

Required : prend deux valeurs possibles : Yes/No. Il s’agit de dire si pour chaque questionnaire, on
a au moins une occurrence de ce record. Pour le cas du questionnaire ECAM, les sections où il y a
des conditions d’éligibilité prennent la valeur No pour cet attribut.

Max: Précise le nombre maximum d’occurrences possibles pour une section donnée. Si ce nombre
est supérieur à 1, on pourra générer des rosters au niveau du masque de saisie.

Remarque : Avant les variables de chaque record, on a ne répétition des identifiants.

3.1.3. AJOUTER DES ITEMS (QUESTIONS)


A cette phase, il ne reste plus qu’à ajouter les items (questions) à l’intérieur de chaque record
(section). Pour ajouter un item, le processus est le même que lorsqu’on veut ajouter un record.

Dans la fenêtre de gauche, il faut cliquer sur le record à l’intérieur duquel on aimerait ajouter des
items. La fenêtre de droite prend alors l’apparence suivante :

1
Utiliser le menu contextuel dans la fenêtre de droite pour ajouter, supprimer ou modifier un
item. Les propriétés des items sont différentes de celles des records. On ne s’étendra pas ici sur les
propriétés Item label et Item Name qui rejoignent le cas record label et record Name.

Start : Champ très important, précise la position du fichier à partir de laquelle la réponse à la
question sera stockée. Il est conseillé de laisser CSPRO gérer automatiquement ce champ, sauf
pour le cas des SubItems (à voir plus loin).

Len : permet de donner la taille du champ en terme de nombre de positions.

Data Type : permet de préciser le type de donnée du champ en cours. Les types possibles sont :
numériques et alphanumériques.

Item Type : Par défaut, ce champ prend la valeur Item. Il existe des questions dont les réponses
peuvent être subdivisées en sous réponses. L’exemple typique est celui de la date qui est composée
du jour, du mois et de l’année. On peut demander à CSPRO de gérer le jour, le mois et l’année
comme des Subitems de la variable date. Lorsqu’on choisit Subitem, il faut modifier les propriétés
Start et Len de telle sorte que la position du Subitem coïncide avec la partie de l’item qu’il
représente.

Occ : permet de préciser le nombre d’occurrence de l’item dans le record. Si on décide par exemple
que cette valeur vaut 5 pour une variable qui tient sur deux (02) positions (Len), CSPRO va
réserver 10 positions pour la saisie des informations sur ce champ.

Dec : correspond au nombre de décimale d’une variable de type numérique.

Dec char : Vaut Yes ou No, précise pour les variables numériques avec décimale s’il faut une
virgule pour séparer la partie entière de la partie décimale.

Zéro Fill : Prend deux valeurs possibles : Yes ou No. Lorsque la valeur choisie est Yes, CSPRO
complète (le cas échéant) les saisies par des zéro à gauche.

3.1.4. AJOUT DES VALUES SETS (MODALITÉS)


Dans cette partie, nous apprenons à définir les valeurs valides afin, d’une part, d’éviter la saisie des
valeurs non admisses et d’autre part de créer des classes de valeur. Les exemples ci-dessous nous
permettront de mieux appréhender la notion de valeurs légales.
 Concernant les variables dont les modalités sont entièrement connues, il est préférable de
définir des valeurs valides (modalités ou si possible des codes associés à ces modalités).
 Pour les besoins de l’analyse, certaines variables numériques peuvent être regroupées en
classes. C’est le cas, par exemple, de la variable âge. Au cours de l’interview, on suppose
qu’on a donné aux enquêteurs l’instruction de noter l’âge en année révolu du répondant.
Cependant on peut être aussi intéressé par la répartition des individus par groupe d’âge
quinquennaux.

A partir du dictionnaire des variables, sur la variable (item) concernée faites avec un clic droit, le
un menu contextuel s’affiche comme le montre la figure ci-dessus et il faut alors cliquer  sur «Add
Value Set» pour définir les valeurs valides.

Cette dernière action donne accès à une page où est inscrit par défaut le nom de la variable
concernée. Appuyez deux fois sur « entrer », ensuite saisissez les différentes modalités en prenant
le soin d’attribuer à chaque modalité le code correspondant. Ce code sera utilisé pour la saisie des
données. La figure 8 (ci-dessous) en donne une bonne illustration.

Value Label : doit être renseigné par le libellé de la modalité concernée

From : doit être renseigné par le code correspondant à la modalité. En outre, pour les variables
numériques dont les modalités sont regroupées en classe, on saisit dans le champ «From», la borne
inférieure

To : est réservé à la borne supérieure


Considérons les exemples ci-dessus. Le code associé à la modalité Masculin est «1». Ainsi au cours
de la saisie pour tout répondant ayant de sexe Masculin, on saisira le code «1». En ce qui concerne
la variable âge, tout répondant ayant plus de 5 ans révolus et moins de 10 ans révolus (par exemple
7 ans) sera dans la classe « 5 ans à 9 ans ». Ainsi au cours de la saisie, on saisira 7 ans pour
l’individu concerné et il sera automatiquement considéré dans ladite classe.

En suivant les trois étapes définies ci-dessus, vous parviendrez à concevoir aisément un
dictionnaire de variable.

3.2. GÉNÉRATION D’UN MASQUE DE SAISIE :


Le masque de saisie se génère, à partir du dictionnaire des variables. Une fois le dictionnaire

achevé, faire File/New . Ensuite au niveau de la boite de dialogue qui s’affiche, choisir
comme type d’objet «Data Entry Application», qui permet de créer un fichier d’extension

«ent». Puis cliquer sur OK. A cette étape, il faut choisir le dossier où l’on aimerait enregistrer
le fichier, préciser le nom du fichier et cliquer enfin sur « Create/Créer ». Cette dernière
action conduit à l’affichage de la boîte de dialogue ci-dessous qui permet de choisir le
dictionnaire correspondant.

Il est important de choisir le dictionnaire adéquat. il vous revient de trouver le bon dictionnaire

en cliquant sur le bouton en face du chemin d’accès. Une fois le dictionnaire adéquat choisi,
cliquer sur OK. Un message s’affiche vous demandant si vous désirez générer le masque de saisie
à partir du dictionnaire sélectionné, cliquer sur «Oui». L’étape suivante est l’affichage de la boîte
de dialogue suivante :
Cliquer enfin sur Ok et le masque de saisie est généré.

Permet de choisir le nom (Label ou Name) de la variable qui figurera dans le masque de saisie et l’option
Text Options Text left et Text Right aide à disposer le Label/Name par rapport au champ de saisie (à droite ou à
gauche)
L’option conduit à une présentation très conviviale des records sous forme de tableau lorsque ceux-ci ont
Roster Options plus d’une occurrence. Selon la disposition recherchée, choisissez horizontale, verticale ou pas de Roster
du tout.
Require « Enter » L’option ci-avant, si elle est sélectionnée, impose que la saisie de chaque variable soit validée avant de
Key on Entry passer à un autre champ.
Use Subitems Lorsqu’elle est cochée, cette option permet d’affiche dans le masque de saisie les Subitems. l’item pourra
When present être déduit comme étant la concaténation de ses Subitems.
L’expérience montre que très souvent, le premier masque de saisie généré est loin d’être acceptable.

« Pour la convivialité du travail et dans l’esprit de limiter les erreurs dues à la saisie, il convient de faire
une mise en forme du masque de saisie (selon le besoin afin qu’il ressemble parfaitement au
questionnaire administré) et d’introduire des contrôles de cohérence en respectant les règles de la
programmation sous CSPro. »

Quelques options de mise en forme

Position des variables

Le formulaire de saisie nouvellement généré est très différent du questionnaire utilisé. Il se


présente généralement sous la forme ci-dessous :

Sous CSPro, la mise en forme consiste à ajouter des textes, changer le positionnement des variables
et trace des cadres.

Pour ajouter un texte, il suffit de faire un clic droit sur la page du formulaire et choisir «Add text»
dans le menu contextuel ci-dessous. Il conviendra ensuite de saisir dans la boite qui s’affichera
le texte souhaité.

Champ-miroir :
Des champs miroir peuvent être introduits. Un champ-miroir est une variable qui est présente dans
un écran de saisie sans qu’on puisse la modifier. Les identifiants sont très souvent placés comme
champs-miroirs. Pour créer un champ miroir, on fait glisser la variable concernée du dictionnaire des
données vers l’emplacement souhaité à l’écran de saisie.
Texte et encadré

Des textes peuvent être ajoutés dans l’écran de saisie afin de rendre le masque de saisie très
convivial. L’on peut aussi tracer des traits ou dessiner des encadrés. Un clic droit sur l’écran de
saisie donne accès au menu contextuel ci-dessous. Add Text pour ajouter un texte et Add Boxes
pour tracer un trait ou dessiner un encadré.

Propriétés Libellé
Permet de modifier le Label, le nom et
Form Properties la couleur du Formulaire
Delete Form Permet de supprimer le Formulaire
Add Text Aide à ajouter des textes dans le Formulaire
Add Boxes Aide à ajouter des encadrés, des traits
Add Form Permet d’ajouter des Formulaires

View Logic ou le affiche le module de programmation des


procédures de contrôle à la saisie.
Bouton

3.3. LA SPÉCIFICATION DES PROCÉDURES DE CONTRÔLE


Une fois la mise en forme du masque de saisie achevée, il convient de spécifier les différents
contrôles de saisie.

La saisie contrôlée permet de minimiser les erreurs de saisie. Les vérifications automatiques
prennent en compte les contrôles de validité de code, les amplitudes des valeurs, les cohérences
avec d’autres variables du même questionnaire. Les sauts automatiques seront
g é r é e s à c e n i v e a u . Il convient de préciser que lavitesse de la saisie est inversement
proportionnelle au nombre de contrôles. Afin de ne pas ralentir (ou même de bloquer) la saisie,
leur nombre est souvent volontairement limité.

Sous CSPro, le bouton ci-après dans la barre d’outils permet d’accéder à l’environnement de

travail relatif à la rédaction des procédures de contrôle. Ces deux icônes permettent de
basculer tour à tour de l’écran de saisie à la zone de rédaction des procédures de contrôle.

3.4. LA PROGRAMMATION SOUS CSPRO ET LES COMMANDES DE CONTRÔLE

3.4.1. GÉNÉRALITÉS.
Le langage de programmation sous CSPRO est assez proche du Pascal. Chaque objet (record,
roster, item, etc.) pour lequel on souhaite établir une procédure de contrôle, doit obligatoirement
posséder une procédure Preproc et/ou une procédure Postproc. Preproc permet de rédiger les
contrôles que l’on souhaite effectuer avant la saisie d’une quelconque information concernant l’objet
en cours. Aussi, Preproc est exécutée avant l’apparition du curseur dans ledit champ. Postproc quant
à elle, permet de spécifier les actions à faire après la saisie des données dans le champ. Toutes les
procédures débute par le mot clé PROC suivi du nom de l’objet sur lequel il s’applique. Exemple :

PROC AGE
Preproc

Instructions A
Postproc

Instructions B
Nous allons, à travers quelques exemples, asseoir les notions de programmation sous

CSPRO.

Exemple 1 : Voici une procédure qui affiche le message «donnée erronée» et impose une nouvelle
saisie, si la valeur saisie ne respecte pas la plage de valeurs permise (le milieu de résidence est compris
entre 1 et 3).

PROC MILIEU
postproc

if $<1 or $>3 then


x= errmsg(001) ;
reenter ;

endif ;

Dans la fenêtre message, taper : 001 Donnée


erronée

Le caractère $ fait référence à l’information qui est entrain d’être saisie. La fonction reenter
maintient le curseur dans le champ en cours pour une nouvelle saisie. On remarque par ailleurs que
chaque instruction se termine par un « ; ». Exemple 2 : traitons d’un cas où, on doit «sauter» à la
question S03Q9, si la réponse est 2 (non).

PROC S03Q3
postproc

if $=2 then

skip to S03Q9 ;

endif ;
Exemple 3 : Traitons d’un cas où, si le ménage n’a eu aucune naissance (S05Q1=2 ) alors on
doit terminer la section en cours et « sauter » à la section suivante.
PROC S05Q1
postproc

if $=2 then
endsect ;
endif ;
Exemple 4 : Cas où le code de l’équipement correspond au numéro de ligne de l’enregistrement.
Pour gagner du temps à la saisie, il sera « pré imprimé ».

PROC S05Q1
preproc

S07Q15(noccurs(LOGE_B)+1)= noccurs(LOGE_B)+1;

noinput ;

LOGE_B est le nom logique du record correspondant à la sous-section 07.2. l’instruction


noinput fait passer de la preproc à la postproc. Ceci interdit toute saisie dans le champ
concerné.

3.4.2. SECTION DE DÉCLARATION (PROC GLOBAL)


Les déclarations et les définitions sont définies dans la procédure globale. Dans cette section
vous déclarez le mode de fonctionnement (implicite ou explicite), des variables, des tableaux
et des fonctions définies par l'utilisateur. La procédure globale apparaît toujours au début du
fichier de logique et commence par la ligne "PROC GLOBAL". À part les fonctions définies
par l'utilisateur, il n'y a aucune déclaration exécutable dans cette section. Vous pouvez éditer
la section PROC GLOBAL en cliquant sur la plus haute entrée de l'entrée de données édite
l'arbre ou le lot édite l'arbre.

Exemple :

PROC GLOBAL

set explicit; {mode}

numeric x, xage; (numeric variables)


alpha flag; (alphanumeric variable)
array Relly(5); (numeric array)

• Les fonctions
Des fonctions définies par l'utilisateur sont codées dans la partie de déclaration (PROC
GLOBAL) d'une application. Une fois définies, elles peuvent être utilisées n'importe où
dans l’application. Les fonctions sont utilisées pour exécuter les opérations qui sont
utilisées en plusieurs endroits différents dans une application.
Le format de la commande :

Valeur de retour = nom de fonction (liste de paramètre)


Exemple :

function InitRellyArray (); {user-defined function}


Relly (1) = 3; { enfant du CM }

Relly (2) = 4; { parent du CM }

Relly (3) = 9; { petit-fils du CM }


Relly (4) = 8; { grandparent du CM }
end;

3.5.3. LES OPÉRATEURS

• opérateurs arithmétiques

opérateur symbole

Addition +

Soustraction -

Multiplication *

Division /

Modulo (remainder) %

Exponentiation ^

• comparateurs

comparateurs Symbole

Egal à =

Différent de <>

Strictement inférieur à <

Inférieur ou égal à <=

Strictement supérieur à >

Supérieur ou égal à >=

Dans la plage In

opérateurs logiques

Operateur Symbole Keyword


Négation ! not
Conjonction (et) & and
union (ou) | or
Si et seulement si <=>
3.5.4. LISTE DES COMMANDES

Accept Rend le numéro d'un choix sur une liste proposée à l'opérateur de saisie de
données.

Exemple:

 PROC UR
 preproc
   I = 0;
   do until I in 1:2
     I = accept("Area Designation?", "Urban", "Rural");
   enddo;
   $ = I;
   noinput;

Advance Avance à un champ indiqué durant l'entrée de données.

Format 1:
advance [to] field-name;  
 
Format 2:
advance [to] alpha-variable;

Alpha Déclare des variables alphanumériques utilisées dans l'application.

Format:
alpha [(len)] var-1[, var-2[..., var-n]]);

Si la valeur de len n’est pas précisée, elle prend par défaut la valeur 16.

Exemple 1:
PROC GLOBAL
  alpha a,b,c;
  alpha(10) x,y;
 
PROC A1
x = "hi mom";
 
x sera égal à "hi mom    "
               1234567890
 
x = "good night, mom";
 
x sera égal "good night"
             1234567890
 
Exemple 2:
PROC GLOBAL
alpha (3) reply;
alpha flag;
 
PROC Q5
if q5 = 1 then
  reply = "Yes";
  flag = "Y";
endif;

Array Déclare un tableau (ou matrice) de 1 à 3 dimensions.

Format:
array [alpha[(len)]] array-name(dim-1[,dim-2[,dim-3]]) [save];

L’option save permet d’initialiser la matrice avec les données en ligne.

exemple:
PROC GLOBAL
  array age_hd (2,8); {sexe par lien de parenté}

exemple:
PROC MY_PROGRAM
preproc
  homme = 1;
  femme = 2;
 
  age_hd (homme,1) = 20; { CM homme }
  age_hd (homme,2) = 24; { époux }
  age_hd (homme,3) = 8; { enfant de sexe masculin}
  age_hd (femme,1) = 26; { CM femme }
  age_hd (femme,2) = 32; { épouse }
  age_hd (femme,3) = 5; { enfant de sexe féminin}

Break Sortie d'une boucle, et continue l'exécution après la commande enddo spécifiant la
fin de la boucle.

Exemple :
PROC QUEST
  spouse = 0;
  for i in PERSON_EDT do
    if relationship = 2 then
      spouse = i;
      break;
    endif;
  enddo;

Clear Initialise les valeurs en mémoire de données définies dans des fichiers externes à
zéro ou blanc.

Format:

b = clear(ext-dict);

Close Ferme un fichier externe précédemment ouvert.

Format:
b = close(ext-dict-name | file-name);

Cmcode Rend le nombre de mois depuis l'année 1900 d'une date donnée en mois et année.

Format:
i = cmcode(month,year);

Exemple 1:
XMONTH = 06;
XYEAR = 81;
DATE = cmcode(XMONTH,XYEAR);
 
La valeur de DATE avec les paramètres donnés [Juin 1981], sera (81 x 12) + 6 = 978.
 
Exemple 2:
XMONTH = 2;
XYEAR = 2000;
DATE = cmcode(XMONTH,XYEAR);
 
La valeur de DATE avec les paramètres donnés [Février 2000], sera ((2000 – 1900) * 12) + 2, ou 1202.

concat Joint deux ou plusieurs caractères alpha.

Format:
s = concat(string-2,string-2[,..,string-n]);

Exemple:
PROC GLOBAL
  alpha 30 FIRST_NAME, LAST_NAME, FULL_NAME;
 
PROC ABC
  FIRST_NAME = "John"
  LAST_NAME = "Henry"
  FULL_NAME = concat(strip(FIRST_NAME)," ", strip(LAST_NAME));
 
Le résultat obtenu :
  FIRST_NAME = "John "
  LAST_NAME = "Henry "
  FULL_NAME = "John Henry "

Count Rend le nombre d'occurrences d'un tableau d'enregistrements répétés ou bien le


nombre de fois que la condition est trouvée.

Format:
i = count(multiple-item [where condition]);

Exemple:

NBR_ENFANT = count(PERSONS where LIEN = 3);

Curocc Rend le numéro de l'enregistrement courant dans un tableau d'enregistrements


répétés.

Format:
i = curocc([group]); 
Exemple :

PROC RELATION
  if curocc(PERSON_REC) = 1 then
    if (LIEN <> 1) then
      errmsg("La première personne doit être le CM");
    endif;
  endif;

Delcase Marque un enregistrement pour sa suppression dans un fichier externe basé sur une
clé.

Format:
b = delcase(ext-dict-name[,var-list]);

var-list permet de définir la clé

Delete Supprime un enregistrement ou plusieurs enregistrements répétés dans un


questionnaire en cours de lecture.

Format:
b = delete(group[occ]);

Exemple (enregistrements multiples):


do varying i = totocc(PERSON_REC) until i <= 0 by (-1)
  if rel(i) = notappl and
    sex(i) = notappl and
    age(i) = notappl then
    delete (PERSON_REC(i)); {permet d’enlever les enregistrements vides }
  endif;
enddo;

Demode Rend le mode d'entrée de données actuel.

Format:
 i = demode();

Il y a trois modes de saisie de données:


 
• add, pour entrer de nouveaux enregistrements; la valeur retournée par Demode est '1'
 
• modify, pour modifier un enregistrement déjà saisi; la valeur retournée par Demode est '2'.
 
• verify, pour introduire à nouveau les données et verifier qu’il y a pas de différences entre les données

de la première et deuxième saisie; la valeur retournée par Demode est '3'.


 
Exemple:
if demode() = add then
  V103 = 3;
endif;

Do Exécute une ou plusieurs déclarations à plusieurs reprises tandis qu'une condition


logique reste vraie ou bien jusqu'à ce qu'une condition logique ne soit plus vraie.

Format:
do [[varying] var = expression] while/until condition [by expression]
  instructions;
enddo;
 
Exemple:
HEAD = 0;
do varying i = 1 until HEAD > 0 or i > totocc(PERSON)
  if RELATIONSHIP(i) = 1 then
    HEAD = i;
  endif;
enddo;
 
Le même exemple peut être réécrit en utilisant la condition « while» comme indiqué ci-dessous:
 
HEAD = 0;
do varying i = 1 while HEAD = 0 and i <= totocc(PERSON)
  if RELATIONSHIP(i) = 1 then
    HEAD = i;
  endif;
enddo;

Edit Convertit un nombre en caractère.

Format:
s = edit(edit-pattern,numeric-expression);
Exemple 1:
X = 87;
A1 = edit("ZZZ9",X); yields A1 = " 87"
A2 = edit("9999",X); yields A2 = "0087"
A3 = edit("Z999",X); yields A3 = " 087"
 
Exemple 2:
Y = 0;
A4 = edit("ZZ9",Y); yields A4 = " 0"
A5 = edit("999",Y); yields A5 = "000"
A6 = edit("ZZZ",Y); yields A6 = " "
 
Exemple 3:
A = edit("99:99:99",sysdate());
 
Exemple 4:
A = edit("99/99/99",sysdate("DDMMYY"));
 
Exemple 5:
A = edit("ZZZ,ZZZ,ZZ9",MONTANT);

Endgroup Finit l'entrée de données pour l'enregistrement courant ou le groupe


d'enregistrements.

Exemple:
if KIDSBORN = 0 then
  endgroup;
endif;

Endlevel Finit l'entrée de données pour le niveau actuel.

Exemple:
if MORE_WOMEN = 0 then
  endlevel;
endif;

Enter Permet d'entrer des données à partir d'un autre formulaire.

Format:
enter form-file-name
Errmsg Montre ou écrit un message.

Format 1 Exemples:

   Exemple 1:
    errmsg("Le CM est âgé de %d", AGE);
 
Exemple 2:
 errmsg("Plus d’un CM dans un ménage") denom = PERSON_COUNT summary;
 
Exemple 3:
 errmsg("Le CM est âgé de %d.  Son âge doit être >= 12", AGE)
 
Format 2 Exemple:

 OK = errmsg (1,"June"30,31);


 
Le fichier message va contenir le texte suivant:
 
 1 %s est de %d jours. Vous avez introduit %d!

Exit Finit une procédure avant que le traitement normal finisse.

Exemple:
function FIRST_WOMAN();
  FIRST_WOMAN = 0;
  do i = 1 while i <= HH_MEMBERS
    if SEX(i) = 2 then
      FIRST_WOMAN = i;
      exit;
    endif;
  enddo;
end;

File Déclare un ou plusieurs fichiers utilisés dans l'application.

Exemple:
PROC GLOBAL
  File FILE_PERSON, FILE_HOUSEHOLD;
fileconcat Cumule plusieurs fichiers définis dans le même format.

Format:
b = fileconcat(result-file-name, file1[, file2[, ...]]);
 
Exemple:
fileconcat("c:\prov1\prov1.dat", "c:\prov1\01*.dat");

Filecopy Copie un fichier dans un autre fichier.

Format:
b = filecopy(file-name, result-file-name);

Exemple:
filecopy(DATA, DATACOPY);

impute Assigne une valeur à une variable et enregistre la fréquence d'assignation.

Format:
impute (item-name, expression)
    [stat (item-name1, item-name2,....,item-nameN)]
    [title (alpha-expression)]
    [vset (vset-number)]
    [specific];

Exemple:
impute(P04_AGE, TEMPAGE) title("Age updated via TempAge") vset(2);

int Rend la partie entière d'une expression numérique.

Format:
i = int(numeric-expression);

Exemple:
x = int(5 / 3);
 
La valeur de x sera 1.

invalueset Détermine si une valeur d'une variable est dans une plage de valeurs.
Format:
b = invalueset(item-name[, valueset-name]);

Exemple 1:
if not invalueset(P03_SEX) then
  errmsg("Sexe est invalide. La valeur est %d", P03_SEX);
endif;

Loadcase Charge un enregistrement d'un fichier externe dans la mémoire à partir de


variables servant de clé.

Format:
b = loadcase(ext-dict-name[, var-list]);
 
Exemple:
OK = loadcase(SAMPDICT,CLUSTER,HH);

La fonction retourne la valeur 1 (vrai) si l’enregistrement est trouvé et chargé, 0 (faux) dans le cas
contraire.

next Finit une boucle, une itération et continue l'exécution avec l'itération suivante dans la
boucle.

Format:
skip [to [next]] field-name;  
 
Exemple:
if Q202 <> 1 then
  skip to next Q201;
endif;

noccurs Rend le nombre de présences (d'occurrences) pour un formulaire se répétant ou


une liste.

Exemple:
TOTAL_PERSONS = noccurs(PERSON);

noinput Empêche la saisie pour le champ actuel pendant l'entrée de données.

Exemple:
PROC Q102
preproc
 if Q101 <> 1 then
   noinput;
 endif;

numeric Déclare des variables numériques utilisées dans l'application.

PROC GLOBAL
  
  numeric X, Y, male, female;

pos Rend la position d'un caractère dans une série de caractères.

Format:
i = pos (substring, source);

Exemple 1:
X = pos("L","FOR THE CHILDREN");
 
La valeur de X sera 12;
 
Exemple 2:
X = pos("DRE","CHILDREN");
 
La valeur de X sera 5;
 
Exemple 3:
X = pos("DCN","CHILDREN");
 
La valeur de X sera 0.

postproc Déclare que les instructions qui suivent sont exécutées à la fin d'un bloc.

PROC SEX
 
postproc
 if ($ = 2 and AGE < 5) then
reenter;
endif;
 
preproc Déclare que les instructions qui suivent sont exécutées au début d'un bloc.

PROC DATE

 preproc
 DATE = sysdate("DDMMYYYY");
 

Recode Assigne une valeur à une variable basée sur la valeur d'une ou plusieurs autres
variables.

Format:
recode var-1 [:var-2 [:var-n]]   => var-out;
[range-1] [:range-2 [:range-n]]  => exp;
[range-1] [:range-2 [:range-n]]  => exp;
: : :
[: [:]]   => other-exp;
endrecode;

Exemple 1:
recode AGE => AGE_GROUP;
      0-19 => 1;
     20-29 => 2;
     30-39 => 3;
     40-49 => 4;
     >= 50 => 5;
           => 9;
endrecode;
 
 
Exemple 2:
recode ATTEND : ED_LEVEL => EDUC;
    2,notappl :          => 1;
            1 : 1        => 2;
            1 : 2,3      => 3;
              :          => 9;
endrecode;

reenter Force l'agent de saisie à ré-entrer le champ actuel ou précédent.


Format :
reenter [field-name];  

Exemple:
if KIDS = 1 & BOYS = 0 & GIRLS = 0 then
  reenter KIDS;
endif;

setfile Assigne un fichier de données à un dictionnaire ou à un fichier déclaré.

Format:
b = setfile(ext-dict-name | file-name, alpha-exp
              [, update | append | create]);

Si les options update, append ou create qui sont optionnels, ne sont citées, le fichier est ouvert en mode
update.

Exemple 1:
OK = setfile(LOOKUP, "c:\My Lookup File.dat");
 
Exemple 2:
OK = setfile(REPORT, REPORT_FILE_NAME, create);

skip Permet de sauter jusqu'à la variable spécifiée au moment de la saisie.

Format :
skip [to [next]] field-name;

Exemple :
if Q305 <> 2 then
  skip to Q307;
endif;

soccurs Retourne le nombre d'occurrences d'un enregistrement.

Format:
i = soccurs(record-name);

Exemple:
NUM_HH_MEMBERS = soccurs(PERSON_REC);
sort Fait le tri des occurrences d'un enregistrement avec comme critère la valeur d'une
variable.

Format:
b = sort(group using item);
Exemple:
Sort(PERSON using LINE_NUM);

special Détermine si la valeur d'une variable est MISSING, NOTAPPL, or DEFAULT.

Format:
b = special(numeric-exp);

le numeric-exp peut être une variable, un champ ou une expression numérique.

sum Retourne la somme d'une variable répétée plusieurs fois.

Format:
d = sum(multiple-item [where condition]);

Exemple:
TOTAL_INCOME = sum(INCOME);
TOTAL_FEMALE_INCOME = sum(INCOME where SEX = 2);

sysdate Retourne la date du système comme un entier.

Format:
i = sysdate([date-format]); [ ] indique que cette partie est optionnelle.

La date courante sera retournée comme une chaine de caractères en utilisant la fonction edit comme
suit:
 
edit("99/99/99",sysdate("DDMMYY"));

Exemple :
Si la date courante est 17 Décembre 1999, on aura les résultats suivants:
 
x = sysdate("DDMMYYYY"); retourne 17121999
x = sysdate("MMYYYY"); retourne 121999
x = sysdate("DD"); retourne 17
x = sysdate();retourne 991217
systime Retourne l'heure du système comme un entier.

Format:
i = systime();
  
 edit("99:99:99",systime());
 
Exemple:
TIME = systime();
HOUR = int(TIME / 10000);
MIN = int(TIME / 100) % 100;
SEC = TIME % 100;

tonumber Convertit un caractère alpha en numérique.

Format:
d = tonumber(string-exp);

totocc Retourne le total des occurrences d'un tableau d'une ou de plusieurs variables.

Format:
i = totocc([group]);
 
Exemple 1:
if totocc(HOUSING) > 1 then
  errmsg("Plus d’un enregistrement habitat");
endif;
 
Exemple 2:
PROC HOUSING
if totocc() > 1 then
  errmsg("Plus d’un enregistrement habitat");
endif;

while Exécute une ou plusieurs instructions une ou plusieurs fois tant que la condition est
vraie.
Format:
while condition do
  instructions;
enddo;
  
Exemple:
i = 1;
NumPeople = totocc (Person);
while i <= NumPeople do
  if rel(i) = notappl and sex(i) = notappl and age(i) = notappl
then
    delete (PERSON(i));
  else
    i = i + 1;
  endif;
enddo;

write Ecrit dans un fichier texte.


Format:
[b =] write(alpha-exp[,p1[,p2[,...,pn]]]);
  
In the string expression
%[n]d  = insérer un nombre et l’afficher comme un entier
%[n.d]f = insérer un nombre et l’afficher comme une valeur décimale
%[n.d]s = insérer du caractère texte
 
"n" est la taille du champ et "d" représente la valeur à afficher.

Exemple:
write("Sex = %d", SEX);

writecase Ecrit un enregistrement de la mémoire dans un fichier externe.

Format:
b = writecase(ext-dict-name[,var-list]);

Exemple:
OK = writecase(KIDS,CLUSNUM,HHNUM,LINE);
3.3. IMPLÉMENTATION DE LA FONCTIONNALITÉ CAPI 
Pour utiliser le CAPI de CSPro, vous devez cocher l’option « CAPI mode » situé au niveau des
options. Pour ce faire :

 Cliquez sur « Options » au niveau du menu puis sur « Data Entry »

 La fenêtre suivante s’ouvre, cocher les options « CAPI mode » (1) et « All fields »
située au niveau de « Use Extends Controls » (2)

 A présent l’option CAPI est active et vous verrez, que pour chaque item, l’application
affichera les modalités dès que le curseur y est pointé.
Cependant, pour que l’application puisse vraiment être adaptée à la collecte, vous devez faire
un certain nombre d’opérations supplémentaires pour la rendre plus conviviale.

3.3.1. AFFINER LA PRÉSENTATION : SÉLECTION DES CONTRÔLES ÉTENDUS


Souvent, il peut être utile pour afficher à un recenseur ou enquêteur les valeurs possibles pour
un champ donné de le présenter sous un certain format. Par exemple, pour une enquête menée
sur tablette, il peut être plus facile pour un agent d’utiliser un doigt ou le stylet pour sélectionner
une valeur plutôt que de saisir la valeur en utilisant le clavier de l'écran tactile. L’option
« contrôles étendus (extends controls) » de CSPro offre cette flexibilité en permettant au
programme de spécifier le type de capture (présentation) associée à un champ.

Pour modifier le type de capture pour un champ, Cliquez sur le champ puis appuyer surle clic
droit et « field's properties » , choisir «  Capture Type » -> Change.

CSPro vous permet de sélectionner le type de capture qui est approprié pour le premier jeu de
valeur de l'élément. Pour un contrôle basé sur le programme, voir la fonction de setcapturetype.
Le concepteur CSPro montre les domaines qui utilisent des contrôles étendus par la coloration
de la frontière du champ en bleu.
Types de capture

L'attribut Zone de texte est l'option par défaut pour un champ et indique qu'aucun contrôle
étendu (modalités de réponses) ne s’affiche. En CSPro 5.0, les options « menu déroulant » et
« Combo Box » sont du même type de capture.

Bouton radio
Le bouton radio peut être sélectionné pour les variables qualitatives à réponse unique. Il se
présente comme suit :

Check Box
Cases à cocher sont utilisées pour capturer des variables de réponse multiples. Pour qu’un
champ puisse être configuré comme une case à cocher, elle doit être de type alpha. La longueur
du champ doit être égale au nombre de possibilités maximales de réponse. Chaque valeur dans
l'ensemble de valeur correspond à l'une des réponses et sera affiché comme une case à cocher
distincte. Lorsque les cases sont cochées, les valeurs correspondantes seront mises dans le
champ alpha, de gauche à droite.
Drop Down / Combo Box
Ce type de capture affiche toutes les valeurs de la valeur principale qui est prévue d'un élément
numérique ou alpha. Contrairement à la case d'option Type de capture, le menu déroulant Type
de capture permet l'affichage des gammes de valeurs (ce est-ensembles de valeurs de "valeurs").

Date
Le type date est valide pour alpha et articles numériques de longueur 4, 6 ou 8. Le choix du
format de la date affecte la façon dont la date est stockée dans le champ.

Number Pad
Certains utilisateurs le trouvent encombrant à utiliser le clavier à l'écran lors de la saisie des
données sur une tablette. Cette commande affiche un pavé numérique pour entrer des valeurs
numériques avec le doigt ou la souris.
Utilisation de la fonction « Set Attributes ».
A la place d’utiliser les captures. La fonction « Set attributes » permet de présenter la liste des
modalités sous forme de menu. Elle doit être déclarée en preproc comme suit :

Les modalités s’afficheront comme suit.

3.3.2. AJOUTER UN LIBELLÉ POUR CHAQUE QUESTION :


Une fois le mode capi activé, CSPro vous permet pour chaque question d’ajouter une
description complète ou des instructions. Cette description apparaitra au moment de l’interview
au niveau d’un cadre situé en haut de l’écran. Généralement, c’est le texte que lit l’enquêteur à

l’enquêté. Pour ajouter cette description, vous devez cliquer sur l’item et cliquer sur situé au
niveau de la barre d’outils ci-après situé en haut de l’écran.

Vous pouvez à ajouter la description qui concerne l’itemle nom de l’enquêteur ou de


l’interviewé par exemple) en encadrant le nom de la variable par le symbole « % ».
3.3.3. FAIRE DES MENUS :
CS Pro vous permet de faire des menus avec la fonction accept, elle s’utilise comme suit :
choice = accept( "Indiquer une action",
"C Commencer l'interview.............................................C", {1}
"S Sauvegarder et prendre un nouveau rendez vous…..S", {2}
"I Insdisponible: Changer de ménage.............................I", {3}
"R Refus, abandonner le ménage.....................................R"); {4}
Le menu se présente comme suit :

La première ligne (Indiquer une action) est le titre de la fenêtre et les lignes restantes sont les
options du menu. S’il clique sur la troisième ligne, la fonction va retourner la valeur 3. Et il faut
indiquer les instructions :
if choice=1 then
instructions ;
elseif choice=2 then
instructions ;
elseif choice=3 then
instructions ;
elseif choice=4 then
instructions ;
endif ;
3.3.4. DÉPLOIEMENT DE L’APPLICATION
Pour déploiement de l’application, on peut utiliser CS Pro soit :

 sur ordinateur et ultra portable ;


 sur un PDA ayant comme système du Windows Mobile ;
 Sur un Smartphone ayant comme système Androïde ;

Pour déployer votre application CAPI sur un ordinateur de poche ou PDA, vous devez faire ce
qui suit :

Générer une version binaire (compilé) de l'application. Pour ce faire, ouvrez votre application
dans CSPro et choisissez "Générer binaire" dans le menu de fichier. L'application binaire aura
extension de fichier .enc.

 Préparez un fichier .PFF. Ce fichier indique quel fichier de données CSPro (s) à utiliser
avec votre application. Lorsque vous exécutez votre application sur l'ordinateur de
bureau, CSPro génère automatiquement un fichier .PFF pour vous. Il aura le même nom
que votre application uniquement avec une extension de fichier .PFF et un feu de
circulation pour une icône. Il sera placé dans le même répertoire que votre application.
Dans la plupart des cas, vous pouvez utiliser le fichier .PFF généré sur l'ordinateur de
bureau sur le PDA. Le seul cas où cela ne fonctionne pas, c’est si vous placez votre
fichier de données dans un répertoire différent par rapport à votre application sur le
bureau que vous faites sur le PDA. Par exemple, si votre fichier de données est sur un
autre lecteur de votre application (D: au lieu de C :), cela ne fonctionnera pas sur le PDA
car il n'y a pas de lettres de lecteur dans Windows Mobile. Si c’est le cas, alors vous
pouvez ouvrir le fichier .PFF dans un éditeur de texte tel que le bloc-notes et de modifier
le chemin d'accès au fichier de données à utiliser un répertoire qui sera valable sur le
PDA. Si votre fichier de données et votre application sont dans le même répertoire à la
fois sur le bureau et le PDA, alors vous n’aurez pas besoin de faire des changements.
Pour plus d'informations sur les fichiers .PFF, voir le Chapitre consacré à l’étude de
cas.
 Copiez les fichiers .ENC et .PFF sur le PDA. La meilleure façon de le faire est d'utiliser
ActiveSync. Cliquez sur le bouton "Explorer" dans ActiveSync pour parcourir les
fichiers sur votre ordinateur de poche.

Vous pouvez ensuite faire glisser et déposer le .PFF et .enc de l'ordinateur de bureau vers le
PDA.
Vous devez placer les .PFF et les fichiers .ENC en soit le dossier Mes Documents, un sous-
dossier du dossier Mes documents ou un dossier sur la carte de stockage SD s’il y a une les
dialogues de fichiers Windows Mobile standard utilisés dans CSPro ne regardent pas dans les
dossiers autres que ceux-ci.

Une fois les fichiers ont été copiés sur le PDA, vous êtes prêt à exécuter l'application sur le
PDA.

Module 2 : Système de transfère de données :

 Récupération et envoie des données vers le serveur.


 Traitement des données reçu.

Module 3 : Processus de traitement des enquêtes

Modules 4 : développement d’une plateforme de saisie sous CsPro

Représentation des données cartographiques sous CSPro.


CHAPITRE 4 : ETUDE DE CAS : DÉVELOPPEMENT D’UNE

APPLICATION CAPI

4.1. OBJET 
L’objet de l’étude de cas est de réalise une application sous CAPI. Il s’agira, en plus du
développement des masques, de :

o Voir les pré-requis pour une telle tâche ;


o Réviser l’ensemble des dispositions à prendre pour réussir un bon développement ;
o approfondir les notions sur quelques commandes que nous juger essentielles pour la
réussite d’une application CAPI ;

4.2. PRÉ-REQUIS
Vous devez pouvoir :
o créer un dictionnaire des variables sous CS Pro ;
o Générer et mettre en forme un masque de saisie ;
o Implémenter des contrôles de cohérences ;
o Savoir activer l’option CAPI et savoir choisir pour chaque champ les types de capture ;
o Avoir des notions en algorithmes ;
o La connaissance du langage pascal serait un plus.

Les quatre premiers points ont été développés dans la première partie de ce document.

4.3. ORGANISATION DU DÉVELOPPEMENT


Pour réussir le développement d’une application de collecte de manière efficiente, vous devez
vous assurer avant de débuter que ces conditions sont réunies :
o Les questionnaires sont validés et stabilisées ;
o Un manuel de spécification à été produite : par manuel de spécification on attend la
consignation de l’ensemble des contrôles de cohérence du questionnaire au niveau d’un
document ;
Exemple de spécifications tirées RGPHAE Sénégal 2013
Deux positions doivent être
GB.1. Nombre total de parcelles exploitées par le ménage
prévues. Le recenseur doit taper le
en 2013-2014
nombre correspondant
Deux positions doivent être
GB.2. Nombre total de parcelles exploitées uniquement par prévues. Le recenseur doit taper le
les femmes nombre correspondant
GB.2<=GB.1
GB.3. Superficie totale des parcelles de l'exploitation "de Trois positions entières et deux
décimales doivent être prévues. Le
toutes les spéculations confondues" (en ha) recenseur doit taper le nombre
correspondant
GB6. Emplacement du principal lieu d'exploitation prévoir une liste déroulante
Dans la concession………………………………………...1 correspondant aux différentes
Extérieur de la concession /environnement immédiat…..2 modalités. Introduire les contrôles
Dans le village/quartier……………………………………...3 de saut si code 1, 2 et 3 passez à H1
Hors du village/quartier……………………………………...4    
Si code 1, 2 ou 3 Passez à H1    

Par ailleurs, vous devez organiser votre répertoire de travail de telle sorte à ne pas vous
perdre en cours de développement. CSPro génère des fichiers supplémentaires à chaque
fois que vous créer un dictionnaire, masque, etc (voir File Type au niveau de l’aide de
CS Pro). Donc on peut facile se perdre si tous ces fichiers sont situés dans le même
dossier. Ainsi, il est suggérer dans le développement de telles applications d’avoir une
certaine organisation des fichiers. Ces fichiers sont classés dans des sous-répertoires du
répertoire principal suivant leur nature. Souvent le répertoire de travail peut être divisé
de cette manière :

 BATCH doit contenir l’ensemble des programmes de type batch utilisés dans
votre application ;
 DATA doit contenir données collectés sur par les enquêteurs ;
 DICTS contient les dictionnaires utilisés de l’application ;
 DOCS  contient les documents destinés à l’enquêteur (manuels par exemple)
 ENTRY contient les outils de collectes (masques ….) ;
 REPORT contient les rapports générer par l’application (rapport de suivi,
rapport de qualité…) ;
 PREP  contient les fichiers les fichiers statiques tels que les fichiers
échantillons, elle peut contenir aussi les fichiers reçus du superviseur comme
ces derniers peuvent être placé dans un autre fichier RECEV ;
 WORK 
 TEMP :
 FINAL :
 UTILITY

4.4. LES FONCTIONS ESSENTIELLES

RUN PFF

SELCASE

LOADCASE

WRITECASE

FIND

SHOW

FILECOPY

FILEEMPTY

FILEDELETE

SETFILE

FILEREAD

CLOSE

4.5. RÉALISATION DE L’APPLICATION DE COLLECTE DE LA RÉPUBLIQUE :

4.5.1. TRAVAILLE DEMANDÉ


La République Ndiayène entreprend le premier recensement de l’agriculture de son histoire.

L’Institut Ndiayène de la Statistique (INS) avec votre concours a la charge de mener à bien
cette entreprise de grande envergure afin de répondre à l’attente des utilisateurs de données
agricoles.

Par la diversité des renseignements à recueillir et la complexité de sa méthodologie, cette


opération requiert une très grande rigueur, des outils de collecte très adaptés et une architecture
cohérente.

Vos tâches tournent essentiellement autour du développement des outils de collecte.

Voici les informations qui sont mises à votre disposition pour la réalisation de vos tâches :
4.5.2. DECOUPAGE DU TERRITOIRE DE LA REPUBLIQUE DE NDIAYENE

• Découpage administratif
L’organisation administrative du NDIAYENE se présente comme suit : Provinces,
Départements, communes et Quartiers/Villages. Les villages et les quartiers constituent les
unités administratives de base. Le pays compte 4 provinces, chaque province compte 3
départements. Les départements sont divkisés en communes et les communes en quartiers.

• Découpage opérationnel pour le recensement


Pour les besoins du recensement les quartiers/villages selon leur taille sont divisés ou regroupes
en des zones appelées Zone de Dénombrement (ZD).

C’est la plus petite unité opérationnelle du recensement. Elle compte environ 1000 habitants. La
zone de dénombrement peut prendre plusieurs formes ;

 un ou plusieurs villages ;
 un village et une partie d’un autre village ;
 une partie d’un village / quartier ;
 un quartier d’une commune

Le ZD sera dénombré par un seul agent recenseur.

4.5.3. ORGANISATION DE LA COLLECTE :


Le recensement doit se dérouler en quatre étapes :
 l’Agent Recenseur (AR) doit pour la ZD faire le recensement exhaustif de l’ensemble
des exploitations agricoles y existants. Le formulaire pour faire cette opération est le
formulaire 1.
 Ensuite 10% des exploitations agricoles de la ZD sont tirées aléatoirement ;
 Pour chaque exploitation tirée, l’AR doit dénombrer l’ensemble des ménages qui la
partagent et leurs membres. Cette partie est faite avec le formulaire 2;
 Our chaque exploitation de l’échantillon, un ménage est tiré aléatoirement et toutes les
questions du formulaire 3 lui sont posées.

Formulaire N°1 : Fiche de dénombrement des exploitations agricoles

Identification

Province.......................……….................…………….. ………….….………….I___I

Département...............………………………………………… ….………..…………….I___I
Région Naturelle :……………………………… ……………….……I___I___I

104 Commune : ……………….……I___I___I


……………………………………………………
………….…………I___I___I
105 Village ......………………...........
....…………….I___I___I___I
107 SE (Section d’Enumération) :………………….……….

Numéro de l’exploitation dans la S.E

Liste des exploitations agricoles :

Coordonnées GPS
Latitude Longitude Nom du chef de l’exploitation Type d’exploitation

Formulaire N°2 : Caractéristiques démographiques de l’exploitation


N° de Tirage de l’exploitation dans l’échantillon…………………………. I____I____ I____I
Identification de l’exploitation

Prénom et nom du chef d’exploitation :.........................…………..……...........................


Sexe du chef d’exploitation : ( 1 = masc 2 = fem )...................…..…..………..…….I____I
Qualité du ménage du chef d’exploitation par rapport à l’exploitation :…….......……….I____I
(Code : 1 = indépendant 2 = associé principal)
Nombre de ménages dans l’exploitation :...…………..…………....…………...... I____I____I
Nombre de personnes dans l’exploitation :...........……………..………….. I____I____ I____I
CARACTERISTIQUES DES MEMBRES DES MENAGES DE L’EXPLOITATION

N° d’ordre Qualité du N° des Prénom et Nom Situation de Sexe Age


du ménage ménage membre résidence 1Masculin
dans 1Indépendant s du 1Résident 2Féminin
l’exploitati 2Associé ménage présent
on 2Résident absent
3Visiteur

|___|___| |___| |__|__| ……………………….. |__| |__| |__|__|

|___|___| |___| |__|__| ……………………….. |__| |__| |__|__|

Formulaire 3 :Activité du ménage dans l’EXPLOITATION


1. Activé du ménage dans l’exploitation
 Agriculture seule  Agriculture et Elevage  Elevage seul
 Autre à préciser ………………………………………………………….

2. Responsable des travaux


 Propriétaire de l’exploitation (Chef d’exploitation)  Une autre personne du ménage

 Une autre personne salariée  Une autre personne physique  Un membre d’un
groupement

3. Formation professionnelle du responsable des travaux


 Oui  Non
(Si réponse est 2= non aller à la question 4)

4. Si oui type de formation


 Vulgarisation  formation dans un centre d’animation rurale (CAR)
 Formation agricole dans un centre ou école spécialisée  formation artisanale
 Autre formation à préciser………………………………..
5. L’exploitation bénéficie-t-elle de l’appui d’un service d’encadrement ?
 Oui  Non

Fin de l’interview

FONCTIONNALITÉ ATTENDUES :
L’INS vous a retenu comme développeur principal des applications du recensement, voici le
cahier de charge qui vous été transmit :

Les outils de collecte doivent permettre à l’AR de:


 se loguer ;
 disposer de menus lui permettant de spécifier l’opération qu’il souhaiterait effectuée ;
 pouvoir faire le recensement des exploitations agricoles.
 Tirer les exploitations échantillons (10% des exploitations agricoles);
 Dénombrer pour chaque exploitation agricole les caractéristiques démographiques de
ses membres;
 Mener l’interview des les ménages tirés ;
 Disposer de rapport de suivie de la collecte.

MISE EN ŒUVRE DE L’ÉTUDE DE CAS.


IDENTIFICATION DES OUTILS À METTRE EN PLACE :

Pour atteindre les objectifs fixés au niveau du cahier de charge, il faudra mettre en place2 :

 Un formulaire d’authentification ;
 Un menu de l’Agent Recenseur ;
 Un formulaire pour le recensement des exploitations ;

2
Ces formulaires proposés ne sont qu’à titre d’exemple, vous pouvez les revoir à votre guise.
 Une procédure de tirage aléatoire des 10% exploitations échantillons ;
 Un formulaire pour la collecte des données démographiques des exploitations agricoles ;
 Un formulaire de saisie des informations des ménages tirés.

MISE EN PLACE DES DICTIONNAIRES DE DONNÉES :


Sous CS Pro, chaque formulaire est basé sur un dictionnaire des variables. Ainsi, il faudra :
 Un dictionnaire pour le formulaire d’authentification (authentification.dcf) ;
 Un dictionnaire pour le formulaire de recensement des exploitations
agricoles (exploitations.dcf);
 Un dictionnaire pour le formulaire de collecte des données démographiques des
exploitations agricoles (démographie.dcf);
 Un dictionnaire pour le formulaire de collecte des données des ménages (menage.dcf) ;

En plus de ces dictionnaires, il faudra un dictionnaire permettant l’importation des


identifications de l’AR et l’identification des la ZD qui lui a été affectée (import.dcf).

L’ensemble de ces dictionnaires doivent être placé dans le répertoire DICTS.

Import.dcf

 Record :

 Contenu des records :


o ID Items

o Identification de l’enquêteur

o Identification de la ZD
Remarque :
o Nous avons préfixe les noms de l’ensemble des items de ce dictionnaire avec
« IM ». Le dictionnaire import sera utilisé comme dictionnaire externe, il est
important donc que les noms de ses items ne se répètent pas dans les autres
dictionnaires. Leur répétition créer des ambigüités qui seront considérer comme des
erreurs par CSPro.
o Le fichier devant contenir les données indentifications (de format .dat) de
l’enquêteur et de la ZD doit avoir la même structure que le dictionnaire.

Pour voir cette structure, appuyez sur le bouton , ou appuyez sur Ctrl + L.
L'écran s’affiche en base de la fenêtre :

Cette vue vous indique où, physiquement, chaque élément de chaque enregistrement se trouve,
combien d'espace lui a été alloué. La palette de couleurs utilisée est la suivante:
pour les records type (identifiants des sections) ;
pour les id items c'est-à-dire les variables d’identification enregistrement ;
pour les items c'est-à-dire les questions ;
pour les subitems. ;
Cliquez sur un élément pour déplacer le curseur sur l'élément spécifique dans la fenêtre du
dictionnaire
Simple clic sur un élément pour passer à la définition de l'élément.
Double-cliquez sur un élément pour montrer ses values-sets.

Authentification.dcf
Les sections :
Le contenu des sections
Section Id Items

Section authentification

exploitation.dcf
Les sections :

Le contenu des sections


Section Id Items

Section exploitation
Ménage.dcf
Les sections :

Le contenu des sections


Section Id Items

Section ménage

GÉNÉRATION DES MASQUES DES FORMULAIRES :


La génération se fait comme indiquée au niveau du précédent chapitre. Ce pendant, pour trois
formulaires qui seront générés ici, il faudra prendre le soin d’inclure le dictionnaire import.dcf
que nous allons utiliser comme dictionnaire externe. Le dictionnaire externe eut permettre de
pré-charger des données situées sur un fichier de données externes ou d’écrire dans ce fichier.
Voici la procédure de génération du masque destiné à l’authentification des AR :

 cliquez sur pour créer un nouveau fichier situé sur la barre d’outils
 choisissez data entry application
 Donnez un nom au masque

 Mettez le dictionnaire authentification.dcf en « input dictionnary » et


« import.dcf » comme un dictionnaire externe

 Validez et acceptez la génération en cliquant sur « OUI »


 Mettez en forme votre Masque :

Formulaire d’authentification

Masque exploitation
Pour le masque destiné au recensement des exploitations agricoles, certains champs doivent être
pré-chargés et protégés de telle sorte que l’AR ne puisse les modifier. Vous devez protéger ces
champs. Pour cela :
 Sélectionnez les champs concernés, faites un clic droit et choisissez « Fiel
Properties »
 Cochez « Protected »

Pour le champ numéro de l’exploitation doit être protégé et incrémenté à chaque nouvelle
exploitation. Pour cela sélectionnez le champ, et en plus de l’objet « protected » cocher
« sequential » au niveau des propriétés.
Masque ménage :

IMPLÉMENTATION DES CONTRÔLES DE COHÉRENCE: