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

Algorithmes et structures de données Discussion :

Faire un couper - coller de plusieurs cellules d'un tableau


Sujet :

Algorithmes et structures de données

  1. #1
    Rédacteur

    Homme Profil pro
    Technical Lead Salesforce
    Inscrit en
    Février 2009
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Technical Lead Salesforce

    Informations forums :
    Inscription : Février 2009
    Messages : 563
    Points : 1 667
    Points
    1 667
    Par défaut Faire un couper - coller de plusieurs cellules d'un tableau
    Bonjour,

    J'ai un tableau qui est indexé par des nombres, exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    [0] => 'Ma première valeur'
    [1] => 'Ma seconde valeur'
    [2] => 'Ma troisième valeur'
    ...
    Je dois trouver un algorithme qui me permet de faire un couper - coller de une ou plusieurs lignes, c'est à dire que je sélectionne une ou plusieurs lignes et je sélectionne ensuite, la ligne pour laquelle je veux coller les lignes au dessus d'elle.

    Je connais donc les index de mon tableau de la ou les lignes que je veux couper et l'index de la ligne où je veux coller la ou les lignes au dessus de celle-ci mais je ne sais pas comment procéder.

    J'ai identifié 3 situations :
    1. Je sélectionne une ou plusieurs lignes au dessus de la ligne pour laquelle je veux les coller
    2. Je sélectionne une ou plusieurs lignes en dessous de la ligne pour laquelle je veux les coller
    3. Je sélectionne une ou plusieurs lignes au dessus de la ligne pour laquelle je veux les coller et je sélectionne une ou plusieurs lignes en dessous de la ligne pour laquelle je veux les coller

    Prenons un tableau avec 10 lignes
    . Je veux couper la ligne 2 et la coller au dessus de la ligne 5
    . Je veux couper la ligne 7 et la coller au dessus de la ligne 5
    . Je veux couper la ligne 2 et la ligne 7 pour les coller au dessus de la ligne 5

    Il faut bien évidemment qu'à la fin, je rende mon nouveau tableau bien coupé - collé.

    Avez-vous une idée sur comment procéder?
    - Mes articles
    - Consultant technique Salesforce
    - Salesforce Certified Administrator
    - Salesforce Certified Platform App Builder
    - Salesforce Certified Developper I
    - Salesforce Certified Sales Cloud
    - Salesforce Certified Service Cloud

  2. #2
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 32
    Points : 71
    Points
    71
    Par défaut
    Marrant comme problème J'ai fait ça en java, en n'utilisant qu'un tableau :

    Code java : 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
     
            String[] tableau = {"a", "b", "c", "d", "e", "f", "g"};
            int[] indexACouper = {3, 5, 6};
            String[] valIndexACouper = {"d", "f", "g"};
            int indexColler = 2;
            int decalage = 0;
     
            for(int i = 0;i<indexACouper.length;i++) {
                if(indexACouper[i]<indexColler) {
                    for(int j=indexACouper[i]-decalage;j<indexColler-1; j++) {
                        tableau[j]=tableau[j+1];
                    }
                    decalage++;
     
     
                }
                else {
                    for(int j=indexACouper[i];j>indexColler; j--) {
                        tableau[j]=tableau[j-1];
                    }
                    indexColler++;
                }
            }
     
            for(int i = 0; i<indexACouper.length;i++) {
                tableau[indexColler-(indexACouper.length-i)] = valIndexACouper[i];
            }

    La première boucle sert à préparer le tableau en faisant des décalages. En effet, si l'index de la ligne qu'on coupe est < à indexColler, cela veut dire qu'on a juste à décaler vers indexColler en écrasant la valeur de la ligne que l'on coupe (on garde sa valeur en mémoire dans valIndexACouper.
    Si par contre l'index de la ligne est > à indexColler, on doit tout décaler vers la droite entre indexColler et l'index de la ligne à couper, sans toucher à ce qu'on a après (et mettre à jour indexColler qui bouge). Exemple :
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
     {"a", "b", "c", "d", "e", "f", "g"};

    On veut que la case 1 (valeur b) aille au dessus de d, cela donnera :
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
     {"a", "c", "c", "d", "e", "f", "g"};

    La case d'indice 2 (valeur c) au dessus du d sera la case ou devra se trouver la valeur b.

    Toujours sur ce tableau : {"a", "b", "c", "d", "e", "f", "g"};
    On veut que la case 5 aille au dessus de d (indice 3), cela donnera :
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
     {"a", "b", "c", "d", "d", "e", "g"};

    La case d'indice 3 (valeur d) sera la case qui contiendra la valeur f. Ici, on voit que indexColler a été incrémenté à cause du décalage.

    En faisant ça pour chaque case à mettre au dessus d'une autre, on obtient donc un tableau "dans le bon ordre", et il ne reste plus qu'à mettre à jour les cases au dessus de indexColler. C'est ce que fait la boucle finale.

    Mon explication est peut être pas très claire, mais ça a l'air de marcher (j'ai fait ça assez rapidement donc pas testé tous les cas possibles). Au pire ça te donnera une idée

    Résultats, toujours avec le même tableau de base {"a", "b", "c", "d", "e", "f", "g"} :
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            int[] indexACouper = {0, 1, 3};
            String[] valIndexACouper = {"a", "b", "d"};
            int indexColler = 4;
    => {c, a, b, d, e, f, g}
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            int[] indexACouper = {1, 3, 5};
            String[] valIndexACouper = {"b", "d", "f"};
            int indexColler = 4;
    => {a, c, b, d, f, e, g}
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            int[] indexACouper = {3, 5, 6};
            String[] valIndexACouper = {"d", "f", "g"};
            int indexColler = 2;
    => {a, b, d, f, g, c, e}

    Les résultats sont corrects, si j'ai bien compris ce que tu voulais faire. Après, peut être qu'il existe un algo plus simple :p

  3. #3
    Inactif  
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2014
    Messages : 374
    Points : 479
    Points
    479
    Par défaut
    Bonjour.
    c'est à dire que je sélectionne une ou plusieurs lignes et je sélectionne ensuite, la ligne pour laquelle je veux coller les lignes au dessus d'elle.
    Les lignes que vous sélectionnez forment-elles un bloc continu (ligneN, ligneN+1, ligneN+2) ?...

    En d'autres termes, s'agit-il d'un 'copier' en une seule manipulation ?... (on sélection un bloc de lignes contiguës)

  4. #4
    Rédacteur

    Homme Profil pro
    Technical Lead Salesforce
    Inscrit en
    Février 2009
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Technical Lead Salesforce

    Informations forums :
    Inscription : Février 2009
    Messages : 563
    Points : 1 667
    Points
    1 667
    Par défaut
    Peut-être que je me suis mal exprimé.

    Prenons le tableau :
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    {"a","b","c","d","e","f"}

    Si je veux couper les valeurs a, b et e pour ensuite sélectionner d pour dire que ces valeurs seront au dessus de celle-ci, cela donnera :
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    {"c","a","b","e","d","f"}

    Second exemple toujours sur le même tableau, si je sélectionne a, b et e et que je sélectionne ensuite e, cela doit donner :
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    {"c","d","a","b","e","f"}

    Les lignes sélectionnées peuvent être continues ou non, on ne sait pas à l'avance, c'est basé sur le couper - coller excel.
    En revanche, on ne peut coller qu'au dessus d'une seule ligne.

    Pour l'nstant, je pense partir sur quelque chose de similaire à ça :
    . Stocker les index des lignes à couper dans un second tableau.
    . Parcourir le tableau en faisant quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Pour chaque valeur de mon tableau
     
       Si l'index de la ligne n'est ni un index à couper ni un dex à coller
          Ajout de la ligne dans un nouveau tableau (qui sera le tableau final)
     
       Sinon s'il s'agit de la ligne à couper
          Parcours des index à copier
             Ajout de la ligne au tableau final
     
          Si la ligne à couper ne figure pas dans celles à copier (pour éviter les doublons)
             Ajout de la ligne à couper au tableau
    J'espère que cet algorithme répond à tous les cas de figures possibles.
    - Mes articles
    - Consultant technique Salesforce
    - Salesforce Certified Administrator
    - Salesforce Certified Platform App Builder
    - Salesforce Certified Developper I
    - Salesforce Certified Sales Cloud
    - Salesforce Certified Service Cloud

  5. #5
    Inactif  
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2014
    Messages : 374
    Points : 479
    Points
    479
    Par défaut
    Bonsoir.
    Vu les contraintes, je lâche l'affaire... (barre trop haute)
    Cordialement.

Discussions similaires

  1. [WD-2010] Selectionner plusieurs cellules d'un tableau
    Par mélii dans le forum VBA Word
    Réponses: 2
    Dernier message: 03/08/2014, 20h54
  2. Couper/Coller Cellule/Colonne Excel depuis VB.NET
    Par Florian54 dans le forum VB.NET
    Réponses: 3
    Dernier message: 08/03/2011, 20h47
  3. Couper / Coller plusieurs feuilles dans un nouveau classeur
    Par Gamal le Celte dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/02/2008, 14h30
  4. Faire un couper/coller dans un tabstrip
    Par soso78 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 16/07/2007, 21h57
  5. Réponses: 15
    Dernier message: 21/03/2006, 14h10

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