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

C++Builder Discussion :

Supprimer une ligne Exel avec condition [D�butant]


Sujet :

C++Builder

  1. #1
    Membre confirm�
    Homme Profil pro
    �tudiant
    Inscrit en
    Mai 2013
    Messages
    71
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 71
    Par d�faut Supprimer une ligne Exel avec condition
    Salut tout le monde , apr�s le dernier poste , r�solu , et d'ailleurs encore merci . Je vais vous demander .. Car je ne trouves pas . Comment supprimer une ligne compl�tement et ne pas la vid�e , sinon �a laissera du vide.. Et vu les 14.000 lignes que j'ai a filtrer... Si la valeur ne d�passe pas les 6 par exemple . Je n'ai pas trouv� dans le FaQ . Merci d'avance

  2. #2
    R�dacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par d�faut
    Pour repondre a ta question precedente pour effacer le contenu d'un champ de cellules on peut faire comme ceci
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    vWorksheet.OlePropertyGet("Range", "A1:H292").OleFunction("Select");
    vMSExcel.OlePropertyGet("Selection").OleFunction("ClearContents");
    vWorksheet.OlePropertyGet("Range", "A1").OleFunction("Select");
    Excel comme Word possede une fonction qui permet d'enregistrer dans une Macro tout ce que l'on execute, c'est ce que j'ai fait, a partir de ce code on en deduit ce que l'on doit ecrire en OleExcel
    Pour supprimer une ligne on peut faire comme ceci
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    vWorksheet.OlePropertyGet("Range", "7:7").OleFunction("Select");
    vMSExcel.OlePropertyGet("Selection").OleFunction("Delete", -4162);
    vWorksheet.OlePropertyGet("Range", "A1").OleFunction("Select");

  3. #3
    R�dacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738

  4. #4
    Membre confirm�
    Homme Profil pro
    �tudiant
    Inscrit en
    Mai 2013
    Messages
    71
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 71
    Par d�faut
    Sans vouloir �tre trop chiant , est-ce que tu pourrais m'expliquer les lignes de code que tu m'a �cris ? Je comprends a peu pr�t mais pourquoi -4xxx etc . Et tout simplement quoi correspond a quoi . Car je doit faire un test sur 14.000 lignes

  5. #5
    R�dacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par d�faut
    // on selectionne la ligne 7
    vWorksheet.OlePropertyGet("Range", "7:7").OleFunction("Select");

    // on supprime la selection ( -4162 ) est une variable Excel ( xlUp ) qui indique le decalage des lignes
    // code VB
    Sub Macro4()
    Rows("7:7").Select
    Selection.Delete Shift:=xlUp
    End Sub

    vMSExcel.OlePropertyGet("Selection").OleFunction("Delete", -4162);

    // on selectionne la Cellule A1
    vWorksheet.OlePropertyGet("Range", "A1").OleFunction("Select");
    en esperant avoir �t� clair

  6. #6
    Membre confirm�
    Homme Profil pro
    �tudiant
    Inscrit en
    Mai 2013
    Messages
    71
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 71
    Par d�faut
    Oui j'ai assez compris merci . Mais juste . Comment je peux faire pour s�lectionne la ligne avec des variables? Genre avec i , qui est incr�ment� a chaque fois que je fait la boucle pour pouvoir tester dans un genre

    if (valeur de A2) <6

    {supression de la ligne}

    . Enfin si tu vois ce que je veux dire .
    Comme c'est avec une cha�ne de carract�re qu'on selectionne la ligne . Et que j'ai fait pour par exemple "A13" en rajoutant 13 avec sprintf . Mais comme il y aura 5 chiffres vers la fin et de moins en moins vers le d�but . Comment faire ?

    A moins techniquement si je fait par etape de chiffres ..
    Genre

    while (i<10) while (i<100) <while(i<1000) Etc.. Pour que le ':' Soit bien plac� ? Si tu vois ce que je veux dire? Ou y a t'il une fa�on plus simple avec des variables ? Pour le faire? ^^ Merci d'avance

  7. #7
    R�dacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par d�faut
    Avant tout je te conseille de jeter un �il sur les liens que je t'ai fournis.

    Je ne comprend pas ce que tu veux faire qu'elle est le but de supprimer une ligne si une cellule est inferieure a 6, tu ne dois pas oublier que tu travail sur un tableau et que tout ce qui est sur cette ligne est supprime
    on peut remplacer " A1 " par " 1,1 " en modifiant le code comme ceci
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
     
    // pour ecrire dans une cellule
    // Cells ligne, colonne
    vCell = vWorksheet.OlePropertyGet("Cells", 1, 1);
    // on recupere le contenu de la cellule
    vValue = vCell.OlePropertyGet("Value");
    // on ecrit une valeur dans la cellule
    vCell.OlePropertySet("Value", "toto");

  8. #8
    Membre confirm�
    Homme Profil pro
    �tudiant
    Inscrit en
    Mai 2013
    Messages
    71
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 71
    Par d�faut
    Justement , je n'ai pas trouv� mon bonheur sur les liens que tu m'a envoy� . Bon en gros je t'explique , effectivement je n'avais pas expliqu� mon cas . Je suis en ce moment en entreprise pour mon stage de BTS 1�re ann�e , et ils m'ont demand� de leur faire un programme qui leur fera gagner un temps fou .

    Mon programme doit g�rer un fichier listant toutes les ventes etc d'une pharmacie , . Le fichier lui m�me fait 35 colones et 15.000 lignes (au minimum) .

    Je doit donc supprimer ce qui ne m�int�resse pas pour garder ce qui m�int�resse . Soit le code CIP des m�dicaments / et le nombre de vente a l'ann�e de la pharmacie . Ceci �tant fait . je doit maintenant enlever tout ce qui se vend moins de 6 fois par an . Soit .. le fait que je veuille supprimer une ligne enti�re d�s que la valeur de ma case est inf�rieure � 6 . Une fois cela fait je devrais enlever toutes les lignes de la colonne correspondant aux codes des m�dicaments pour qui ne sont pas sous la forme 340092xxxxxxx
    3
    4

    Soit Code C.I.P13 .
    Une fois qu'il n'y a plus que du C.I.P13 . je doit le transformer en C.I.P 7 . Donc enlever les 5 premiers caract�res et le dernier .

    Juste apr�s �a je doit faire une comparaison entre 2 fichiers Xls . Donc le fichier sp�cial comparaison , puis le fichier de la pharmacie modifi� . Pour ne garder que ce qui est sur les deux XLS En m�me temps .

    Je t'ai donc tout expliqu� en d�tail ^^ Je penses que maintenant tu comprends pourquoi je souhaite supprimer une ligne enti�re Puisque les lignes ne m'y int�resse plus . J'esp�re que j'aurais �t� assez clair en t'expliquant tout en d�tail dans ce roman . Et que tu puisses m'aider

  9. #9
    R�dacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par d�faut
    le numero de ta premiere ligne est 1, sais tu quelle est le numero de ta derniere ligne, ou ce numero est variable

  10. #10
    Membre confirm�
    Homme Profil pro
    �tudiant
    Inscrit en
    Mai 2013
    Messages
    71
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 71
    Par d�faut
    Le nombre de ligne est variable mais j'ai fait en sorte que l'utilisateur rentre le nombre de lignes . Pour qu'il n'y ai pas des lignes en trop . A lui de ne pas ecrire n'importe quoi .

    Ps : La premi�re ligne c'est 2 puisque la 1 sert pour les noms des colones

  11. #11
    R�dacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par d�faut
    Il existe une fonction Excel qui permet de trouver la derniere cellule non vide d'un tableau, je recherche dans ma Doc car je ne l'ai pas en tete et je poste un code

  12. #12
    Membre confirm�
    Homme Profil pro
    �tudiant
    Inscrit en
    Mai 2013
    Messages
    71
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 71
    Par d�faut
    Ok merci . tu g�res . Ca peut �tre utile pour automatiser la chose plut�t que de demander c'est sur . Mais du coup je vais devoir modifier quelques trucs

  13. #13
    R�dacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par d�faut
    Voici comment supprimer les lignes inf a 6
    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
     
    int depart = 1;
     
    // dernier ligne de la colonne A1 a modifier en fonction de celle testee
    int fin = vWorksheet.OlePropertyGet("Range", "A1").OlePropertyGet("SpecialCells", 11).OlePropertyGet("Row");
     
    for(depart ; depart <= fin; depart++)
    {
    // on recupere le contenu de la cellule
    // Cells ligne, colonne
    // colonne a modifier en fonction de celle a tester
    int vCell = vWorksheet.OlePropertyGet("Cells", depart, 1).OlePropertyGet("Value");
    if(vCell <= 6)
         {
         vWorksheet.OlePropertyGet("Cells", depart, 1).OleFunction("Select");
         vMSExcel.OlePropertyGet("Selection").OleFunction("Delete", -4162);
         depart = depart - 1;
         fin = fin - 1;
         }
    }

  14. #14
    Membre confirm�
    Homme Profil pro
    �tudiant
    Inscrit en
    Mai 2013
    Messages
    71
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 71
    Par d�faut
    Salut . Donc encore merci . tu va te dire que je suis tr�s lourd x) .. Mais . Ca m'affiche le message suivant . :

    Projet Programme.exe a provoqu� une classe d'exeption EVariant Error avec le message 'Conversion de type variant incorrecte'. Processus stopp� . .
    J'ai juste modifi� un truc mais m�me avec le code d'origine cela ne marche pas :s

    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
    int depart = 1;
     
    // dernier ligne de la colonne A1 a modifier en fonction de celle testee
    int fin = vWorksheet.OlePropertyGet("Range", "C15598").OlePropertyGet("SpecialCells", 11).OlePropertyGet("Row");
     
    for(depart ; depart <= fin; depart++)
    {
    // on recupere le contenu de la cellule
    // Cells ligne, colonne
    // colonne a modifier en fonction de celle a tester
    int vCell = vWorksheet.OlePropertyGet("Cells", depart, 3).OlePropertyGet("Value");
    if(vCell <= 6)
         {
         vWorksheet.OlePropertyGet("Cells", depart, 3).OleFunction("Select");
         vMSExcel.OlePropertyGet("Selection").OleFunction("Delete", -4162);
         depart = depart - 1;
         fin = fin - 1;
         }
    }
    L'erreur vient il me semble . Si je dit pas de b�tise . De int vCell . (la fonction ne renvoi pas un variant? :s .. Merci encore pour ta patience .. x)

    (le programme me renvoit a cette ligne)

  15. #15
    R�dacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par d�faut
    sur la ligne
    int vCell = vWorksheet.OlePropertyGet("Cells", depart, 3).OlePropertyGet("Value");
    remplace int par Variant pour voir

  16. #16
    Membre confirm�
    Homme Profil pro
    �tudiant
    Inscrit en
    Mai 2013
    Messages
    71
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 71
    Par d�faut
    J'ai essay� . Puisque comme j'ai vu que tu n'�tait pas connect� j'ai trifouill� un peu le code dans tous les sens pour voir . Donc en fait la fonction renvoit bel et bien un variant . Donc j'ai un peu modifi� un peu . Je te montre le code que j'ai sorti . Mais ca marche une ligne sur 3 . et ca ne supprime pas la ligne . Mais la cellule . Du coup . pas bon :s


    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
    int depart = 1;
     
    // dernier ligne de la colonne A1 a modifier en fonction de celle testee
    int fin = vWorksheet.OlePropertyGet("Range", "C15598").OlePropertyGet("SpecialCells", 11).OlePropertyGet("Row");
     
    for(depart ; depart <= fin; depart++)
    {
    // on recupere le contenu de la cellule
    // Cells ligne, colonne
    // colonne a modifier en fonction de celle a tester
     
    Variant Cell; // = vWorksheet.OlePropertyGet("Cells", depart, 3);
     
    lign[0]='C';
     
    Cell = vWorksheet.OlePropertyGet("Range","C2",lign);
    Variant Cels=Cell.OlePropertyGet("Value");
     
     
    for(int depart;depart<lignes;depart++)
    {
    int vCel;
    vCel = Cels.GetElement(depart,1); //Cell.OlePropertyGet("Value");
     
     
    if(vCel <= 6)
         {
         vWorksheet.OlePropertyGet("Cells", depart, 3).OleFunction("Select");
         vMSExcel.OlePropertyGet("Selection").OleFunction("Delete", -4162);
         }
    }
     
    }
    Ps : lign[0]='C'
    et un peu plus haut il y a

    sprintf(lign+1,"%d",(int)lignes);

    lignes = Le nombre de lignes

  17. #17
    R�dacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par d�faut
    c'est normal que tu supprime une ligne sur trois, Excel repositionne ses lignes a chaque suppression automatiquement, cest pour cela que dans la boucle de suppression il y a ceci
    depart = depart - 1;
    fin = fin - 1;

  18. #18
    Membre confirm�
    Homme Profil pro
    �tudiant
    Inscrit en
    Mai 2013
    Messages
    71
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 71
    Par d�faut
    AH Et �a supprime les cellules et pas les lignes :s

  19. #19
    Membre confirm�
    Homme Profil pro
    �tudiant
    Inscrit en
    Mai 2013
    Messages
    71
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 71
    Par d�faut
    Maintenant plus rien ne marche.. T_T Magique.. Qu'est-ce que j'ai touch� encore...

  20. #20
    R�dacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par d�faut
    Je viens de refaire le test chez moi et mon code supprime bien la ligne ?, et en modifiant la ligne que je t'ai indiquee

+ R�pondre � la discussion
Cette discussion est r�solue.
Page 1 sur 4 1234 Derni�reDerni�re

Discussions similaires

  1. Supprimer une ligne enti�re avec condition?!
    Par ChicoXavier dans le forum G�n�ral Python
    R�ponses: 2
    Dernier message: 08/04/2013, 19h53
  2. Supprimer une ligne excel avec une condition
    Par Quentin006 dans le forum Excel
    R�ponses: 4
    Dernier message: 28/05/2009, 11h45
  3. Comment supprimer une ligne de la listbox avec le bouton 'suppr'
    Par florent64 dans le forum Interfaces Graphiques
    R�ponses: 2
    Dernier message: 11/06/2007, 17h25
  4. R�ponses: 4
    Dernier message: 19/03/2007, 09h57
  5. supprimer une ligne avec cle etrangere
    Par BaBas dans le forum Langage SQL
    R�ponses: 4
    Dernier message: 15/07/2003, 11h24

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