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 tableau dynamique deux dimensions [Toutes versions]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    finance
    Inscrit en
    Février 2015
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : finance
    Secteur : Finance

    Informations forums :
    Inscription : Février 2015
    Messages : 26
    Par défaut VBA tableau dynamique deux dimensions
    Bonjour,

    je rempli un premier tableau mytab1 a partir d'une plage de cellules. Ensuite je dois remplir un deuxieme tableau mytab2 à partir de mytab1 en ayant éliminé les doublons de la première colonne de mytab1.
    pour cela je dois surement faire un redim preserve car le nombre de ligne de mytab2 est dynamique et le nombre de colonnes est toujours égale au nombre de colonne de mytab1. les 2 tableaux sont en option base 1.
    Je n'arrive pas a comprendre pourquoi j'ai un message d'erreur "subscript out of range". Pouvez vous m'aider svp?
    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
    Dim mytab1() As Variant
    Dim mytab2() As Variant
    Dim i As Integer
     
    Dim j As Integer
    Dim k As Integer
    Dim doublon As Boolean
     
    Dim iCount As Integer
    Dim kmax As Integer
     
    temp1 = Timer
     
    k = 1
    mytab1 = Range("A2:AC497").Value
    kmax = UBound(mytab1, 2)
    doublon = False
     
    For i = 1 To UBound(mytab1, 1)
        doublon = False
        For j = i + 1 To UBound(mytab1, 1)
            If mytab1(i, 1) = mytab1(j, 1) Then
                doublon = True
            End If
        Next j
     
        If doublon = False Then
             iCount = iCount + 1
                For k = 1 To UBound(mytab1, 2)      
                    ReDim Preserve mytab2(1 To iCount, 1 To kmax)
                    mytab2(iCount, k) = mytab1(i, k)
                    k = k + 1
                Next k
        End If
    Next i
     
    Range(Sheets("TEST").Cells(1, 1), Sheets("TEST").Cells(iCount, kmax)) = mytab2

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    peux-tu reformuler le comportement attendu ?

    Plus précisément : si tu as deux lignes qui ont la même valeur en colonne 1 ... tu conserves les deux lignes ou une seule ? Laquelle des deux ? Ou alors autre comportement ?

  3. #3
    Membre averti
    Homme Profil pro
    finance
    Inscrit en
    Février 2015
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : finance
    Secteur : Finance

    Informations forums :
    Inscription : Février 2015
    Messages : 26
    Par défaut
    je conserve la premiere ligne de mytab1 qu'il rencontre dans la colonne 1 pour l'inserer dans mytab2

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Voici une proposition un peu différente :

    - on copie toutes les données dans une nouvelle feuille
    - on utilise l'outil "nettoyer les doublons" (removeduplicates) sur la colonne 1
    - on a plus qu'à récupérer la plage dédoublonnée
    - on supprime la nouvelle feuille

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub toto()
    Dim Tabl()
     
    With ThisWorkbook.Worksheets.Add
       Thisworkbook .Worksheets("MaFeuille").UsedRange.Resize(Feuil1.UsedRange.Rows.Count - 1, Feuil1.UsedRange.Columns.Count).Offset(1, 0).Copy .Cells(1, 1)
     
        With .Cells(1, 1)
            .CurrentRegion.RemoveDuplicates 1
            Tabl = .CurrentRegion.Value
        End With
        Application.DisplayAlerts = False: .Delete: Application.DisplayAlerts = True
    End With
     
    End Sub

  5. #5
    Membre averti
    Homme Profil pro
    finance
    Inscrit en
    Février 2015
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : finance
    Secteur : Finance

    Informations forums :
    Inscription : Février 2015
    Messages : 26
    Par défaut
    merci pour ta réponse mais je souhaite utiliser exclusivement des tableaux car je dois également y importer les données de toutes les colonnes et j'ai plein de calculs ensuite à effectuer (je ne veux pas de dico non plus). merci

  6. #6
    Membre chevronné
    Homme Profil pro
    Alternant
    Inscrit en
    Décembre 2015
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Alternant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 413
    Par défaut
    Bonjour,

    Avec la solution de joe tu as toujours un tableau que je sache, du coup je comprends pas pourquoi tu ne souhaites pas l'utiliser

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

Discussions similaires

  1. Tableau dynamique deux dimensions de class
    Par Hyssgrif dans le forum C++
    Réponses: 3
    Dernier message: 17/04/2015, 15h22
  2. copier un tableau dynamique à deux dimensions
    Par Benoit_T dans le forum Débuter
    Réponses: 27
    Dernier message: 09/11/2009, 11h29
  3. Tableau dynamique à deux dimensions
    Par Neuromancien2 dans le forum ASP
    Réponses: 4
    Dernier message: 13/06/2007, 18h12
  4. Tableau dynamique à deux dimensions
    Par David Fouejio dans le forum MFC
    Réponses: 4
    Dernier message: 05/03/2007, 09h37
  5. Réponses: 1
    Dernier message: 09/03/2006, 17h25

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