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 :

Construire des tableaux de tableaux, ou des tableaux indicés


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2015
    Messages : 75
    Points : 57
    Points
    57
    Par défaut Construire des tableaux de tableaux, ou des tableaux indicés
    Bonjour à tous,

    1er post sur ce forum donc j'espère ne pas aller à l'encontre de certaines règles

    Je suis en plein développement d'une macro VBA qui fait pour l'instant du traitement/analyse de données : il s'agit de logistique d'interventions programmées dans de la maintenance, donc une ligne correspond à chaque fois à une intervention de maintenance.
    J'ai donc 2 classeurs en entrée manipulant les mêmes données, l'un étant celui de la semaine précédente, l'autre de la semaine suivante. Mon job est de comparer les 2, de mettre en évidence les nouvelles interventions apparues et celles qui ont été traitées (donc disparues).

    J'en viens à mon problème : ces interventions sont réparties sur 5 zones géographiques (donc 5 feuilles dans chaque classeur). Or mon travail d'analyse est le même sur chaque zone prise séparément.
    Je cherche donc à tout écrire en une fois et à l'appliquer aux 5 zones via une boucle "for ... next". Cela marche bien pour pas mal de variables, je construit à chaque fois un tableau qui les contient, leur position dans le tableau correspondant à la zone à traiter (une variable de comptage des interventions par exemple : lmacro1, lmacro2, ... --> tlmacro() )

    Le problème est que, pour une zone donnée, il me faut aussi construire un tableau contenant les nouvelles interventions et un autre tableau contenant les interventions traitées ( tnew() et tend() )

    Y-a-t-il donc un moyen pour obtenir quelque chose du genre : tnew(i)(j), où i désignerait la zone parmi les 5 ?

    J'ai déjà pas mal cherché sur le net sans vraiment trouver : ma seule piste est de construire un Array contenant mes tableaux (tnew = Array(tnew1, tnew2, etc)) mais je me suis rendu compte en faisant des tests que si je rentre des valeurs en manipulant l'array (tnew(1)(1) = 10) cela ne se répercute pas sur les tableaux qu'il contient (tnew1(1) = ?) !!

    J remercie toute aide, je commence à chauffer du cerveau

  2. #2
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2015
    Messages : 75
    Points : 57
    Points
    57
    Par défaut
    Je me permet de UP, la piste que j'évoque à la fin de mon dernier message semble convenir à ce que je souhaite faire mais je reste avec une question de curiosité :
    j'ai mes 5 tableaux tnew1, tnew2, etc ... et mon tableau de tableaux tnew
    Quand je rentre une valeur dans tnew1 ( tnew1(1) = 10 ), celle-ci n'est pas enregistrée dans tnew(1)(1).
    De la même manière, si je rentre tnew(1)(1) = 10, cela n'est pas enregistré dans tnew1(1).

    Comment cela se fait-il ? Comment est fait le lien entre les tableaux et le tableau de tableaux ?

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Points : 1 219
    Points
    1 219
    Par défaut
    Bonjour,

    Peut être une piste en employant des Types définis par l'utilisateur.
    Par exemple :
    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
    Type structZone
      Zone1 As Variant
      Zone2 As Variant
      Zone3 As Variant
      Zone4 As Variant
      Zone5 As Variant
    End Type
     
    Type structClasseur
      Zones As structZone
    End Type
     
     
    Sub aa()
    Dim Classeurs(1 To 2) As structClasseur
     
    With Classeurs(1).Zones
      '--- Monte les données de la région courante à partir de A1
      '--- d'un seul coup dans le Variant qui se comporte comme un
      '--- tableau à 2 dimensions
      .Zone1 = Sheets("Zone1").[a1].CurrentRegion
      .Zone2 = Sheets("Zone2").[a1].CurrentRegion
      .Zone3 = Sheets("Zone3").[a1].CurrentRegion
     
      '--- Ubound donne la dimension haute
      '--- , 1) sont les lignes
      '--- , 2) sont les colonnes
      MsgBox "Nb lignes : " & UBound(.Zone1, 1) & vbLf & "Nb colonnes : " & UBound(.Zone1, 2)
     
      MsgBox "Nb lignes : " & UBound(.Zone2, 1) & vbLf & "Nb colonnes : " & UBound(.Zone2, 2)
     
      MsgBox "Nb lignes : " & UBound(.Zone3, 1) & vbLf & "Nb colonnes : " & UBound(.Zone3, 2)
     
      '--- On peut balayer chaque .ZoneX avec une boucle sur les lignes et une autre sur les colonnes
      Dim i&
      Dim j&
      For i& = 1 To UBound(.Zone1, 1) 'les lignes
        For j& = 1 To UBound(.Zone1, 2) 'les colonnes
          'exemple
          If i& = 5 And j& = 3 Then
            MsgBox .Zone1(i&, j&)
          End If
          '''''''''
        Next j&
      Next i&
    End With
    End Sub
    Fichiers attachés Fichiers attachés

  4. #4
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    Salut

    hum, pas sur d'avoir tout compris mais il suffit de faire ta déclaration de tableau comme ça je pense

    Comme ça tu as 5 variable (de 0 à 4) qui représentent tes 5 zones. Ces variables étant de type variant, tu les utilises ensuite pour stocker tes tableaux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    'On traite la zone 1
    TNew(0) = Array(...,...,...)
     
    'La zone 2
    TNew(1) = Array(...,...,...)

    Après sans voir le code ça n'est pas évident, je dirais que tu devrais te renseigner sur la création de tableau et sur Redim Preserve en particulier, il y a un très bon tuto de SilkyRoad.

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Je n'aurais pas fait exactement comme PMO mais dans le même esprit.

    J'aurais utiliser un dictionnaire pour recenser l'existant de mes tableaux, ainsi si une valeur se trouve a la fois dans avant et après cela signifie qu'elle n'a pas été traitée; si elle est dans avant et pas dans après elle a été traitée; si elle n'est pas dans avant mais dans après elle es nouvelle!

    Avant et après étant des variables de mon type!

  6. #6
    Membre expérimenté
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    747
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 747
    Points : 1 332
    Points
    1 332
    Par défaut
    Bonjour,

    Double discussion sur le sujet, il me semble
    http://www.developpez.net/forums/d15...ux-c-possible/

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2015
    Messages : 75
    Points : 57
    Points
    57
    Par défaut
    Effectivement, j'ai sans le faire exprès (problème de connection pendant la rédaction du sujet) fait un doublon que j'ai signalé aux admins, faute de pouvoir le supprimer moi-même (du moins je n'ai pas trouvé)
    Merci de vos réponse, la façon dont j'ai résolu mon problème est dans l'autre post !
    Merci encore

  8. #8
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par MobyKDIK Voir le message
    Effectivement, j'ai sans le faire exprès (problème de connection pendant la rédaction du sujet) fait un doublon que j'ai signalé aux admins, faute de pouvoir le supprimer moi-même (du moins je n'ai pas trouvé)
    Merci de vos réponse, la façon dont j'ai résolu mon problème est dans l'autre post !
    Merci encore
    Tu click sur modifier le message; dans la première partie de la page tu coche supprimer tu entre le motif doublon et tu valides!
    Images attachées Images attachées  

  9. #9
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2015
    Messages : 75
    Points : 57
    Points
    57
    Par défaut
    Je te remercie et je note, je n'avais pas remarqué cette option !

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/08/2009, 13h41
  2. Réponses: 14
    Dernier message: 24/10/2006, 06h51
  3. Réponses: 10
    Dernier message: 13/02/2006, 15h29
  4. [Tableaux] Mise en relation des membres ?
    Par isa150183 dans le forum Langage
    Réponses: 9
    Dernier message: 20/12/2005, 23h36
  5. Réponses: 6
    Dernier message: 19/12/2005, 13h41

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