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 :

Variable tableau à 2 dimensions "variables" [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Membre émérite Avatar de curt
    Homme Profil pro
    Ingénieur Etudes
    Inscrit en
    Mars 2006
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Etudes
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 566
    Points : 2 525
    Points
    2 525
    Par défaut Variable tableau à 2 dimensions "variables"
    Bonsoir à tous,

    J'ai une variable tableau à 2 dimensions dont le nombre de lignes et de colonnes varient.
    J'ai bien en tête que le terme PRESERVE utilisé lors d'un REDIM ne peut se faire que sur la dernière dimension (les colonnes de mon tableau en l'occurrence)

    J'ai réalisé le test ci-dessous :
    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
    Option Explicit
     
    Sub test()
     
    Dim tableau()
    Dim i As Integer
    Dim j As Integer
    Dim Ligne As Integer
    Dim Colonne As Integer
     
        Ligne = 10
        Colonne = 15
     
    ReDim tableau(Ligne, Colonne)
     
        For i = 1 To Ligne
            For j = 1 To Colonne
                tableau(i, j) = i & " A " & j
            Cells(i, j) = tableau(i, j)
            Next j
     
        Next i
     
        Ligne = 10
        Colonne = 25
     
    ReDim Preserve tableau(Ligne, Colonne)
     
        For i = 1 To Ligne
            For j = 16 To Colonne
                tableau(i, j) = i & " B " & j
     
            Next j
        Next i
     
        For i = 1 To Ligne
            For j = 1 To Colonne
                Cells(i + 12, j) = tableau(i, j)
            Next j
        Next i
     
    End Sub
    Mais si je modifice la valeur de la variable Ligne, j'obtiens évidemment une erreur.

    Question : Comment procéder pour que cette variable tableau puisse "évoluer" dans ces deux dimensions tout en conservant les données qu'il contient déjà.

    Bonne soirée.
    Curt
    Pas de demande par MP, sinon j'correctionne plus, j'dynamite, j'disperse, j'ventile !!!
    ---------------------------------------------------------------------
    Vous avez un talent insoupçonné... Faites-en profitez les autres. Un p'tit CLIC pour une grande cause.
    Et si vous faisiez un bon geste en 2024 ? Soyez utile, ça vous changera ! Moi, ça m’a changé !

  2. #2
    Membre extrêmement actif Avatar de mjpmjp
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    1 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2012
    Messages : 1 133
    Points : 1 441
    Points
    1 441
    Par défaut
    bonjour,
    tu sépares en 2 tablo 1dim , tu redimensionnes , tu recolles dans tablo 2dim

    @+JP
    Caractéristiques (WEB) phpMyAdmin 4-74 , PHP 5-631 , Apache 2-427 , MySQL 5-719
    Présentation NAS DS-3615xs + 20Go , DSM 6.1.6-15266 Up1 , 12 * WD 4To WD4000F9YZ (10 raid 6+ )+(2 raid 1+) , LinkSys comutateur-switch lgs528p-eu , Onduleur UPS 720W Power Boxx Lcd (4*UPS + 4*MOD)
    Mes contributions (EXCEL) Form GRAPHIQUE: Gestion des boutons , Liste Onglet dynamique...GESTION de FILM

  3. #3
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour
    Regarde ce que fait ceci :
    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
    Dim tableau()
      Dim i As Integer
      Dim j As Integer
      Dim Ligne As Integer
      Dim Colonne As Integer
      Ligne = 2
      Colonne = 4
      ReDim tableau(1 To Ligne, 1 To Colonne)
      For i = 1 To Ligne
        For j = 1 To Colonne
           tableau(i, j) = i & " A " & j
        Next j
      Next i
      tableau = WorksheetFunction.Transpose(tableau)
      MsgBox UBound(tableau, 1) & vbCrLf & UBound(tableau, 2)
      ReDim Preserve tableau(1 To Colonne, 1 To 10)
      tableau = WorksheetFunction.Transpose(tableau)
      For i = 3 To 10
         For j = 1 To 4
           tableau(i, j) = i & " A " & j
         Next
      Next
      Range(Cells(1, 1), Cells(10, 4)).Value = tableau
    Puis regarde le propos de la méthode Transpose (rubrique WorksheetFunction.Transpose, méthode de ton aide vba interne)
    Il ne te reste plus qu'à analyser ce bout de code , puis de l'adapter à ton gré.

    EDIT : je comprends mal le choix ici fait d'ouvrir cette discussion dans la rubrique "Conception".
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  4. #4
    Membre émérite Avatar de curt
    Homme Profil pro
    Ingénieur Etudes
    Inscrit en
    Mars 2006
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Etudes
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 566
    Points : 2 525
    Points
    2 525
    Par défaut
    Bonjour à vous deux,

    merci pour les solutions. S'agissant d'un tableau existant la fonction TRANSPOSE est parfait.
    Du coup, j'ai même vu qu'on pouvait l'utiliser dans la feuille de calcul avec une validation matricielle.

    PS : Pour ce qui est de la question dans la rubrique CONCEPTION, j'ai pensé qu'il s'agissait là d'une question de conception et non d'un problème de formule ou de prog.

    Bon we
    Curt
    Pas de demande par MP, sinon j'correctionne plus, j'dynamite, j'disperse, j'ventile !!!
    ---------------------------------------------------------------------
    Vous avez un talent insoupçonné... Faites-en profitez les autres. Un p'tit CLIC pour une grande cause.
    Et si vous faisiez un bon geste en 2024 ? Soyez utile, ça vous changera ! Moi, ça m’a changé !

  5. #5
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Index du forum: Conception

    Questions relatives à la conception d'un classeur Excel (structure, organisation, protection, sécurisation, ...)
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

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

Discussions similaires

  1. Savoir exploiter une variable tableau avec une sous variable tableau
    Par patricktoulon dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 03/02/2016, 22h26
  2. variable tableau 2 dimensions et redim preserve
    Par dawood dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 03/01/2009, 15h11
  3. Réponses: 5
    Dernier message: 26/03/2008, 21h48

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