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 à l'essai
    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
    Points : 24
    Points
    24
    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
    Points : 3 766
    Points
    3 766
    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");
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  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
    Points : 3 766
    Points
    3 766
    Par défaut
    Quelques liens sur le site
    ici tu a une FAQ Excel
    http://excel.developpez.com/faq/

    ici ta des tutos
    http://excel.developpez.com/cours/

    ici un tuto Excel BCB
    http://lfe.developpez.com/Excel/
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  4. #4
    Membre à l'essai
    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
    Points : 24
    Points
    24
    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
    Points : 3 766
    Points
    3 766
    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
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  6. #6
    Membre à l'essai
    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
    Points : 24
    Points
    24
    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
    Points : 3 766
    Points
    3 766
    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");
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  8. #8
    Membre à l'essai
    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
    Points : 24
    Points
    24
    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
    Points : 3 766
    Points
    3 766
    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
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  10. #10
    Membre à l'essai
    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
    Points : 24
    Points
    24
    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
    Points : 3 766
    Points
    3 766
    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
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  12. #12
    Membre à l'essai
    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
    Points : 24
    Points
    24
    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
    Points : 3 766
    Points
    3 766
    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;
         }
    }
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  14. #14
    Membre à l'essai
    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
    Points : 24
    Points
    24
    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
    Points : 3 766
    Points
    3 766
    Par défaut
    sur la ligne
    int vCell = vWorksheet.OlePropertyGet("Cells", depart, 3).OlePropertyGet("Value");
    remplace int par Variant pour voir
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  16. #16
    Membre à l'essai
    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
    Points : 24
    Points
    24
    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
    Points : 3 766
    Points
    3 766
    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;
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  18. #18
    Membre à l'essai
    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
    Points : 24
    Points
    24
    Par défaut
    AH Et ça supprime les cellules et pas les lignes :s

  19. #19
    Membre à l'essai
    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
    Points : 24
    Points
    24
    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
    Points : 3 766
    Points
    3 766
    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
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

+ 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