IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Problème d'Import feuille EXCEL


Sujet :

WinDev

  1. #1
    Membre éclairé Avatar de Raptor92
    Homme Profil pro
    Directeur des opérations & Innovation
    Inscrit en
    Juin 2009
    Messages
    951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur des opérations & Innovation
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 951
    Points : 763
    Points
    763
    Par défaut Problème d'Import feuille EXCEL
    Bonjour,

    Le code ci-dessous importe bien mes données, mais je n'arrive qu'à importer la première ligne
    Je n'ai pas trouvé la solution dans l'aide

    PS: Ma BDD est un SQL Server

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    FichierXLS est une chaîne
    IdFichier="C:\SIMAG\SIMAG_Import\SAV.xls"
    IdFichierXLS est un entier
     
    // Sélection du fichier XLS
    FichierXLS = "C:\SIMAG\SIMAG_Import\SAV.xls"
     
    // Ouverture du fichier sélectionné
    IdFichierXLS = xlsOuvre(FichierXLS)
    	t est un entier
    	nNbligne est un entier= xlsNbLigne(IdFichierXLS)
    	Trace(xlsNbLigne(IdFichierXLS))	
     
    	SI IdFichierXLS <> -1 ALORS	
    	POUR t = 2 A nNbligne		
    		TABLE_SAV.COL_Colonne1 = xlsDonnée(IdFichierXLS, t, 1)
    		TABLE_SAV.COL_Colonne2 = xlsDonnée(IdFichierXLS, t, 2)
    		TABLE_SAV.COL_Colonne3 = xlsDonnée(IdFichierXLS, t ,3)
    		TABLE_SAV.COL_Colonne4 = xlsDonnée(IdFichierXLS, t, 4)
    		TABLE_SAV.COL_Colonne5 = xlsDonnée(IdFichierXLS, t, 5)
    		TABLE_SAV.COL_Colonne6 = xlsDonnée(IdFichierXLS, t, 6)
    		TABLE_SAV.COL_Colonne7 = xlsDonnée(IdFichierXLS, t, 7)
    		TABLE_SAV.COL_Colonne8 = xlsDonnée(IdFichierXLS, t, 8)
    		TABLE_SAV.COL_Colonne9 = xlsDonnée(IdFichierXLS, t, 9)
    		TABLE_SAV.COL_Colonne10 = xlsDonnée(IdFichierXLS, t, 10)
    		TABLE_SAV.COL_Colonne11 = xlsDonnée(IdFichierXLS, t, 11)
    		TABLE_SAV.COL_Colonne12 = xlsDonnée(IdFichierXLS, t, 12)
    		TABLE_SAV.COL_Colonne13 = xlsDonnée(IdFichierXLS, t, 13)
    		TABLE_SAV.COL_Colonne14 = xlsDonnée(IdFichierXLS, t, 14)
    		TABLE_SAV.COL_Colonne15 = xlsDonnée(IdFichierXLS, t, 15)
    		TABLE_SAV.COL_Colonne16 = xlsDonnée(IdFichierXLS, t, 16)
    		TABLE_SAV.COL_Colonne17 = xlsDonnée(IdFichierXLS, t, 17)
    		TABLE_SAV.COL_Colonne18 = xlsDonnée(IdFichierXLS, t ,18)
    		TABLE_SAV.COL_Colonne19 = xlsDonnée(IdFichierXLS, t, 19)
    		TABLE_SAV.COL_Colonne20 = xlsDonnée(IdFichierXLS, t, 20)
    		TABLE_SAV.COL_Colonne21 = xlsDonnée(IdFichierXLS, t, 21)
    		TABLE_SAV.COL_Colonne22 = xlsDonnée(IdFichierXLS, t, 22)
    		TABLE_SAV.COL_Colonne23 = xlsDonnée(IdFichierXLS, t, 23)
    		TABLE_SAV.COL_Colonne24 = xlsDonnée(IdFichierXLS, t, 24)
    		TABLE_SAV.COL_Colonne25 = xlsDonnée(IdFichierXLS, t, 25)
    		TABLE_SAV.COL_Colonne26 = xlsDonnée(IdFichierXLS, t, 26)
    		TABLE_SAV.COL_Colonne27 = xlsDonnée(IdFichierXLS, t, 27)
    		TABLE_SAV.COL_Colonne28 = xlsDonnée(IdFichierXLS, t, 28)
    		TABLE_SAV.COL_Colonne29 = xlsDonnée(IdFichierXLS, t, 29)
    		TABLE_SAV.COL_Colonne30 = xlsDonnée(IdFichierXLS, t, 30)
    		TABLE_SAV.COL_Colonne31 = xlsDonnée(IdFichierXLS, t, 31)
    		TABLE_SAV.COL_Colonne32 = xlsDonnée(IdFichierXLS, t, 32)
    		TABLE_SAV.COL_Colonne33 = xlsDonnée(IdFichierXLS, t, 33)
    		TABLE_SAV.COL_Colonne34 = xlsDonnée(IdFichierXLS, t, 34)
    		TABLE_SAV.COL_Colonne35 = xlsDonnée(IdFichierXLS, t, 35)
    		TABLE_SAV.COL_Colonne36 = xlsDonnée(IdFichierXLS, t, 36)
    		TABLE_SAV.COL_Colonne37 = xlsDonnée(IdFichierXLS, t, 37)
    		TABLE_SAV.COL_Colonne38 = xlsDonnée(IdFichierXLS, t, 38)
    		TABLE_SAV.COL_Colonne39 = xlsDonnée(IdFichierXLS, t, 39)
     
    		TableAjoute(TABLE_SAV)	
    		FIN
     
    SINON
    	// Affichage du message d'erreur si l'ouverture n'a pas été effectuée
    	Erreur(xlsMsgErreur(IdFichierXLS))
    FIN
    Merci pour votre aide
    Raptor92
    Dominique
    Aucune aide par MP, utilisez le forum.

    Mon guide du débutant pour apprendre à programmer en Java - N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java


  2. #2
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 947
    Points : 9 275
    Points
    9 275
    Par défaut
    hello,
    tu as essayé de tracer la variable t ? tu sors tout de suite de la boucle ? combien vaut nNbLigne ?
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  3. #3
    Membre éclairé Avatar de Raptor92
    Homme Profil pro
    Directeur des opérations & Innovation
    Inscrit en
    Juin 2009
    Messages
    951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur des opérations & Innovation
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 951
    Points : 763
    Points
    763
    Par défaut re
    Oui en effet
    J'ai mis une trace, résultat : 259 lignes
    Raptor92
    Dominique
    Aucune aide par MP, utilisez le forum.

    Mon guide du débutant pour apprendre à programmer en Java - N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java


  4. #4
    Membre éclairé Avatar de Raptor92
    Homme Profil pro
    Directeur des opérations & Innovation
    Inscrit en
    Juin 2009
    Messages
    951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur des opérations & Innovation
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 951
    Points : 763
    Points
    763
    Par défaut re
    pour ne pas m'avoué vaincu, j'ai tenté autre chose et cela fonctionne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    FichierXLS est une chaîne
    IdFichier="C:\SIMAG\SIMAG_Import\SAV.xls"
    IdFichierXLS est un entier
     
    // Sélection du fichier XLS
    FichierXLS = "C:\SIMAG\SIMAG_Import\SAV.xls"
     
    // Ouverture du fichier sélectionné
    IdFichierXLS = xlsOuvre(FichierXLS)
    	t est un entier
    	nNbligne est un entier= xlsNbLigne(IdFichierXLS)
    	Trace(xlsNbLigne(IdFichierXLS))	
     
    TANTQUE t < nNbligne 
    	TableAjouteLigne(TABLE_SAV,	xlsDonnée(IdFichierXLS, t, 1),xlsDonnée(IdFichierXLS, t, 2),xlsDonnée(IdFichierXLS, t ,3),xlsDonnée(IdFichierXLS, t, 4),xlsDonnée(IdFichierXLS, t, 5),xlsDonnée(IdFichierXLS, t, 6),xlsDonnée(IdFichierXLS, t, 7),xlsDonnée(IdFichierXLS, t, 8),xlsDonnée(IdFichierXLS, t, 9),xlsDonnée(IdFichierXLS, t, 10))
     
    	t++
    		FIN

    Mais il me serais utile de comprendre pourquoi la premier code ne fonctionne pas

    Je laisse donc la discussion ouverte
    Merci pour votre aide
    Raptor92
    Dominique
    Aucune aide par MP, utilisez le forum.

    Mon guide du débutant pour apprendre à programmer en Java - N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java


  5. #5
    Rédacteur/Modérateur

    Avatar de dsr57
    Homme Profil pro
    Analyste programmeur senior
    Inscrit en
    Octobre 2003
    Messages
    1 139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Analyste programmeur senior
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 139
    Points : 4 681
    Points
    4 681
    Billets dans le blog
    22
    Par défaut
    Bonjour

    Dans ton premier code l'appel de la fonction TableAjoute() est mal positionnée. Il doit être mis jusque après l'instruction POUR.
    Ensuite lors de l'initialisation de tes colonnes, tu ne n'indiques pas d'indice de ligne de la table donc toutes les données vont sur la première ligne.

    Attention si tu utilises la fonction TableTrie, il faut annuler le trie avant d'initialiser le contenu de la table.

    Bon dev
    ------------------------------------------------------------------------------------------------------------------------------------------
    Mon message vous a aidé, pensez à remercier . La discussion est résolue, n'oubliez pas le tag
    ------------------------------------------------------------------------------------------------------------------------------------------
    Site perso : Formation, Expérience, Réalisations, ...
    Blog : Le Blog de DSR57 - Programmation WinDev

  6. #6
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    POUR t = 2 A nNbligne		
    	TABLE_SAV.COL_Colonne1 = xlsDonnée(IdFichierXLS, t, 1)
            ...
    	TABLE_SAV.COL_Colonne39 = xlsDonnée(IdFichierXLS, t, 39)
     
    	TableAjoute(TABLE_SAV)	
    FIN
    l'instruction TABLE_SAV.COL_Colonne1 = xlsDonnée(IdFichierXLS, t, 1) modifie la ligne courante.
    Pou continuer à utiliser ce code, vous devriez indiquer la ligne (qui est optionnelle)
    Je suppose que vous commencez avec une ligne dans votre table et que TableAjoute insère la ligne à utiliser dans la prochaine iétration de votre boucle.
    Vous devriez alors supprimer la dernière ligne (nécessairement vide) en sortant de votre boucle
    TableAjoute() ne fait pas de la ligne ajoutée la ligne en cours, sauf si c'est la premièrre (et seule) ligne de la table.

    Donc, vous affectez tout à la première ligne et le contenu que vous y trouvez devrait correspondre au contenu attendu pour la dernière ligne, cette première ligne étant suivie du nombre attendu de lignes, mais vides.


    Par ailleurs,
    - FichierXLS est une chaîne .. qui n'est pas utilisée dans le bout de code que vous nous montrez
    - vous ne gérez pas la prise en compte ou non des lignes et cellules vides par xlsDonnée, ce qui pourrait éventuellement avoir des effets de bord
    - vous ne gérez pas l'erreur sur xlsDonnées et avec 39 colonnes ...
    - dans votre code corrigé, si vous passez à 39 colonnes au lieu de 10, ce ne sera pas terrible pour la lisibilité. Il faudrait donc une instruction multiligne.
    - dans votre nouveau code, impossible de tester l'erreur sur xlsDonnées

    En fait, je vous suggère d'écrire une procédure (apparemment, vous déjà une table de 10 colonnes et une autre de 39 colonnes) indépendant du nombre des colonnes et de elur nom
    Sans oublier en paramètres : chemin d'accès de la feuille en paramètre, nom de la table
    - utiliser un tableau à une dimension
    - définir une boucle de parcours de la ligne de votre feuille Excel avec comme limite xlxNbColonne
    - dans cette boucle affecter les cellules de la ligne Excel à celles du tableau
    - convertir ce tableau en chaîne MaChaine (TableauVersChaine()) en spécifiant le TAB comme séparateur, sinon ce sera RC par défaut et TableaAjoute attend un TAB
    - Ajouter votre ligne MaChaine (ainsi remplie) à la table (en fait en fin de table, sans vous soucier du numéro de ligne)
    - vider votre tableau (TableauSupprimeTout()), sinon le prochain ajout va augmenter sa taille
    - boucler
    Sans oublier de tester vos erreurs à chaque instruction et sortir le cas échéant


    Cela sera peut-être plus lent mais à tester éventuellement si vous avez des feuilles de tailles +++
    Ce sera certainement plus propre, plus lisible, mieux débogable
    Ce sera réutilisable à gogo

    Bon travail

    Hemgé

Discussions similaires

  1. Importation feuille Excel dans Access
    Par Alrune dans le forum VBA Access
    Réponses: 11
    Dernier message: 04/06/2007, 20h23
  2. Importer feuille excel vers Firebird(dbexpress)
    Par nassoft dans le forum Bases de données
    Réponses: 3
    Dernier message: 11/05/2007, 14h19
  3. Import feuille Excel dans MySql ?
    Par loady dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 11/08/2006, 14h39
  4. [ACCESS] Importer feuille excel (encore!. . . )
    Par Puffcash dans le forum Access
    Réponses: 5
    Dernier message: 08/08/2006, 10h48
  5. problème pour importer données excel dans Access
    Par sarah67 dans le forum Access
    Réponses: 8
    Dernier message: 20/02/2006, 08h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo