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

Delphi Discussion :

Comment accéder aux éléments composant les tableaux de variants?


Sujet :

Delphi

  1. #1
    Membre habitué Avatar de MelkInarian
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Points : 144
    Points
    144
    Par défaut Comment accéder aux éléments composant les tableaux de variants?
    Bonjour à toutes et à tous ;
    Mon problème du jour : Sous [D5] et [Xls 2000].
    J’ai 2 classeurs Excel contenant des données compatibles.
    Je souhaite mettre le 2ème à jour à partir des données du 1er.
    Je passe mon appli sous Delphi car il y a 6 utilisateurs possibles et Excel n’autorise qu’un accès en écriture à la fois.
    Les utilisateurs laissent souvent l’appli ouverte sans forcément saisir des données d’où cause de soucis.
    Je copie les données utiles des 2 feuilles dans 2 variants (qui sont en fin de compte 2 tableaux de variants puisqu’ils contiennent chacun plusieurs milliers de cellules).
    Je les ai déclarés ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    vMSExcel, vXLClasseurs, vXLClasseur,
       vFeuille, Etendue1, Etendue2, Cellule1     : variant;
    Et mon problème est là :
    Comment accéder ensuite aux éléments composant les tableaux de variants pour pouvoir les traiter ?
    J’ai vainement essayé avec une affectation du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cellule1 := Etendue1.cells[‘A2’];
    Dans l’espoir de récupérer la valeur ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaValeur := Cellule1.Value ;
    Mais une EOleError se produit avec le message ‘Le Variant ne référence pas un objet Automation’.
    J’en ai déduit que c’est le type d’accès qui n’est pas bon mais je n’en suis pas sûr !
    Si l’un des Maîtres de la programmation lit ce message, je serais fort aise de recevoir un coup de main.
    Un apprenti qui peine seul le soir au fond des bois.

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Points : 915
    Points
    915
    Par défaut
    Je suis pas certain d'avoir tout compris ce que tu explique...
    mais si tu veux 2 feuille identique à la fin...
    pourquoi ne pas simplement faire un copier coller?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    //Active le bonne onglet
    ExcelWorkSheet1.Activate;
    //Selectionne toute les cellules
    ExcelWorkSheet1.Cells.Select; 
    //Copier coller dans le 2eme onglet
    ExcelWorkSheet1.Cells.Copy( ExcelWorksheet2.Range['A1','A1']);

  3. #3
    Membre habitué Avatar de MelkInarian
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Points : 144
    Points
    144
    Par défaut
    Citation Envoyé par Eric Boisvert
    Je suis pas certain d'avoir tout compris ce que tu explique...
    mais si tu veux 2 feuille identique à la fin...
    pourquoi ne pas simplement faire un copier coller?
    Mille pardons, je n'ai pas été assez clair.
    Dans l'une des tables il y a beaucoup plus de données (lignes) que dans l'autre mais dans la seconde il y a plus de champs (colonnes). En fait la première (qui est celle ou je vais chercher les données à l'origine) est enrichie par un déversement automatisé. La seconde est enrichie manuellement par des saisies de dates d'intervention. Périodiquement (par clic bouton) je veux contrôler la table 1 qui est susceptible d'avoir évolué même pour des enregistrements déjà dans la table 2. Je souhaite donc:
    Ouvrir table 1
    Ouvrir table 2
    pour chaque enregistrement de table 1 rechercher s'il existe un enregistrement correspondant dans table 2
    Si c'est le cas:
    Comparer tous les champs communs (autres que des dates). s'il y a divergence:
    On affiche une boite permettant de choisir ce que l'on souhaite conserver.
    Comparer tous les champs dates communs.
    s'il y a divergence:
    Si le champ dans le fichier table 2 n'est pas vide on le conserve.
    Si le champ dans le fichier table 2 est vide on le remplace.
    Voici le baratin que j'avais écris comme "cahier des charges" à ma fonction.
    Est-ce plus clair?
    Merci

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Points : 915
    Points
    915
    Par défaut
    essaie plutot cette syntaxe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    //var Cellule1:variant;
    Cellule1:=ExcelWorkSheet1.Range['A1','A1'];
    MaValeur:=Cellule1.Value;

  5. #5
    Membre habitué Avatar de MelkInarian
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Points : 144
    Points
    144
    Par défaut
    Citation Envoyé par Eric Boisvert
    essaie plutot cette syntaxe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    //var Cellule1:variant;
    Cellule1:=ExcelWorkSheet1.Range['A1','A1'];
    MaValeur:=Cellule1.Value;
    Je suis donc obligé de garder les 2 classeurs ouverts pendant le temps de traitement.
    J'espérais pouvoir faire tout le traitement sur les variants et ensuite rouvrir les classeurs pour sauvegarder les modifications.
    Mais quand il faut, il faut!

    Merci Eric Boisvert

Discussions similaires

  1. Comment accéder aux éléments d'une sous formulaire en javascript
    Par oumelkhairat dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 25/11/2013, 17h15
  2. comment accéder aux éléments d'une liste
    Par RouRa22 dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 07/05/2008, 14h53
  3. Réponses: 11
    Dernier message: 15/06/2007, 18h43
  4. Comment accèder aux composants graphique à partir d'un autre thread ?
    Par PerpetualSnow dans le forum Windows Forms
    Réponses: 6
    Dernier message: 07/03/2007, 12h11
  5. Comment accéder aux composants du module de données distant ?
    Par bds2006 dans le forum Bases de données
    Réponses: 1
    Dernier message: 23/06/2006, 01h47

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