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

Macros et VBA Excel Discussion :

[Algo] Modification de tableau


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Ania
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 155
    Par défaut [Algo] Modification de tableau
    Bonjour à tous,

    Mon problème se porte plus sur de l'algorithme que du code, je vous explique la situation :

    J'ai une form où j'entre les différentes données d'une pièce (étage, nom, volume...), le tout est stocké dans un tableau avec un type personnalisé et chaque apparait dans la liste de la form.

    Pour une facilité d'utilisation, je souhaite pouvoir modifier les caractéristiques de plusieurs pièces en même temps.
    Pour cela j'utilise les cases à cochées situées à coté de chaque variable (cf image) et une fois la case "Modifier" pressée je change les valeurs, en récupérant le nom de chaque pièce et le nombre d'élément à modifier.

    Le problème se pose pour changer la valeur de l'étage, les éléments de la liste sont classés par étage (RDC, R+1, R+2...), car je n'arrive à visualiser une méthode qui me permette de garder l'ordre initial (des pièces non modifiées) et d'insérer les autres au bon endroit.

    Un petit exemple :
    Tableau Zone Zone_A_Modifier
    R-1 Bureau Bureau
    R-1 Buanderie Mezzanine
    R-0 Séjour - Salon
    R-0 Cuisine
    R+1 Chambre 1
    R+1 Chambre 2
    R+1 Chambre 3
    R+2 Grenier
    R+2 Mezzanine

    Dans cet exemple, il faut que les pièces Bureau et mezzanine soit déplacer après Chambre 3 pour obtenir

    Tableau Zone
    R-1 Buanderie
    R-0 Séjour - Salon
    R-0 Cuisine
    R+1 Chambre 1
    R+1 Chambre 2
    R+1 Chambre 3
    R+1 Bureau
    R+1 Mezzanine
    R+2 Grenier

    Voilà j'espère avoir été suffisamment clair avec tout ça ?
    Avez-vous des idées d'algorithme ?
    Images attachées Images attachées  

  2. #2
    Membre confirmé Avatar de Ania
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 155
    Par défaut
    Ca y est j'ai trouvé fallait pas que je me borne aux boucles FOR
    Ah bah non j'ai encore voulu allez trop vite

  3. #3
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Peux-tu expliquer une ou deux choses ?
    Veux "seulement" changer les pièces d'étage ?
    Quand tu as deux pièces au même étage, peut-ont en déduire qu'il faut les séparer ou systématiquement supprimer les doublons ?
    R-1 Bureau Bureau
    R-1 Buanderie Mezzanine
    ...
    ...
    R+2 Mezzanine
    L'ordre de ta première liste est-il celui de la feuille de calculs ou simplement celui de ta liste dans l'userform ?
    Ta liste est-elle une listbox ou une textebox ?

  4. #4
    Membre confirmé Avatar de Ania
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 155
    Par défaut
    Merci de t'arreter sur mon cas

    L'ordre de ta première liste est-il celui de la feuille de calculs ou simplement
    C'est celui de la listbox de la form et également l'ordre de mon tableau qui est en mémoire

    Ta liste est-elle une listbox ou une textebox ?
    C'est une listbox

    Quand tu as deux pièces au même étage, peut-ont en déduire qu'il faut les séparer ou systématiquement supprimer les doublons ?
    Je saisis pas trop ta question, mais je veux juste déplacer la (les) zone(s)
    et donc ne pas avoir de doublons

    Suis-je suffisamment clair

  5. #5
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Dans l'exemple que tu as donnée tu as deux fois "bureau" et "Buanderie" associé à "Mezzanine". Que faut-il faire dans ce cas-là ?
    Sinon, je crois avoir compris ce que tu veux faire, c'est "simplement" déplacer chaque pièce vers le haut ou vers le bas de l'immeuble à l'aide des boutons Monter ou descendre.
    Tu confirmes ?

    Edit
    Je crois comprendre que tu utilises un tableau() auquel cas, il est assez facile de modifier l'index.
    Une sélection dans la liste donne l'index de cette sélection. "Monter" déplace l'index vers le zéro, "Descendre" vers le dernier indice.
    Pour le principe
    1 - On renseigne un tableau à l'aide de la liste "actuelle"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 0 to ListBox1.list.count -1
        Tablo(i) = Listbox1.list(i)
    Next
    2 - Sélection d'une pièce -> Ex : La sélection donne Index = 4
    3 - Sélection du bouton "Monter" -> NewIndex = Listbox1.Listindex - 1
    4 - Mémo de la valeur sélectionnée -> Temp = Tablo(Listbox1.Listindex)
    5 - Affectation de la valeur au nouvel indice du tableau ->Tablo(NewIndex) = Tablo(Listbox1.Listindex)
    6 - Affectation de la valeur inférieur au nouvel index -> Tablo(Listbox1.Listindex) = Temp
    Ensuite, tu réinitialises la liste avec le nouveau tableau

    Cela ne règle pas le pb des doubles pièces évoqué en début de message

  6. #6
    Membre confirmé Avatar de Ania
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 155
    Par défaut
    Dans l'exemple que tu as donnée tu as deux fois "bureau" et "Buanderie" associé à "Mezzanine". Que faut-il faire dans ce cas-là ?
    Pardon je n'avais pas relut mon post, il y a en fait 2 tableaux (les espaces sont partis une fois posté)
    Le premier contenant les données des zones
    Tableau Zone
    R-1 Bureau
    R-1 Buanderie
    R-0 Séjour - Salon
    R-0 Cuisine
    R+1 Chambre 1
    R+1 Chambre 2
    R+1 Chambre 3
    R+2 Grenier
    R+2 Mezzanine

    le Second contenant seulement le nom des zones à modifier
    Zone_A_Modifier
    Bureau
    Mezzanine

    Sinon, je crois avoir compris ce que tu veux faire, c'est "simplement" déplacer chaque pièce vers le haut ou vers le bas de l'immeuble à l'aide des boutons Monter ou descendre.
    Tu confirmes ?
    Non, en fait il arrive que que je rentre les données sans trop faire attention.
    Donc mes toutes mes pièces se retrouvent au RDC alors que certaines sont au R+1 et d'autre au R+2.
    Je souhaite en fait modifier la donnée 'étage' de plusieurs pièces en même temps.
    Pour cela je sélectionne les pièces à modifier (ici Bureau et Mezzanine) dans la listbox, ensuite je modifie l'étage dans la liste déroulante (en haut à gauche), je coche la case et j'appuie sur 'Modifier'

    et voila ce que doit donner le résultat : les pièces Bureau et mezzanine soit déplacer après Chambre 3 pour obtenir
    Tableau Zone
    R-1 Buanderie
    R-0 Séjour - Salon
    R-0 Cuisine
    R+1 Chambre 1
    R+1 Chambre 2
    R+1 Chambre 3
    R+1 Bureau
    R+1 Mezzanine
    R+2 Grenier

    C'est assez clair, vois-tu ce que je veux faire

  7. #7
    Membre confirmé Avatar de Ania
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 155
    Par défaut
    Bon on est pas du tout sur la même longueur d'onde, il n'y a pas de problème de double pièce (c'est une erreur de mise en forme)

    Pour ajouter une pièce j'entre ses différentes caractéristiques (Etage, nom, surface, distribution...) et je valide avec le bouton 'Ajouter' alors le nom de la pièce s'affiche dans la listbox et toutes les caractéristiques sont enregistrées dans mon tableau 'Zone()'.

    Je souhaite pouvoir modifier une ou plusieurs caractéristiques (en les sélectionnant avec les cases à cocher) d'une ou plusieurs pièces(que je sélectionne dans la listbox).

    Jusqu'à maintenant pour modifier les autres caractéristiques, j'isole le nom des pièces sélectionnées dans un nouveau tableau 'ZoneSelectionnees()'.
    Ensuite je recherche dans 'Zone()' les éléments à modifier avec une double boucle for :
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    Function RemplacerPlusieursElements(N°Element As Integer, 
      With ufDonnéesZone
     
        For i = 0 To UBound(Zone)
          'Remplacement des éléments cochés
          For j = 0 To NbElementsSelectionnes - 1
     
            If ZoneSelectionnees(j) = Zone(i).Nom Then
              If .ckbHmin = True Then
                Zone(i).HauteurMin = .tbHauteurMin
                Zone(i).Volume = ((Zone(i).HauteurMax + Zone(i).HauteurMin) / 2) * Zone(i).surface
                Zone(i).GV = Zone(i).Volume * Zone(i).CoeffG
                Zone(i).Deper = Zone(i).GV * Zone(i).T°_Ambiante * T°Ext
              End If
              If .ckbHmax = True Then
                Zone(i).HauteurMax = .tbHauteurMax
                Zone(i).Volume = ((Zone(i).HauteurMax + Zone(i).HauteurMin) / 2) * Zone(i).surface
                Zone(i).GV = Zone(i).Volume * Zone(i).CoeffG
                Zone(i).Deper = Zone(i).GV * Zone(i).T°_Ambiante * T°Ext
              End If
              If .ckbDistri1 = True Then
                Zone(i).DistributionPrimaire = .cbDistributionPrimaire
                Zone(i).modeleDistribution = ""
                Zone(i).NbModele = 0
              End If
              If .ckbDistri2 = True Then
                Zone(i).DistributionSecondaire = .cbDistributionSecondaire
                Zone(i).modeleDistribution = ""
                Zone(i).NbModele = 0
              End If
              If .ckbIsolant = True And _
                (.cbDistributionPrimaire = "Plancher Chauffant" Or _
                .cbDistributionSecondaire = "Plancher Chauffant") Then _
                Zone(i).modeleDistribution = .ldEpaisseurIsoPC
     
              If .ckbIsolant = True Then _
                Zone(i).modeleDistribution = .ldEpaisseurIsoPC
     
              If .ckbCoeffG = True Then
                Zone(i).CoeffG = .tbCoeffG
                Zone(i).GV = Zone(i).CoeffG * Zone(i).Volume
              End If
              If .ckbT°Ambiante = True Then _
                Zone(i).T°_Ambiante = .tbT_ambiante
     
            End If
          Next j
        Next i
      End With  
    End Function
    Seulement je souhaite conserver dans mon tableau 'Zone()' (et donc dans ma listbox) un ordre croissant au niveau des étages d'abord R-1, ensuite R-0, puis R+1 etc... mais un changement de la caractéristique 'Etage' entraine une modification de l'ordre du tableau et c'est cette partie que je n'arrive pas mettre en oeuvre dans ma double boucle For car je ne peux pas modifier dans les boucle For l'ordre du tableau sinon je désorganise tout.

    Toutes mes excuses pour être si brouillon , je ne veux pas mettre trop d'information pour ne pas noyer la lecture.
    J'espère que cette fois-ci nous allons pouvoir accorder nos violons...

  8. #8
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    En effet, nos messages se sont croisées. J'étais en train de rédiger mon message pendant que tu postais ta réponse.
    Je relis tout.
    A+

    Pour simplifier le pb tu ne devrais pas permettre la multi-sélection.
    Sans multi-sélection, le pb "semble" se résume à réinitialiser ta liste en fonction de l'étage sélectionné pour une pièce sélectionnée. Ai-je bien compris cette fois-ci ?

Discussions similaires

  1. modification de tableau
    Par DrDam dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 12/09/2008, 11h24
  2. [algo]trier un tableau
    Par vietfun69 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 14/02/2006, 11h26

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