Macro pour transposer des lignes avec intervalle aléatoire
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.
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
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.
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 SubBye !