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 :

Scinder un tableau generé avec Array [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2018
    Messages : 3
    Par défaut Scinder un tableau generé avec Array
    Bonjour a tous,

    Je débute sur ce forum, je vais donc essayer d'être clair et concis

    Dans un classeur j'ai une série de données sur 3 colonnes (voir exemple joint) la colonne A correspond a un identifiant qui peut se répéter plusieurs fois.

    Avec une petite macro je récupère toutes les lignes correspondant a un identifiant et je les stocke dans une table pour les coller dans un 2eme classeur :

    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
     
    Sub coller()
     
    Set f = Sheets("Feuil1")
      mot = InputBox("Numéro Identifiant?")
      colonne = 1
     
      bd = f.Range("A1:C" & f.[A65000].End(xlUp).Row) 'selection derniere ligne
     
      For i = 1 To UBound(bd)
        If bd(i, colonne) Like mot Then tempe = tempe & i & ","
      Next i
     
            TLC = Application.Index(bd, Application.Transpose(Split(tempe, ",")), Array(3, 2))
     
    'Selection de mon 2eme classeur
     
        Workbooks("NW").Activate
        Sheets(mot).Select
     
     'Je colle ma table 
     
        Cells(ligne + 2, "C").Resize(UBound(TLC) - 1, UBound(TLC, 2)) = TLC
     
     
    End Sub
    Ca fonctionne j’obtiens ça :
    Nom : CO1.jpg
Affichages : 384
Taille : 29,6 Ko

    mais dans certains cas je me retrouve avec 200/300 lignes et pour des raisons de présentation et d'économie de papier je voudrais obtenir ça :

    Nom : CO2.jpg
Affichages : 368
Taille : 61,7 Ko

    Soit scinder ma table de donnée en 2 pour pouvoir l’insérer en C et D puis en E et F

    Le problème c’est que je maitrise mal la gestion des tables en VBA (en fait je maitrise mal VBA tout court !) et je ne sais pas par quel bout commencer.

    Si une âme charitable pouvais me mettre sur la voie ce serait génial.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre extrêmement actif
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Par défaut
    Bonjour,

    Exemple en PJ

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub DécoupeArrayBlocs()
      a = Range("A1:B20")
      Début = 1
      TailleBloc = 5
      décal = 0
      For Début = 1 To UBound(a) Step TailleBloc
        fin = Début + TailleBloc - 1
        b = Application.Index(a, Evaluate("Row(" & Début & ":" & fin & ")"), Application.Transpose(Evaluate("Row(1:" & UBound(a, 2) & ")")))
       [d2].Offset(, décal).Resize(UBound(b), UBound(b, 2)) = b
       décal = décal + 3
      Next
    End Sub
    Boisgontier

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2018
    Messages : 3
    Par défaut
    Merci boisgontier, je vais prendre le temps de comprendre ton code.

    Si je saisi, ton code permet de dimensionner la taille de la table (à 5 dans l'exemple) et ensuite de copier en décalant chaque bloc ainsi crée.

    Moi je cherche plutôt a couper en 2 une table d'enregistrement mais dont je ne connait pas la dimension à l'avance
    A 1ere vu cela ne répond pas complétement à ma question, mais cela me donne une piste de recherche, je peux peut-être compter le nombre d’enregistrement retourné et le divisé par 2 ce qui me donnerait la taille de mon bloc.
    Je vais creuser en ce sens.

    Merci encore

  4. #4
    Membre extrêmement actif
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Par défaut
    >A 1ere vu cela ne répond pas complétement à ma question, mais cela me donne une piste de recherche

    Pour couper en 2, il suffit de faire

    TailleBloc = UBound(a) \ 2

    Boisgontier

  5. #5
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    @ boisgontierjacques

    Il faudrait ajouter cette ligne après la ligne 5 au cas où la taille initial n'est pas divisible par la taille choisie des blocs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        If fin > UBound(a) Then fin = UBound(a)

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2018
    Messages : 3
    Par défaut
    Encore merci, effectivement il fallait y penser

    J'ai adapté la 1ere partie de ton code comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
      Debut = 1
      TailleBloc = UBound(TLC) / 2
     
      If Int(TailleBloc) - TailleBloc = 0 Then
      TailleBloc = UBound(TLC) / 2
      Else
      TailleBloc = (UBound(TLC) + 1) / 2
      End If
    Car si je ne conserve que l'entier de la division et que mon nombre est impair j'ai une erreur d’exécution

    Je m'attaque maintenant à comprendre la 2eme partie.

    Bonne soirée

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

Discussions similaires

  1. [PostgreSQL] PDO avec le format tableau de postgre ARRAY[]
    Par rawsrc dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 25/08/2011, 08h14
  2. Réponses: 6
    Dernier message: 09/03/2011, 11h43
  3. Creation tableau avec array
    Par Vascogil dans le forum SAS Base
    Réponses: 4
    Dernier message: 23/01/2008, 20h55
  4. [Tableaux] Tableau associatif avec des array
    Par Piccolo_son dans le forum Langage
    Réponses: 6
    Dernier message: 18/12/2007, 08h23
  5. Réponses: 2
    Dernier message: 03/11/2007, 11h24

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