Tentative de création de macro Excel 2010

Bonjour,

Je souhaite importer des données brutes dans Excel 2010 puis les mettre en forme :

Le fichier d'origine est en format texte déjà mis en forme, chaque champ est séparé de la valeur par un :

J'ai d'abord copier coller les données brutes puis onglet développeur pour enregistrer une nouvelle macro

(mes connaissances VBA laissent à désirer)

j'ai sélectionné toutes les cellules puis au moment de coller les données dans la feuille voisine j'ai utilisé l'option transposée

tous les champ sont en ligne du 1er au nième avec les valeurs en dessous puis le cycle se répète

Login(colonne1) … réseau(colonne n) Login(colonne n+1) … réseau(colonne n+n)

malheureusement le nom des champ est identique pour certains comme écran (l'utilisateur peut en avoir plusieurs).

J'ai arrêté d'enregistrer la macro une fois que j'ai fait un ctrl F pour faire la recherche du premier champ "Login", puis de sélectionner les n colonnes suivantes tant que le prochain champ login n'apparait pas, puis couper coller à la ligne suivante.

L'utilisateur peut aussi avoir plusieurs imprimantes donc je ne peux pas compter le nombre de colonnes pour généraliser le passage à la ligne (j'ai bien un code vba mais ne sais pas inclure ce code dans une boucle avec les conditions sitées dans mon message)

Enfin, l'idéal serait de supprimer les entêtes qui se répètent et d'avoir un tableau afin de faire un tri sur plusieurs champs, ce qui m'intéresse au final est de filtrer les imprimantes locales par utilisateur mais tous les champs doivent être conservés si possible.

J'aimerais beaucoup avoir des commentaires dans la ou les macros que vous me proposerez afin d'enregistrer la structure et la manière d'en construire par moi-même.

Merci de votre aide.

9output1.txt (13.43 Ko)

bonjour,

Regarde et dis moi...

A+

Bonjour,

super bien sauf que le login n'est pas répertorié dans le tableau

j'ai essayé de modifier ta macro en remplacant Resize (Ubound(a),12) par 13

et en ajoutant

Case "Login": ic = 2 et en incrémentant la suite

aucun message d'erreur mais le login n'est toujours pas inscrit.

Merci de ton aide.

C'est une des questions que je me posais : J'ignorais si la cellule "B1" était censée contenir quelque chose ou pas.

Modifier comme suit :

For i = 1 To UBound(a)
a(i, 1) = RTrim(a(i, 1))      'On élimine les espaces parasite à droite
   If a(i, 1) = "Login" Then  'Si on a un Login on l'inscrit et on incrémente les paramètres
      k = k + 1
      b(k, 1) = ii + 1 & " - " & a(i, 2) 'Ligne à modifier autre possibilité :  b(k, 1) = a(i, 2)
'Le reste sans changement...

A+

Sinon il y a aussi cette possibilité peut être plus pratique pour faire des filtres :

Sub GalopinV2()
Dim a, b, i&, ii&, k&, iLR&, ic&, inc&
Application.ScreenUpdating = False
'Purger les lignes vides et celle qui commencent par un tiret
iLR = Range("a" & Rows.Count).End(xlUp).Row  'iLR =Dernière ligne
For i = iLR To 1 Step -1      'De la première ligne à l dernière
   If Cells(i, 1) = "" Or Mid(Cells(i, 1), 1, 1) = "-" Then Rows(i).Delete
Next
                              'On travaille dans un tableau
a = [A1].CurrentRegion.Value  'a = Tableau Source
b = [A1].CurrentRegion.Offset(1, 8).Resize(UBound(a), 12)   'b= Tableau cible sur 12 colonnes
For i = 1 To UBound(a)
a(i, 1) = RTrim(a(i, 1))      'On élimine les espaces parasite à droite
   If a(i, 1) = "Login" Then  'Si on a un Login on l'inscrit et on incrémente les paramètres
      k = k + 1
      b(k, 1) = ii + 1 & " - " & a(i, 2) '(Ligne modifiée)... autre possibilité :  b(k, 1) = a(i, 2)
      ii = ii + 1
   Else                       'Sinon on regarde le contenu et on cherche la colonne
      Select Case a(i, 1)
      Case "UC Name": ic = 2
      Case "UC Serial": ic = 3
      Case "Marque": ic = 4
      Case "Model": ic = 5
      Case "Type": ic = 6
      Case "IP UC": ic = 7
      Case "ECRAN": ic = 8
      Case "SERIE ECRAN": ic = 9
      Case "PRINTNAME": ic = 10
      Case "EN RESEAU": ic = 11
      Case Else: ic = 12
      End Select
      If b(k, ic) = "" Then   'Et on inscrit dans la colonne trouvée
         inc = 0
         b(k, ic) = a(i, 2)
      Else                    'Si c'est un deuxième écran ou une autre imprimante
         inc = inc + 1        'on incrémente la ligne
         b(k + inc, 1) = b(k + inc - 1, 1)
         b(k + inc, ic) = a(i, 2)
         k = k + 1
      End If
   End If
Next
[I2].Resize(UBound(b), 12) = b   'Pour terminer on restitue le tableau b sur la feuille
End Sub

A+

Rechercher des sujets similaires à "tentative creation macro 2010"