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 :

Comment créer un tableau à dimension [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 172
    Points : 73
    Points
    73
    Par défaut Comment créer un tableau à dimension
    Bonjour

    Je suis novice sur la programmation VBA.

    Objectif :
    J'ai crée une macro VBA dont le but est de parcourir chaque fichier Excel .
    L'application lit le contenu de chaque fichier receptionnée . Elle en extrait quelques informations d'un onglet dont elle en a besoin . Cet extraction se fait sous forme tabulaire.

    Problematique :
    Je vous ai joins un fichier excel qui correspond à un exemple de fichier.
    Sur ce fichier contient un exemple du tableau de restitution que je souhaite obtenir et l'exemple de tableau de restitution de ce que j'obtiens.


    Ma solution
    L'algoritme que je souhaite mettre en place est :


    ' compter le nombre de cellule non vides dans la ligne correspondante
    --> j'ai pu le faire par :
    nbNonEmptyCell = WorksheetFunction.CountA(Worksheets(Current.Name).Rows(6))

    ' Constituer un tableau à 2 dimensions :
    tableau de valeur : tab2D [ G, Projet 1; I,Projet2]
    ceci je ne sais pas comment le faire en vba

    ' Faire la boucle qui commence par G et qui finit par le nombre d'element dans le tableau de valeur tab2D


    ' appeller la methode Transpose

    voici le code que réaliser :
    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
     
    Sub Transpose(SheetName As String)
        Dim a As Long
        Dim b As Long
        Dim i As Long
        a = Sheets(SheetName).UsedRange.Rows.Count
        b = 7
            For i = 1 To a Step 20
                Sheets(SheetName).Range("G" & i & ":G" & i + 20).Copy
                Windows("Exple").Activate
                Sheets("Feuil2").Select
                Sheets("Feuil2").Range("b" & b).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
                b = b + 1
            Next i
    End Sub
    J'ai un probleme c'est que le code ne permet que de lire la premiere colonne or j'ai des colonnes alternée


    J'espere que j'ai été à peu près clair .
    J'ai quelque probleme pour finir mon application mais je n'arrive pas à trouver le bout du chemin Pouvez vous m'aider ?
    Merci d'avance
    Stardeus.

    PS : Je vous joins le fichier excel de référence
    Fichiers attachés Fichiers attachés

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 764
    Points : 28 622
    Points
    28 622
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Citation Envoyé par stardeus Voir le message
    ' Constituer un tableau à 2 dimensions :
    tableau de valeur : tab2D [ G, Projet 1; I,Projet2]
    ceci je ne sais pas comment le faire en vba
    A lire avant tout Conceptualisation des variables tableau en VBA et Application à l'optimisation du code sous Excel et Utiliser les variables tableaux en VBA Excel
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 172
    Points : 73
    Points
    73
    Par défaut besoin d'aide sur un algorithme pour l'alimenter des données
    Bonjour

    Je souhaiterai avoir un avis sur l'algo et savoir son niveau de faisabilité.

    Voici ce que je compte faire
    Je crée un tabcolonne("G,H,-->"ZZ")

    Compter le nombre de cellule non vide ( voir exple : y en a 3)
    Insérer les valeurs TabProjet (0,numProj1,NumProj2)
    pour i =1 jusqua tabProjet.Count
    lance la methodologie transpose

    'ici j'ai un probleme , l'insertion ne se fait de la donnée ne se fait que sur une seule colonne or je souhaite inserer des données qui se situe dans la premiere colonne mais aussi dans la 2 colonne ( je me demande si c'est réalisable ce cas la pour des colonnes fusionnées )

    fin de la boucle pour

    Pourriez vous me dire si mon algo est correct si jamais ce n'est pas le cas ou mon explication n'est pas claire faites moi signe

    merci d'avance
    stardeus

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 172
    Points : 73
    Points
    73
    Par défaut Lecture sur les cellules fusionnées
    Bonsoir ,

    J'ai une colonne fusionnée en 2 colonnes
    Lorsque je souhaite lire le contenu de la colonne fusionnée j'obtiens ;

    Valeur de la cellule : NomProjA ,
    Valeur de la cellule : ,
    Valeur de la cellule : NomProjB,
    Valeur de la cellule : ,




    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     'Créer un tableau contenant les valeurs
         Dim ObjCell As Object
         For Each ObjCell In Range("G1:J65535").Cells
                ObjCell.Value = CStr(ObjCell.Value)
                MsgBox ("valeur de la cellule : " + Cstr(ObjCell.Value))
         Next
    J'essaie de lire le contenu de la colonne et non de la ligne mais je ne parviens pas à le faire

    Savez vous comment je peux faire pour lire le contenu d'une colonne par colonne et non de ligne par ligne

    car ensuite je tenterai de récupere le contenu de la cellule pour la replacer dans une autre tableau

    Merci d'avance
    stardeus

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 764
    Points : 28 622
    Points
    28 622
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    As-tu consulté les tutoriels ?
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 172
    Points : 73
    Points
    73
    Par défaut
    As-tu consulté les tutoriels ?
    oui j'ai consulté les tutoriel , j'ai egalement lu cet article

    http://excel.developpez.com/actu/476...lles-methodes/

    Cet article m'a permit de voir comment parcourir lire les colonnes
    mais je ne parviens pas à faire ce que je souhaite

    Je m'explique :
    j'ai une colonne [ A B ] [C D]
    row 1 : [ P1 ] [ P2 ]
    row 2 : [ toto] [tata]
    row 3 : [titi , tatta] [tutu, toto]

    restitution a faire :
    nom projet | libelle projet | titre 1 | titre 2
    ------------------------------------------------
    P1 | toto | titi | tata
    P2 | tata | tutu | toto

    actuellement j'ai un affichage qui ne correspond a ce que je veux
    j'obtiens ceci
    P1,"",toto,"",titi,tata
    P2,"", tata,"",tutu,toto

    j'ai des cellules vides car j'interprete la colonne en 2 colonnes et non en une seule colonne

    voici ce que je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Sub test()
        Dim col As Range, C As Range
        For Each col In Range("G1:Z2000").Columns
            For Each C In col.Cells
                tot = tot + C.Value
                ' CopieCell (ValCell)
               MsgBox ("valeur colonne :" + tot)
            Next
        Next
    End Sub
    Je pense désormais a créer une methode pour faire la copie de la cellule vers les cordonnées que je souhaite

    stardeus

  7. #7
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 764
    Points : 28 622
    Points
    28 622
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Tu as écris
    J'ai une colonne fusionnée en 2 colonnes
    Lorsque je souhaite lire le contenu de la colonne fusionnée j'obtiens ;
    Valeur de la cellule : NomProjA ,
    Valeur de la cellule : ,
    Valeur de la cellule : NomProjB,
    Valeur de la cellule : ,
    Imaginons que tu fusionnes les cellules A2:B2 et que la valeur de la plage ainsi fusionnée est égal à Toto. Cette valeur est en réalité sur la cellule A2.
    Donc si tu lis A2, tu obtiendras "Toto", si tu lis B2 tu auras ""
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 172
    Points : 73
    Points
    73
    Par défaut
    Bonjour

    Imaginons que tu fusionnes les cellules A2:B2 et que la valeur de la plage ainsi fusionnée est égal à Toto. Cette valeur est en réalité sur la cellule A2.
    Donc si tu lis A2, tu obtiendras "Toto", si tu lis B2 tu auras ""
    Oui c'est bien ça que j'ai
    et je veux récuperer que les valeurs renseigné pour les placer dans un autre emplacement de la feuille excel

    exemple de restitution :
    nom projet | libelle projet | titre 1 | titre 2
    ------------------------------------------------
    P1 | toto | titi | tata 
    P2 | tata | tutu | toto 

    Le code réalisé me permet de lire le contenu d'une colonne.
    mais dans le cas ou je veux lire dans certaine condition la 2 colonnes fusionnés [A2B2]
    je ne parviens pas à l'exprimer sous forme de code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
       Sub test()
        Dim col As Range, C As Range
        For Each col In Range("G1:Z2000").Columns
            For Each C In col.Cells
                tot = tot + C.Value
                ' CopieCell (ValCell)
     
               MsgBox ("valeur colonne :" + tot)
            Next
        Next
    End Sub
    Je pensais faire une methode qui CopieCell(ValCellule )

    dans la methode CopieCell(ValCell)

    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
    sub CopieCell(ValCell) 
       methode qui transpose la cellule dans un emplacement de tableau    
    end sub 
     
    Sub Transpose(SheetName As String)
        Dim a As Long
        Dim b As Long
        Dim i As Long
        a = Sheets(SheetName).UsedRange.Rows.Count
        b = 7
            For i = 6 To a Step 110
                Sheets(SheetName).Range("G" & i & ":G" & i + 110).Copy
                Windows("Exple").Activate
                Sheets("Feuil2").Select
                Sheets("Feuil2").Range("b" & b).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
                b = b + 1
            Next i
    End Sub
    Je ne suis pas certain que c'est la meilleure maniere de faire mais je ne parviens pas à le finaliser

    Stardeus

  9. #9
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 764
    Points : 28 622
    Points
    28 622
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je ne sais pas si j'ai bien compris ce que tu voulais.
    Lecture du deuxième élément d'une plage de plusieurs colonnes avec retour de la valeur du premier élément si la plage est fusionnée (pour mon test A4:B4 et A6:B6 sont fusionnées) .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub Read()
     Dim rng As Range, r As Long
     Set rng = ThisWorkbook.Worksheets("Feuil1").Range("A1").CurrentRegion
     With rng
     For r = 2 To .Rows.Count
      Debug.Print Format(r, "000") & ") " & (.Cells(r, 2).MergeArea.Count > 1) & " - " & .Cells(r, 2 + (.Cells(r, 2).MergeArea.Count > 1))
     Next
     End With
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 172
    Points : 73
    Points
    73
    Par défaut
    Bonjour

    Voici ce que j'ai fait,
    je sais que j'ai quasiment fini mais je bloque sur cette histoire de colonne fusionnée donc je ne vois pas comment m'y prendre pour placer correctement ces colonnes telles que je souhaite

    voici le fichier que je vous joins
    j'espere que le fichier vous permettra de mieux comprendre ce que je souhaite faire

    stardeus
    Fichiers attachés Fichiers attachés

  11. #11
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 764
    Points : 28 622
    Points
    28 622
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Dans le petit exemple que je t'ai donné, tu as tout en main pour repérer les cellules fusionnées.
    Cependant, il est déconseillé de travailler avec des cellules fusionnées, tu ne peux pas les trier, les filtrer et pour les lire en VBA c'est la galère comme tu as pu le remarquer.
    Au lieu de fusionner les cellules horizontalement, privilégie l'alignement Horizontal sur plusieurs colonnes ainsi plus de problème chaque cellule est dans sa colonne et visuellement c'est la même chose qu'une fusion.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 172
    Points : 73
    Points
    73
    Par défaut Utiliser des variables sur la fonction prédéfini Union
    Bonjour

    Je voudrais savoir s'il etait possible de positionner des variable sur la fonction Union .

    Voici mon idée:
    En effet j'ai stocké dans un tableau le nombre de cellule qui n'etait pas vide.
    Ce tableau affecte les lettres correspondant au cellule non nulle.

    Pour restituer mes infos, j'effectue cette methode

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        i=2
        For Each C In Union([G1:G18]:[H4:H8]).SpecialCells(xlCellTypeConstants, 23)
          i = i + 1
          Cells(nbligne + 1, i) = C
        Next C
    ce que j'aimerai faire , c'est d'englober ce bout de code dans une boucle
    pour qu'il réalise un truc de ce genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      for cpt = 0 to nbcolonnenonvide
            i=2
           For Each C In Union([ montableau(cpt) 1:montableau(cpt)18]:[montableau(cpt+1) 4:montableau(cpt+1)8]).SpecialCells(xlCellTypeConstants, 23)
          i = i + 1
          Cells(nbligne + 1, i) = C
        Next C
    next cpt
    par exemple
    si j'ai ma variable nbcolonnenonvide=12
    alors 12 correspond à la lettre L
    Donc la methode doit parcourir d'abord
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Union([G1:G18]:[H4:H8]).SpecialCells(xlCellTypeConstants, 23)
    ensuite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Union([I1:I18]:[J4:J8]).SpecialCells(xlCellTypeConstants, 23)
    et enfin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Union([K1:K18]:[L4:L8]).SpecialCells(xlCellTypeConstants, 23)
    Merci pour votre aide
    stardeus

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

Discussions similaires

  1. comment créer un tableau en 2 dimensions de 4 sur 4
    Par Invité dans le forum Débuter
    Réponses: 2
    Dernier message: 14/04/2013, 13h04
  2. comment créer un tableau dans un formulaire ???
    Par trotters213 dans le forum IHM
    Réponses: 21
    Dernier message: 03/07/2007, 08h31
  3. [VBA-E] Comment créer un tableau sous vba excel
    Par jeanpierreco dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 27/01/2007, 09h52
  4. Réponses: 23
    Dernier message: 17/05/2006, 16h35
  5. Réponses: 1
    Dernier message: 29/04/2006, 16h55

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