Passage d'un affichage Colonnes vers Lignes

nashki

XLDnaute Nouveau
Bonjour a tous.
Voici mon probleme. J'effectue des extracts de la Base Catalogue sous Notes, afin d'obtenir la liste complète des bases Notes, et des attributs qui leurs sont liés (date de création, dernier acces, etc etc...)
Cela me genere un fichier .txt que j' ouvre sous excel. Pas de souci pour cela. Voila les infos pour chaque base,
---------------------------------------------------------------
Server: CN=DIXXXXX1/OU=X/OU=LDE/O=SLE
Pathname: GDS\GDSDEM.nsf
DbStoragePath: D:\Domino\Data\GDS\GDSDEM.nsf
DbVolumeName: D
Title: GDS-Ethique Mécénat
Categories:
ReplicaID: 21/05/2001 11:41:04
DbType: 0
RepDisabled: 0
RepRecSumm: 0
RepSendDel: 0
RepSendTitleAndCatalog: 1
RepPriority: 2
RepRemoveOld: 0
RepRemoveInterval: 0
DbCreationDate: 21/05/2001 12:04:43
DbTemplateName:
DbListInCatalog: 1
DbShowInDialog: 1
DbFullTextIndexed: 0
DbMultiIndexing: 0
DesignerList:
EditorList:
DepositorList:
DbInheritTemplateName: GDS
DbAdminServer: CN=NAN03004/OU=A/OU=LDE/O=SLE
DbAdminServerNames: 0
ManagerList: §SysServeurs$%^11111111$%^[0MNT]$%^5,CN=Gds APPLICATION/OU=A/OU=LDE
LIO*Utilisateurs
NoAccessList: -Default-$%^00000000$%^$%^0
DbNumDesignDocuments: 148
DbSize: 3670016
D
$Revisions: 12/02/2009 01:02:47
----------------------------------------------------------------
et chaque base est ainsi décrite dans mon fichier TXT. a la suite, en une colonne, et lors de l'import sous Excel, cela me le retranscris de la même manière, je peux juste séparer les données sur la même ligne.

:confused:Comment puis je effectuer un tri, pour que chaque critère commun de chaque base puisse devenir un titre de colonne ?:confused:


Si je ne suis pas assez clair n'hésitez pas a me demander des precisions?
Par avance merci.
 

jp14

XLDnaute Barbatruc
Re : Passage d'un affichage Colonnes vers Lignes

Bonjour

Ci joint un fichier avec une procédure pour transposer les données.

Une variable contient le nom des données
data1 = VBA.Array("Server", "Pathname", "DbStoragePath", "DbVolumeName", "Title", "Categories", _
........................
"ManagerList", "NoAccessList", "DbNumDesignDocuments", "DbSize")

La procédure inscrit les noms de data1 comme entête de colonnes.
Puis recherche les données et les inscrits ligne par ligne en utilisant le premier nom comme séparateur.
Si on ne désire pas récupérer toutes les données il suffit de supprimer le nom dans data1


A tester
 

Pièces jointes

  • Classeur15.zip
    15.9 KB · Affichages: 43
  • Classeur15.zip
    15.9 KB · Affichages: 44
  • Classeur15.zip
    15.9 KB · Affichages: 46
Dernière édition:

nashki

XLDnaute Nouveau
Re : Passage d'un affichage Colonnes vers Lignes

Salut tototiti2008.
Je m'en doutais... alors même si jp14 m'a apporté un élément de réponse, je vais te préciser la chose.

Sous Lotus Notes, chaque base à des des attributs "ManagerList", "NoAccessList", "DbNumDesignDocuments", "DbSize"... (mais jp14 il y a plus de 2000 bases)

Les extractions se font sous la forme d'un fichier texte qui se présente comme déjà indiqué dans mon premier post.

Vu que chaque base a les mêmes attributs, renseignés ou pas, la présentation serait plus claire sous la forme d'un tableau excel dont la présentation se ferait par colonne, et où chaque colonne serait un attribut.

D'ou ma question, comment traiter sous excel les informations extraites en .txt pour obtenir un joli tableau avec présentation en colonne des attributs
 

tototiti2008

XLDnaute Barbatruc
Re : Passage d'un affichage Colonnes vers Lignes

Re,
Bonjour jp14,

à priori il faut faire une macro qui lit tous les fichiers texte d'un dossier, par exemple, et t'en fait une liste. Si chaque info est bien présentée comme ca :

NomDuChamp : Info

ça doit être jouable... comme je ne peux pas ouvrir les zip, je ne sais pas si la proposition de jp14 va dans ce sens.
 

jp14

XLDnaute Barbatruc
Re : Passage d'un affichage Colonnes vers Lignes

Bonjour tototiti2008
Ci dessous la procédure
Code:
Option Explicit

Sub travdemande()

Dim i As Long
Dim j As Long
Dim data1 As Variant

Dim cellule As Range
Dim plage As Range

Dim nomfeuille1 As String
Dim col1 As String
Dim classeur1 As String
Dim lidep1 As Long
Dim dl1 As Long
Dim data2 As String
Dim trouve As Boolean
Dim lidep2 As Long
Dim nomfeuille2 As String
Dim col2 As String
Dim dl2 As Long

'************ a modifier **********
nomfeuille1 = "Feuil1"
col1 = "a"
lidep1 = 1
'************* fin de modif ***********
With Sheets(nomfeuille1)
dl1 = Sheets(nomfeuille1).Range(col1 & "65536").End(xlUp).Row + 2
Set plage = .Range(col1 & lidep1 & ":" & col1 & .Range(col1 & "65536").End(xlUp).Row)
End With
'************ a modifier **********
nomfeuille2 = "Feuil2"
col2 = "a"
lidep2 = 1
'************* fin de modif ***********
dl2 = Sheets(nomfeuille2).Range(col2 & "65536").End(xlUp).Row + 1


With Sheets(nomfeuille2)
'************ a modifier **********
' la variable contient les données que l'on désire inclure dans la feuille excel
' Il est possible de faire un remappage des colonnes
' la première valeur correspond à la colonne 1 et sert de séparateur de ligne
'
data1 = VBA.Array("Server", "Pathname", "DbStoragePath", "DbVolumeName", "Title", "Categories", _
"ReplicaID", "DbType", "RepDisabled", "RepRecSumm", "RepSendDel", "RepSendTitleAndCatalog", _
"RepPriority", "RepRemoveOld", "RepRemoveInterval", "DbCreationDate", "DbTemplateName", _
"DbListInCatalog", "DbShowInDialog", "DbFullTextIndexed", "DbMultiIndexing", "DesignerList", _
"EditorList", "DepositorList", "DbInheritTemplateName", "DbAdminServer", "DbAdminServerNames", _
"ManagerList", "NoAccessList", "DbNumDesignDocuments", "DbSize")

'************* fin de modif ***********

For i = LBound(data1) To UBound(data1)
    .Cells(1, i + 1) = data1(i)
Next i

For Each cellule In plage
    trouve = False
    If cellule.Value <> "" Then
        j = InStr(1, cellule.Value, ":")
        If j > 0 Then
            data2 = Left(Trim(cellule.Value), j - 1)
            If Len(data2) + 1 < Len(Trim(cellule.Value)) Then ' si pas de données
                For i = LBound(data1) To UBound(data1)
                    
                    If data2 = data1(i) Then
                        trouve = True
                        Exit For
                    End If
                Next i
                
                If trouve = True Then
                     If data2 = data1(LBound(data1)) Then dl2 = Sheets(nomfeuille2).Range(col2 & "65536").End(xlUp).Row + 1
                     
                     
                     .Cells(dl2, i + 1) = Trim(Mid(cellule.Value, j + 1, 250))
                End If
            End If
        End If
   End If
Next cellule

End With

End Sub

JP
 

Membres actuellement en ligne

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16