Partager via

Simplifier un tableau...

Anonyme
2010-08-19T13:27:46+00:00

Bonjour,

Dans le cadre de mon travail, je dois traiter des données provenant d'un fichier Excel externe, et mettre en page les données pour les adapter à un nombre de lignes restreint. Pour cela, je dois simplifier le tableau en rassemblant les éléments communs, et ainsi faire disparaître un maximum de lignes.

Un exemple de tableau initial et de tableau final sera, je pense, plus parlant:

(un copier/coller dans le bloc-notes sera peut-être nécessaire pour retrouver une mise en page correcte)

V.A | V.B | V.C | V.D || R.1 | R.2

----+-----+-----+-----++-----+----

 0  |  0  |  0  |  0  ||  1  |  2

 0  |  0  |  0  |  1  ||  1  |  2

 0  |  0  |  1  |  0  ||  1  |  2

 0  |  0  |  1  |  1  ||  1  |  2

 0  |  1  |  0  |  0  ||  3  |  4

 0  |  1  |  0  |  1  ||  3  |  4

 0  |  1  |  1  |  0  ||  1  |  2

 0  |  1  |  1  |  1  ||  1  |  2

 1  |  0  |  0  |  0  ||  5  |  6

 1  |  0  |  0  |  1  ||  5  |  6

 1  |  0  |  1  |  0  ||  5  |  6

 1  |  0  |  1  |  1  ||  5  |  6

 1  |  1  |  0  |  0  ||  3  |  4

 1  |  1  |  0  |  1  ||  3  |  4

 1  |  1  |  1  |  0  ||  1  |  2

 1  |  1  |  1  |  1  ||  1  |  2

Ici, la combinaison des 4 premières colonnes (de V.A à V.D) donne un couple de résultats (R.1, R.2). On remarque que la valeur de V.D n'impacte pas la valeur du résultat, et qu'il est possible par exemple de définir 2 "règles" distinctes aboutissant au couple de solutions (1,2). Une solution possible pour simplifier cet ensemble est:

V.A | V.B | V.C || R.1 | R.2

----+-----+-----++-----+----

 0  |  0  |     ||  1  |  2

    |  1  |  0  ||  3  |  4

    |  1  |  1  ||  1  |  2

 1  |  0  |     ||  5  |  6

J'ai passé ma journée à me triturer le neurone sur ce problème sans entrevoir d'algorithme pouvant y répondre. Pouvez-vous m'aider?

Microsoft 365 et Office | Excel | Pour la maison | Windows

Question verrouillée. Cette question a été migrée à partir de la Communauté Support Microsoft. Vous pouvez voter pour indiquer si elle est utile, mais vous ne pouvez pas ajouter de commentaires ou de réponses ni suivre la question.

0 commentaires Aucun commentaire

Réponse acceptée par l’auteur de la question

Anonyme
2010-08-20T08:05:50+00:00

Finalement, j'ai réussi à coder un petit truc qui marche pas trop mal (bien qu'il puisse encore être amélioré), que je vous indique ici:

Sub simpli_small()

        Do

                Change = 0

                i = 3

                Do

                        k = i + 1

                        Do

                                diff = 0

                                For j = 7 To 2 Step -1

                                        If Cells(i, j) <> Cells(k, j) Then

                                                diff = diff + 1

                                                idcol = j

                                        End If

                                Next j

                                If diff = 1 And idcol < 6 Then

                                        Cells(i, idcol).Value = "-"

                                        Rows(k).Select

                                        Selection.Delete Shift:=xlUp

                                        Change = 1

                                End If

                                k = k + 1

                        Loop Until (Cells(k, 6) = "" And Cells(k, 7) = "")

                        i = i + 1

                Loop Until (Cells(i, 6) = "" And Cells(i, 7) = "")

        Loop Until Change = 0

        For j = 2 To 5

                k = 3

                pasvide = 0

                Do

                        If Cells(k, j) <> "-" Then

                                pasvide = 1

                        End If

                        k = k + 1

                Loop Until (Cells(k, 6) = "" And Cells(k, 7) = "")

                If pasvide = 0 Then

                        Columns(j).Select

                        Selection.Delete Shift:=xlLeft

                End If

        Next j

End Sub

Si l'algorithme peut être simplifié et/ou optimisé, je suis à l'écoute. :)

Cette réponse a-t-elle été utile ?

0 commentaires Aucun commentaire

7 réponses supplémentaires

  1. Anonyme
    2010-08-21T09:39:34+00:00

    (tiens, j'ai besoin de me créer un compte différent pour répondre depuis mon PC personnel, alors que je postais jusque là depuis le boulot... amusant.)

    Bonjour,

    J'ai pris les 16 premières valeurs binaires pour donner des exemples d'ensembles de conditions (16 ensembles différents) qui amènent chacun à un couple de réponse spécifique (déterminé au départ), ce n'est pas vraiment la composante essentielle de la question. J'aurais aussi bien pu remplacer 0 et 1 par A et Z. ^^

    (si tu veux l'application pratique de l'ensemble, remplace les 0 et 1 des 4 premières colonnes par des options d'ascenseurs (types de portes, ouvertures, nombre de passagers, etc.), et les résultats des 2 dernières colonnes par des dimensions de gaines. En fonction de ta taille de cabine, la porte palière choisie, la dimension d'ouverture, etc., les dimensions de ta gaine vont varier. Et il est hors de question que je détaille plus que ça.)

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  2. Anonyme
    2010-08-20T10:12:57+00:00

    Bonjour,

    Est-ce un hasard, si on concaténène les colonnes V.A à V.D, on obtient

    une colonne représentant les nombres de 0 à 15 en binaire en ordre croissant.

    Si cet énoncé est vrai, que représente les chiffres de la colonne R.1, R.2 en

    rapport des 4 premières colonnes ?


    MichD


    "Sir_IZBAK_1st" a écrit dans le message de groupe de discussion : *** Adresse électronique supprimée pour cause de confidentialité ***...

    Bonjour,

    Dans le cadre de mon travail, je dois traiter des données provenant d'un fichier Excel externe, et mettre en page les données pour les adapter à un nombre de lignes restreint. Pour cela, je dois simplifier le tableau en rassemblant les éléments communs, et ainsi faire disparaître un maximum de lignes.

    Un exemple de tableau initial et de tableau final sera, je pense, plus parlant:

    (un copier/coller dans le bloc-notes sera peut-être nécessaire pour retrouver une mise en page correcte)

    V.A | V.B | V.C | V.D || R.1 | R.2

    ----+-----+-----+-----++-----+----  0  |  0  |  0  |  0  ||  1  |  2

     0  |  0  |  0  |  1  ||  1  |  2

     0  |  0  |  1  |  0  ||  1  |  2

     0  |  0  |  1  |  1  ||  1  |  2

     0  |  1  |  0  |  0  ||  3  |  4

     0  |  1  |  0  |  1  ||  3  |  4

     0  |  1  |  1  |  0  ||  1  |  2

     0  |  1  |  1  |  1  ||  1  |  2

     1  |  0  |  0  |  0  ||  5  |  6

     1  |  0  |  0  |  1  ||  5  |  6

     1  |  0  |  1  |  0  ||  5  |  6

     1  |  0  |  1  |  1  ||  5  |  6

     1  |  1  |  0  |  0  ||  3  |  4

     1  |  1  |  0  |  1  ||  3  |  4

     1  |  1  |  1  |  0  ||  1  |  2

     1  |  1  |  1  |  1  ||  1  |  2

    Ici, la combinaison des 4 premières colonnes (de V.A à V.D) donne un couple de résultats (R.1, R.2). On remarque que la valeur de V.D n'impacte pas la valeur du résultat, et qu'il est possible par exemple de définir 2 "règles" distinctes aboutissant au couple de solutions (1,2). Une solution possible pour simplifier cet ensemble est:

    V.A | V.B | V.C || R.1 | R.2

    ----+-----+-----++-----+----  0  |  0  |     ||  1  |  2

        |  1  |  0  ||  3  |  4

        |  1  |  1  ||  1  |  2

     1  |  0  |     ||  5  |  6

    J'ai passé ma journée à me triturer le neurone sur ce problème sans entrevoir d'algorithme pouvant y répondre. Pouvez-vous m'aider?

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  3. Anonyme
    2010-08-20T06:20:02+00:00

    Bonjour,

    Passer du tableau 1 au 2 est tout simplement mon objectif.

    Prenons pour exemple les 4 premières lignes du tableau 1:

    V.A | V.B | V.C | V.D || R.1 | R.2

    ----+-----+-----+-----++-----+----

     0  |  0  |  0  |  0  ||  1  |  2

     0  |  0  |  0  |  1  ||  1  |  2

     0  |  0  |  1  |  0  ||  1  |  2

     0  |  0  |  1  |  1  ||  1  |  2

    On remarque que, quelles que soient les valeurs de V.C et V.D, si V.A et V.B sont toutes 2 à 0, on a le couple de réponses R.1=1 et R.2=2. D'où la première ligne du tableau 2:

    V.A | V.B | V.C || R.1 | R.2

    ----+-----+-----++-----+----

     0  |  0  |     ||  1  |  2

    V.C est vide, car les résultats sont les mêmes quel que soit sa valeur.

    V.D n'apparaît pas sur ce tableau, car il n'est déterminant pour aucune solution.

    Merci.

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  4. DanielCo 107.7K Points de réputation
    2010-08-19T15:53:59+00:00

    Bonjour.

    Je n'ai pas compris comment tu passes du tableau 1 au tableau 2.

    Peux-tu expliquer ?

    Cordialement.

    Daniel

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire