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 :

Excel, agrandir une plage de cellules sur la droite.


Sujet :

C++Builder

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 139
    Points : 62
    Points
    62
    Par défaut Excel, agrandir une plage de cellules sur la droite.
    Bonjour à tous,

    Nouveau problème pour du pilotage Excel depuis BCB

    J'aurais besoin d'agrandir une plage de cellules sur la droite. Le problème étant que la fonction donnée sur la FAQ permet d'agrandir une plage rectangulaire, de dimensions connues.

    Moi ma plage de cellules ressemble à çà :


    La sélection représente la plage, et les cellules rouge, celles qui doivent se rajouter à la plage de cellules. Le tout, sans connaitre à l'avance une quelconque dimension de la plage.

    Une idée?

    PS : Et s'il existe un moyen de connaitre le nombre de lignes de la plage, ainsi que se déplacer dans la plage de cellules sans en sortir. Par exemple, si je dis : sélectionne la 5eme ligne de la plage, et que la 5ème ligne n'est pas dans la plage (cf image), ben çà chope la 5ème ligne DE la plage (soit la sixième en partant de la première cellule). Le but étant de remplir automatiquement toutes les cellules que je rajoute par le biais de ma première question.
    Images attachées Images attachées  

  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
    Salut Ldoppea
    Pour selectionner plusieurs plages on peut comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    // on active la feuille
    vWorksheet.OleProcedure("Activate");
     
    // on definit les plages
    Variant Aire1 = vWorksheet.OlePropertyGet("Range", "A1:B2");
    Variant Aire2 = vWorksheet.OlePropertyGet("Range", "C3:D4");
    Variant Aire3 = vWorksheet.OlePropertyGet("Range", "B8:F14");
     
    // on definit l'ensemble des plages
    Variant mesMultiAires =  vMSExcel.OleFunction("Union", Aire1, Aire2, Aire3);
     
    // on selectionne les plages
    mesMultiAires.OleProcedure("Select");

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 139
    Points : 62
    Points
    62
    Par défaut
    Pour la sélection, c'est bon, j'y étais arrivé. Mais le problème est que maintenant je dois pouvoir l'agrandir sans la transformer en une seule plage de sélection rectangulaire .

  4. #4
    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
    Salut Ldoppea
    Je ne comprend pas ce que tu veux faire

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 139
    Points : 62
    Points
    62
    Par défaut
    En temps normal, pour redimensionner une plage de sélection, il faut utiliser le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Variant vNewRange;
    vNewRange = vRange.OlePropertyGet("Resize", rowsize, columnsize);
    Mais le problème est que le code suivant redimensionne la plage en une nouvelle rectangulaire de dimensions rowsize et columnsize. Hors là, ma plage est composée non pas de 1 rectangle, mais de plusieurs.

    De plus je souhaiterais pouvoir agrandir la plage en rajoutant une colonne sur la droite, sans connaitre le nombre de colonnes de départ (dans la formule, il faut le connaitre et le prendre en considération dans le columnsize)

    PS : Est-il possible de récupérer les dimensions d'une plage?

  6. #6
    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
    Si j'ai bien compris tu veux conserver le meme nombre de plages en ajoutant une cellule sur la largeur, on peut connaitre le nombre de lignes et de colonnes de chaque plage a partir de la on peut redefinir les plages
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Variant lign1 = Aire1.OlePropertyGet("Rows").OlePropertyGet("Count");
    Variant colon1 = Aire1.OlePropertyGet("Columns").OlePropertyGet("Count");
     
    Variant lign2 = Aire2.OlePropertyGet("Rows").OlePropertyGet("Count");
    Variant colon2 = Aire2.OlePropertyGet("Columns").OlePropertyGet("Count");
     
    Variant lign3 = Aire3.OlePropertyGet("Rows").OlePropertyGet("Count");
    Variant colon3 = Aire3.OlePropertyGet("Columns").OlePropertyGet("Count");

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 139
    Points : 62
    Points
    62
    Par défaut
    Ça à l'air d'être ce qu'il me faut, mais je n'ai pas la possibilité de tester avant un petit moment, je viens d'avoir un problème de pc il faut que j'attende le retour du SAV.

    J'y marque quand même en résolu?

  8. #8
    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
    Dans ce cas il faut modifier la selection des aires comme ceci
    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
     
    vWorksheet.OleProcedure("Activate");
    // vMSExcel.OlePropertyGet("Range", "C5:D9,G9:H16,B14:D18");
    //Variant Aire1 = vWorksheet.OlePropertyGet("Range", "A1:B2");
    Variant Aire1 = vWorksheet.OlePropertyGet("Range", vWorksheet.OlePropertyGet("Cells",1,1),vWorksheet.OlePropertyGet("Cells",2,2));
    //Variant Aire2 = vWorksheet.OlePropertyGet("Range", "C3:D4");
    Variant Aire2 = vWorksheet.OlePropertyGet("Range", vWorksheet.OlePropertyGetvWorksheet.OleProcedure("Activate");
    // vMSExcel.OlePropertyGet("Range", "C5:D9,G9:H16,B14:D18");
    //Variant Aire1 = vWorksheet.OlePropertyGet("Range", "A1:B2");
    Variant Aire1 = vWorksheet.OlePropertyGet("Range", vWorksheet.OlePropertyGet("Cells",1,1),vWorksheet.OlePropertyGet("Cells",2,2));
    //Variant Aire2 = vWorksheet.OlePropertyGet("Range", "C3:D4");
    Variant Aire2 = vWorksheet.OlePropertyGet("Range", vWorksheet.OlePropertyGet("Cells",3,3),vWorksheet.OlePropertyGet("Cells",4,4));
    //Variant Aire3 = vWorksheet.OlePropertyGet("Range", "B8:F14");
    Variant Aire3 = vWorksheet.OlePropertyGet("Range", vWorksheet.OlePropertyGet("Cells",8,2),vWorksheet.OlePropertyGet("Cells",14,6));
    Variant mesMultiAires =  vMSExcel.OleFunction("Union", Aire1, Aire2, Aire3);
    mesMultiAires.OleProcedure("Select");
    Variant lign1 = Aire1.OlePropertyGet("Rows").OlePropertyGet("Count");
    Variant colon1 = Aire1.OlePropertyGet("Columns").OlePropertyGet("Count");
    Variant lign2 = Aire2.OlePropertyGet("Rows").OlePropertyGet("Count");
    Variant colon2 = Aire2.OlePropertyGet("Columns").OlePropertyGet("Count");
    Variant lign3 = Aire3.OlePropertyGet("Rows").OlePropertyGet("Count");
    Variant colon3 = Aire3.OlePropertyGet("Columns").OlePropertyGet("Count");vWorksheet.OlePropertyGet("Cells",4,4));
    //Variant Aire3 = vWorksheet.OlePropertyGet("Range", "B8:F14");
    Variant Aire3 = vWorksheet.OlePropertyGet("Range", vWorksheet.OlePropertyGet("Cells",8,2),vWorksheet.OlePropertyGet("Cells",14,6));
    Variant mesMultiAires =  vMSExcel.OleFunction("Union", Aire1, Aire2, Aire3);
    mesMultiAires.OleProcedure("Select");
    Variant lign1 = Aire1.OlePropertyGet("Rows").OlePropertyGet("Count");
    Variant colon1 = Aire1.OlePropertyGet("Columns").OlePropertyGet("Count");
    Variant lign2 = Aire2.OlePropertyGet("Rows").OlePropertyGet("Count");
    Variant colon2 = Aire2.OlePropertyGet("Columns").OlePropertyGet("Count");
    Variant lign3 = Aire3.OlePropertyGet("Rows").OlePropertyGet("Count");
    Variant colon3 = Aire3.OlePropertyGet("Columns").OlePropertyGet("Count");
    il est plus facile en placant des variables dans ("Cells",X,Y) de modifier les coordonnees

  9. #9
    Responsable Magazine

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    Par défaut
    Citation Envoyé par Ldoppea Voir le message
    J'y marque quand même en résolu?
    Non, tu attend d'avoir testé


  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 139
    Points : 62
    Points
    62
    Par défaut
    Bon, j'ai enfin pu tester là solution de Blondelle et çà marche

    En très condensé, pour étendre d'une case sur la droite, çà fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vRange = vRange.OlePropertyGet("Resize", vRange.OlePropertyGet("Rows").OlePropertyGet("Count"), vRange.OlePropertyGet("Column").OlePropertyGet("Count")+1);
    Merci encore pour l'aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Trier une plage de cellules
    Par Squelet dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 03/12/2019, 13h04
  2. Réponses: 2
    Dernier message: 03/02/2012, 22h47
  3. Valider une plage de cellules sur plusieurs feuilles via une listbox
    Par lio59 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 16/08/2009, 13h52
  4. faire une copie d'une plage de cellules sur x feuilles
    Par La Zélie dans le forum Excel
    Réponses: 4
    Dernier message: 11/06/2008, 08h55
  5. Réponses: 2
    Dernier message: 27/09/2006, 19h41

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