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 :

Macro pour lire des zones précises non continues. [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 37
    Par défaut Macro pour lire des zones précises non continues.
    Bonsoir,
    Je ne suis pas un grand expert d'Excel et du VBA alors merci de votre indulgence.

    Je souhaite lire le fichier excel que je mets en pièce jointe.HOMOL_DM2_DI_1 0 8-v1 0 (3).xlsm
    J'aimerai lire la zone "Filesystems" (ligne 32 dans ce fichier) des onglets 01_DM2 Front 1 et 01_DM2 Middle 1 colonnes par colonnes
    Exemple la colonne "User Owner" des zones "applicatif" et "produits" que je voudrais copier en une seule colonne sans les blancs (lignes vides) dans la feuille "feuil1" contenant la macro.
    Puis les autres colonnes "Group Owner" ... pas spécialement dans l'ordre initial...

    Avec le bout de code suivant j'arrive à ouvrir le fichier puis lire la bonne feuille par contre après ça ne marche pas.
    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
      'On attribue à la variable WbkColle le fichier actuel (celui qui contient la macro)
      Set WbkColle = ThisWorkbook
      'A adapter : Nom des entêtes de colonnes à importer
      Colonnes = Array("Point de Montage", "User Owner", "Group Owner", "Taille")
     
      'Sélection du fichier
      Fichier = Application.GetOpenFilename("Fichiers Excels, *.xls*")
      'En cas de clic sur "ANNULER"
      If Fichier <> False Then
        'On ouvre le fichier en question
        Set WbkCopy = Workbooks.Open(Fichier)
        With WbkCopy.Sheets("01_DM2 Front 1") '==> ADAPTER NOM de la feuille
          'Boucle sur toutes les entêtes des colonnes
          For Col = 1 To .Cells(1, .Cells.Columns.Count).End(xlToLeft).Column
            'teste si l'entête correspond à un des noms des colonnes à copier
            Resultat = Application.Match(.Cells(1, Col), Colonnes, 0)
            'Si l'entête est trouvée (colonne à copier)
            If Not IsError(Resultat) Then
              'Copié - Collé ==> ADAPTER NOM de la feuille ou coller ("TRUC" à remplacer)
              .Columns(Col).Copy WbkColle.Sheets("Feuil1").Cells(1, Cells.Columns.Count).End(xlToLeft).Offset(0, 1)
            End If
          Next Col
        End With
        WbkCopy.Close
      End If
    Set WbkCopy = Nothing
    Set WbkColle = Nothing
    End Sub
    De plus les colonnes sont lus dans l'ordre et avec les lignes vides alors que je voudrais les lire dans un autre ordre et je pense en lisant un peu le forum qu'il faut mieux prendre la méthode Find pour lire la zone "Filesystems" et après je ne vois pas trop comment lire la suite.

    Merci de votre aide.

    Thierry.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Technicien bureau d'études
    Inscrit en
    Novembre 2015
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien bureau d'études

    Informations forums :
    Inscription : Novembre 2015
    Messages : 118
    Par défaut
    Bonjour thierryppp.

    Je ne saisis pas complètement ta demande.
    Pourrais-tu fournir un exemple de résultat que tu souhaites ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 37
    Par défaut Explications
    Bonjour thebenoit59,

    Oui c'est pas très clair.
    Je n'arrive pas à mettre les images désolé...
    Donc ce que j'aimerai c'est dans la partie du fichier correspondant à "Filesystems" ligne 32 pour ce fichier mais la ligne peut changer :
    Prendre les 4 colonnes ci dessous : (ligne 33)

    Point de Montage User Owner Group Owner Taille
    /applis/dm2f dm2fadm dm2f 1,00 Go
    /applis/dm2f/log dm2fadm dm2f 1,00 Go
    /applis/dm2f/tmp dm2fadm dm2f 1,00 Go
    /applis/dm2f/sysout dm2fadm dm2f 1,00 Go
    /applis/dm2f/gcdl dm2fadm dm2f 6,00 Go
    /applis/dm2f/gcl dm2fadm dm2f 15,00 Go
    /applis/dm2f/tcserver dm2fadm dm2f 10,00 Go
    /applis/dm2f/apache dm2fadm dm2f 1,00 Go

    /applis/dm0f dm0fadm dm0f 1,00 Go
    /applis/dm0f/log dm0fadm dm0f 1,00 Go
    /applis/dm0f/sysout dm0fadm dm0f 1,00 Go

    SOUS TOTAL APPLICATIF: 39,00 Go
    /produits/patroldm2f patrol super 1,00 Go
    /produits/patroldm0f patrol super 1,00 Go
    /produits/agcdm0f agcdm0f controlm 2,50 Go
    /produits/oracle oracle dba 6,00 Go


    SOUS TOTAL PRODUITS: 10,50 Go
    /applis/vfef vfefadm vfef 1,00 Go
    /produits/opsware eacfadm eacf 3,00 Go

    Et les remettre dans ce format :

    username groupname mountpoint fsSizeInGigas
    dm2fadm dm2f /applis/dm2f 1,00 Go
    dm2fadm dm2f /applis/dm2f/log 1,00 Go
    dm2fadm dm2f /applis/dm2f/tmp 1,00 Go
    dm2fadm dm2f /applis/dm2f/sysout 1,00 Go
    dm2fadm dm2f /applis/dm2f/gcdl 6,00 Go
    dm2fadm dm2f /applis/dm2f/gcl 15,00 Go
    dm2fadm dm2f /applis/dm2f/tcserver 10,00 Go
    dm2fadm dm2f /applis/dm2f/apache 1,00 Go
    dm0fadm dm0f /applis/dm0f 1,00 Go
    dm0fadm dm0f /applis/dm0f/log 1,00 Go
    dm0fadm dm0f /applis/dm0f/sysout 1,00 Go
    patrol super /produits/patroldm2f 1,00 Go
    patrol super /produits/patroldm0f 1,00 Go
    agcdm0f controlm /produits/agcdm0f 2,50 Go
    oracle dba /produits/oracle 6,00 Go
    vfefadm vfef /applis/vfef 1,00 Go
    eacfadm eacf /produits/opsware 3,00 Go


    Merci,

    Thierry.

  4. #4
    Membre éprouvé
    Homme Profil pro
    Technicien bureau d'études
    Inscrit en
    Novembre 2015
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien bureau d'études

    Informations forums :
    Inscription : Novembre 2015
    Messages : 118
    Par défaut
    Je ne peux pas accéder au VBA sans le mot de passe :/

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 37
    Par défaut reponse
    Bonjour,

    Oui il y a un mot de passe : zhiping mais justement je ne peux pas modifier ce code VBA très complexe.

    Mais simplement faire une macro dans un autre fichier qui ouvre le fichier finalisé HOMOL_DM2_DI_1 0 8-v1 0 (3).xlsm‎ puis par exemple dans la feuille "01_DM2 Front 1" la partie "Filesystems pour prendre les 4 colonnes et mettre le résultat demandé (4 colonnes dans un autre ordre sans les lignes vides) dans ce nouveau fichier par exemple dans la feuil1.
    Merci,

    Thierry.

  6. #6
    Membre émérite
    Homme Profil pro
    Directeur
    Inscrit en
    Avril 2003
    Messages
    724
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur

    Informations forums :
    Inscription : Avril 2003
    Messages : 724
    Par défaut
    Salut,

    donc si je comprend bien, tu souhaites pouvoir repérer facilement
    la zone Filesystems, actuellement en B32?
    Et j'imagine que ce B32 peut varier.

    Tu peux alors nommer cette cellule, par exemple en FILESYSTEM.
    Et pour sélectionner le plage tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Range("FILESYSTEM").currentRegion
    Même si ta plage bouge, FILESYSTEM bouge avec!
    Cordialement,

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 37
    Par défaut reponse
    Philippe,
    Oui B32 peut bouger mais que représente exactement currentRegion. (en terme de zone couverte...)
    Et comment peux t-on lire les colonnes suivantes...
    Merci,
    Thierry.

  8. #8
    Membre éprouvé
    Homme Profil pro
    Technicien bureau d'études
    Inscrit en
    Novembre 2015
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien bureau d'études

    Informations forums :
    Inscription : Novembre 2015
    Messages : 118
    Par défaut
    Je suppose que les colonnes resteront toujours identiques en terme de position.
    Je te propose la solution 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
    Option Explicit
    Sub Export()
    '- Déclaration des variables
    Dim fB As Worksheet, fR As Worksheet
    Dim vD As String, vF As String
    Dim lD As Long, lF As Long
    Dim d As Object
    Dim c As Variant, i As Variant
    Dim a
     
    '- Enregistrement des objets
    Set fB = Feuil1: Set fR = Feuil2
    vD = "Filesystems": vF = "Répertoires à créer"
    Set c = fB.Cells.Find(vD, lookat:=xlWhole): If Not c Is Nothing Then lD = c.Row
    Set c = fB.Cells.Find(vF, lookat:=xlWhole): If Not c Is Nothing Then lF = c.Row
    Set d = CreateObject("Scripting.Dictionary")
     
    '- Création de la bibliothèque
    With fB
    For Each c In .Range(.Cells(lD + 1, 3), .Cells(lF - 1, 3))
        If c.Value <> "" Then d(c.Offset(, 1).Value & "%" & c.Offset(, 2).Value & "%" & c.Value & "%" & c.Offset(, 3).Value) = ""
    Next c
    End With
     
    '- Retranscription sur la feuille Résultat
    With fR
        If d.Count > 0 Then
            i = 0
                For Each c In d.Keys
                    a = Application.Transpose(Split(c, "%"))
                        .[a1].Offset(i, 0).Resize(, 4) = Application.Transpose(a)
            i = i + 1
                Next c
        End If
    End With
    End Sub
    J'avais commencé avant d'obtenir ton mot de passe.
    La méthodologie est la suivante :

    On trouve le numéro de ligne de Filesystems et de Répertoires à créer, qui est la catégorie suivante.
    On boucle les lignes entre ces deux catégories et on enregistre les valeurs dans un dictionary, en mettant dans l'ordre que tu as demandé. On ajoute un "%" entre chaque texte.
    On exporte le dictionary dans un tableau, en séparant le texte avec Split(, "%"), voilà l'utilité du %.
    On transpose le résultat dans la feuille Résultat.

    Essaye d'adapter ça pour que tu puisses boucler les différentes feuilles.
    Fichiers attachés Fichiers attachés

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 37
    Par défaut Merci
    Benoit,

    Ca y est j'ai eu un peu le temps de regarder le code.
    J'ai essayé de comprendre la partie dictionnaire que je ne connaissais pas.
    Et c'est bon j'ai compris après avoir bien tester avec le debug de la macro.
    Le code est super bien fait (propre) et bien expliqué (commenté).
    Encore merci pour l'aide et le temps passé pour moi.
    Cdt,
    Thierry.

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 21/04/2011, 09h32
  2. Réponses: 1
    Dernier message: 15/09/2006, 16h23
  3. [VBA-PP] macro pour insérer des images dans PowerPoint
    Par mashpro dans le forum VBA PowerPoint
    Réponses: 4
    Dernier message: 01/08/2006, 22h56
  4. [VBA-E] Probleme Macro pour gérer des cases à cocher
    Par bibiche2184 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 09/06/2006, 18h03
  5. macro pour créer des graphiques
    Par Sebastien_INR59 dans le forum Access
    Réponses: 1
    Dernier message: 07/06/2006, 09h44

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