Macro pour transposer des lignes avec intervalle aléatoire

17classeur3.xlsx (10.04 Ko)

Bonjour,

Je vous remercie d’avance pour votre précieuse aide.

Voici mon problème,

Je suis nouveau en excel et je souhaite utiliser une macro pour transposer toutes lignes d’une seule colonne (plus de 4000 lignes) en un tableau.

Les éléments sont confidentiels donc je ne peux pas vous transmettre le fichier mais en voici la description et également une version allégée :

Ma colonne A

### Nom1

Serveur : Serveur1

Address: Adresse du serveur

Nom : Nom du Serveur

Address: Adresse du serveur

###Nom 2

Serveur : Serveur2

Address: Adresse du serveur

Nom : Nom du Serveur

Address: Adresse du serveur

Aliases: Aliases

###Nom 3

Serveur : Serveur3

Address: Adresse du serveur

Etc. etc.

----------

Ce que j’aimerais c’est obtenir un tableau du type comme ci-dessous :

Nom Serveur Adress Nom Adress Aliases

Nom 1 Serveur1 Adresse du serveur nom du serveur Adresse du serveur Aliases

Nom 2 Serveur2 Adresse du serveur nom du serveur Adresse du serveur Aliases

Nom 3 Serveur3 Adresse du serveur nom du serveur Adresse du serveur Aliases

J’ai trouvé des macros permettant de transposer toutes les « n lignes » d’une colonne, cependant ici cela ne peut pas s’adapter car il y a différent cas de figure : un serveur peut avoir 3, 4, 5, 6 lignes d’informations.

Je pensais à plusieurs options :

  • Option 1 : Parcourir la colonne A et transposer chaque fois que l’on rencontre le caractère « # » en débutant à la ligne où apparait ce caractère et en s’arrêtant à la ligne avant l’apparition du « # » suivant.
  • Option 2 : Mettre en place une macro qui créer de façon automatique des lignes de façon à ce qu’il y ait systématiquement 7 lignes entre chaque ###Nom. Cela permettrait de fixer le pas de transposition à 8 et mettre une sécurité.

Je ne sais pas si ces deux options sont pertinentes, mais pour chacune d’entre elles, je ne sais pas comment procéder. L’un d’entre vous pourrait-il m’aider à résoudre cette problématique ?

En vous remerciant d’avance,

Cordialement,

MJ

Bonjour

Plutôt PowerQuery que VBA mais sans fichier représentatif, on va modéliser pour rien

Déjà la description et l'exemple ne correspondent pas

Bonjour,

Je te remercie pour ton retour,

Le fichier que j'ai joint n'est pas suffisant ? J'ai extrait quelques lignes du fichier original et j'ai retiré les données sensibles. Que voudrais-tu que je fasses pour que tu puisses y jeter un coup d'oeil ?

Je te remercie d'avance

MJ

Bonjour et bienvenue sur le forum

Bonjour à tous

Un essai à tester, si j'ai bien compris.

13classeur3-v1.xlsm (26.04 Ko)

Bye !

RE

Le fichier que j'ai joint n'est pas suffisant ? J'ai extrait quelques lignes du fichier original et j'ai retiré les données sensibles. Que voudrais-tu que je fasses pour que tu puisses y jeter un coup d'oeil ?
Il faudrait des valeurs derrière les : que l'on puisse typer les données, voir si un caractère peut se confondre avec le séparateur, si les espaces sont réguliers : dans le fichier il n'y a rien et dans l'exemple les ### sont parfois suivis d'un espace, parfois non, les : ne sont pas toujours précédés d'un espace...

Bonjour GMB,

Je te remercie pour ton message, c'est exactement le principe !

Simplement, initialement il n'y a pas 2 colonnes A & B mais simplement une colonne A qui contient les informations (par exemple, en colonne A ligne 1 --> ###Nom ; Colonne A ligne 2 --> Serveur:A). Aussi désolé je pense m'être mal exprimé mais, il faudrait que la ligne ## fasse aussi l'objet d'une colonne.

Pense-tu qu'il soit possible de réaliser ce que tu as fait en partant d'information contenue dans une seule cellule (colonne A) ? Si oui te serait-il possible de me montrer stp ?

En te remerciant d'avance,

MJ

11classeur4.xlsx (9.35 Ko)

Re,

Voici ci-joint un extrait du fichier dans lequel j'ai anonymisé les informations :

Pour le contexte il s'agit de résultats d'une commande nommé NSLookup, les résultats sont aléatoire suivant le DNS renseigné

La colonne A représente le résultat collé tel quel, et il y a plusieurs types de réponses possibles :

Option 1

Option 2

Option 3

Option 4

Option 5

Option n

###Nom

Rien

###Nom

Rien

Rien

Serveur : Serveurqqchose

Serveur : Serveurqqchose

Serveur : Serveurqqchose

Serveur : Serveurqqchose

Serveur : Serveurqqchose

Adress : Adresseqqchose

Adress : Adresseqqchose

Adress : Adresseqqchose

Adress : Adresseqqchose

Adress : Adresseqqchose








Nom : DNSqqhchos

Nom : DNSqqhchos

Nom : DNSqqhchos

Nom : DNSqqhchos

Rien


Adress : Adresseqqchose

Adress : Adresseqqchose

Adress : Adresseqqchose

Adress : Adresseqqchose

Rien


Aliases : Aliasesqqchose

Aliases : Aliasesqqchose

Rien


Rien


Dans ce contexte-là, je souhaitais donc à partir de cette unique colonne composée entre autre des options ci-dessus créer un tableau automatiquement rempli des champs ci-dessous :

DNS

Serveur DSN

Adress IP

DSN cible

Adresse cible

Aliases

Nom

Serveurqqchose

Adresseqqchose

DNSqqhchos

qqchose

Aliasesqqchose

Le fichier ci-joint reprend ma description, j'espère vous avoir plus clairement exposé le problème

Je vous remercie grandement pour votre aide et pour vos futures réponses

Nouvelle version.

13classeur3-v2.xlsm (27.25 Ko)
Option Explicit

Dim tablo, tabloR()
Dim i&, j&, ln, nbM&, n&

Sub Repourter()

    tablo = Range("A1").CurrentRegion

    'On détermine le nombre de colonnes du tableau de résultats
    nbM = 1: n = 0
    For i = 1 To UBound(tablo, 1)
        If Left(tablo(i, 1), 3) <> "###" Then
            n = n + 1
            If n > nbM Then
                nbM = n
            End If
        Else
            n = 0
        End If
    Next i
    ReDim tabloR(1 To UBound(tablo, 1), 1 To nbM + 1)

    'on reporte les noms dans le tableau de résultats
    n = 0: j = 0
    For i = 1 To UBound(tablo, 1)
        If Left(tablo(i, 1), 3) <> "###" Then
            j = j + 1
            tabloR(n, j) = Split(tablo(i, 1), ":")(1)
        Else
            tabloR(n + 1, 1) = Split(tablo(i, 1), " ")(1)
            n = n + 1
            j = 1
        End If
    Next i

    'On écrit le résultat sur la feuille de calcul (ici en E2)
    Range("D2").CurrentRegion.Offset(1, 0).ClearContents
    Range("D2").Resize(n + 1, nbM + 1) = tabloR
End Sub

Bye !

Rechercher des sujets similaires à "macro transposer lignes intervalle aleatoire"