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 :

VBA - Suppression de l'élément d'un tableau dynamique à 2 dimensions


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 21
    Points : 17
    Points
    17
    Par défaut VBA - Suppression de l'élément d'un tableau dynamique à 2 dimensions
    Re à Tous,
    Est-ce que vous pourriez m'aider à adapter ce script que j'ai trouvé pour supprimer l'élément d'un tableau à 2 dimensions ?
    Je ne maitrise toujours pas l'utilisation du Redim Preserve.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Public Sub DeleteElement(ByRef WhatArray As Variant, ByVal WhichElement As Integer)
     
    Dim ndx As Integer
     
    For ndx = LBound(WhatArray) + WhichElement To UBound(WhatArray)        WhatArray(ndx - 1) = WhatArray(ndx)
    Next
    ReDim Preserve WhatArray(UBound(WhatArray) - 1)          
    End Sub
    Comment écrire une boucle tant que tableau non vide ? (suite à utilisation de la procedure précédente)

    Merci

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

    Je ne vois pas deux dimensions à votre tableau.

    Vous trouverez, ci-joint, un exemple de code sur les matrices avec une macro qui charge une matrice et une autre qui la modifie.

    Le résultat apparaît dans la diapo jointe.

    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    Option Explicit
     
    Private Matrice1() As Variant
    Private Matrice2() As Variant
     
    Private LigneDeTitre As Long
    Private DerniereLigne As Long
    Private I As Long
    Private J As Long
     
    Private Cellule As Range
     
    Private ContenuMatrice1Avant As String
    Private ContenuMatrice1Apres As String
     
    Sub ChargementMatrice()
     
     
     
          ' Chargement de la matrice 1 à deux dimensions (X colonnes, Y lignes)
            LigneDeTitre = 1
            DerniereLigne = Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row
            Range(Cells(LigneDeTitre + 1, 1), Cells(DerniereLigne, 1)).Select
     
            ReDim Matrice1(1, Selection.Count - 1)  ' X = deux colonnes 0 et 1
     
            I = 0
            ContenuMatrice1Avant = "Matrice 1 avant" & Chr(10)
            For Each Cellule In Selection
               Matrice1(0, I) = Cellule
               Matrice1(1, I) = Cellule.Offset(0, 1)
               ContenuMatrice1Avant = ContenuMatrice1Avant & Chr(10) & "  " & Matrice1(0, I)
               I = I + 1
            Next Cellule
     
            ' La matrice est chargée
     
            Call ModificationMatrice1
     
            MsgBox (ContenuMatrice1Avant & Chr(10) & Chr(10) & Chr(10) & ContenuMatrice1Apres)
     
    End Sub
     
     
    Sub ModificationMatrice1()
     
     
        J = 0
        For I = LBound(Matrice1, 2) To UBound(Matrice1, 2)
     
            Select Case Matrice1(0, I)
     
                Case "Désignation de l'objet", "Société", "Nature comptable", "Désignation nature comptable", "CCS", "Objet partenaire"
     
                  ReDim Preserve Matrice2(1, J)
                  Matrice2(0, J) = Matrice1(0, I)
                  Matrice2(1, J) = Matrice1(1, I)
                  J = J + 1
            End Select
     
        Next I
     
        ReDim Matrice1(1, UBound(Matrice2, 2))
        Matrice1 = Matrice2
     
        ContenuMatrice1Apres = "Matrice 1 après" & Chr(10)
        For I = LBound(Matrice1, 2) To UBound(Matrice1, 2)
     
                ContenuMatrice1Apres = ContenuMatrice1Apres & Chr(10) & "  " & Matrice1(0, I)
     
        Next I
     
    End Sub

    Dans une matrice à N dimensions, Redim Preserve n'agit que sur la dernière dimension. Selon que vous avez des lignes ou des colonnes à supprimer, il faut organiser votre matrice sur la dimension qui va changer. Exemple Matrice1(X,Y) c'est Y qui change Matrice1(Y,X), c'est X qui varie.

    Par ailleurs, dans la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       For I = LBound(Matrice1, 2) To UBound(Matrice1, 2)
    le 2 indique la dimension de la matrice qui est balayée. Si j'avais mis 1, cela aurait été les éléments de X qui auraient été testés dans une matrice(X,Y).



    Enfin, à votre place, je n'aurais pas utilisé cela. J'aurais ajouté un élément à X lors de l'initialisation de la matrice pour en faire un champ Flag.

    Ce champ est initialisé à blanc. Si par la suite une condition doit exclure l'élément dans une boucle, je remplis le flag avec n'importe quel caractère.

    Cordialement.

Discussions similaires

  1. Suppression élément d'un tableau dynamique
    Par gigacool1994 dans le forum C++
    Réponses: 7
    Dernier message: 08/01/2013, 23h52
  2. Suppression de plusieurs éléments dans un tableau
    Par oitsuki dans le forum jQuery
    Réponses: 3
    Dernier message: 27/08/2012, 14h26
  3. KSH - Suppression d'un élément d'un tableau
    Par Cj_Dal dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 11/10/2010, 19h14
  4. Suppression d'un élément dans un tableau
    Par hammag dans le forum Langage
    Réponses: 1
    Dernier message: 25/06/2009, 15h30
  5. Réponses: 2
    Dernier message: 06/09/2007, 15h08

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