Transpose avec condition

Bonjour à tous,

pour mon premier contact avec le forum

je vous soumets un sujet qui circule mais dont les solutions

proposées ne m'ont pas permis de résoudre mon projet

(sans doute à cause de mon ignorance)

des propositions en VBA ou en formules me conviennent

un grand merci par avance de vous intéresser à mon sujet

j'ai un fichier 2 colonnes

Col A (Noms 12000 lignes) col B (10 Critères répartis sur les 12000 lignes)

je souhaiterai repartir les critères par nom (1 critère par colonne)

les critères manquants sont remplacés par '--

12transpose3.xlsx (10.34 Ko)

Bonjour,

cet exemple, avec filtre auto, ne conviendrait pas

merci pour ta réponse Thihii

mais non

il faut que chaque info soit distribuée dans une colonne unique

et par nom

Bonsoir,

Ci-joint une proposition à tester, en VBA.

Quelques précisions :

  • le nom est déterminé quand la colonne "A" est identique à la colonne "B" (contrairement aux autres infos, pas de "Nom :")
  • les infos d'une même société doivent être à la suite dans le premier onglet
  • pour déterminer la colonne où on écrit le résultat, se base sur le "titre" de la colonne "B" (ex : "Code postal :")
  • si la colonne n'existe pas, on ajoute une nouvelle colonne dans l'onglet final

Bonne soirée

Bouben

Bonsoir à tous,

A tester, n'oublie pas de créer la feuille de restitution.

Option Explicit
Sub test()
Dim a, b(), i As Long, n As Long, t As Long, dico As Object, x
    Set dico = CreateObject("Scripting.Dictionary")
    a = Sheets("Transpose").Range("a1").CurrentRegion.Value
    ReDim b(1 To UBound(a, 1), 1 To UBound(a, 1))
    n = 1: t = 1: b(1, 1) = "Nom"
    With CreateObject("Scripting.Dictionary")
        For i = 2 To UBound(a, 1)
            If Not dico.exists(a(i, 1)) Then
                n = n + 1: dico(a(i, 1)) = n
                b(n, 1) = a(i, 1)
            End If
            If a(i, 2) Like "*:*" Then
                x = Split(a(i, 2), ":")
                x(0) = Trim$(x(0))
                If Not .exists(x(0)) Then
                    t = t + 1: .Item(x(0)) = t
                    b(1, t) = x(0)
                End If
                b(dico(a(i, 1)), .Item(x(0))) = a(i, 2)
            End If
        Next
    End With
    Application.ScreenUpdating = False
    'restitution et mise en forme
    With Sheets("Feuil1")
        .Cells.Clear
        With .Cells(1).Resize(n, t)
            .Value = b
            .Font.Name = "calibri"
            .Font.Size = 10
            .VerticalAlignment = xlCenter
            .BorderAround Weight:=xlThin
            .Borders(xlInsideVertical).Weight = xlThin
            On Error Resume Next
            With .SpecialCells(4)
                .Value = " - "
                .HorizontalAlignment = xlCenter
            End With
            On Error GoTo 0
            With .Rows(1)
                .BorderAround Weight:=xlThin
                .HorizontalAlignment = xlCenter
                .Interior.ColorIndex = 40
                .Font.Size = 11
            End With
            .Columns.AutoFit
            .Columns(1).ColumnWidth = 11
        End With
        .Activate
    End With
    Application.ScreenUpdating = True
End Sub

klin89

Bonjour Klin89

merci de la rapidité de la réponse

super travail

ça répond à ma demande

cependant dans le code tu t’appuies sur les ":" pour la recherche

ce qui a pour effet complémentaire de supprimer

tout ce qu'il y a derrière http ou https dans le résultat

est il possible de remédier à ça

je comprend dans les grandes lignes, grâce à tes commentaires dans le code

mais je suis incapable d'amener les modifications souhaitables

Bonjour

laucsap a écrit :

cependant dans le code tu t’appuies sur les ":" pour la recherche

En vue de ta présentation je pense que c est une manière peu complexe et la plus rapide

Bien sur il existe autre vérification (prise en compte : faute des frappes, espaces entres les mots, oublier de : , … ect) et ca rende le code encore plus complexe

Alors si toutes les autre titre des infos sont précédé par une ":" essayer ca :

11transposev1.xlsm (24.39 Ko)
AMIR a écrit :

Bonjour

laucsap a écrit :

cependant dans le code tu t’appuies sur les ":" pour la recherche

En vue de ta présentation je pense que c est une manière peu complexe et la plus rapide

Bien sur il existe autre vérification (prise en compte : faute des frappes, espaces entres les mots, oublier de : , … ect) et ca rende le code encore plus complexe

Alors si toutes les autre titre des infos sont précédé par une ":" essayer ca :

Merci Amir ta solution fonctionne parfaitement

bien sur avec les restrictions que tu as décrites

je vais d'abord faire un peu de ménage dans ma base

standardiser les syntaxes des différentes colonnes et cellules

et rajouter une boucle pour ne pas avoir à appuyer 6800 fois sur le bouton bleu

encore Merci


bouben a écrit :

Bonsoir,

Ci-joint une proposition à tester, en VBA.

Quelques précisions :

  • le nom est déterminé quand la colonne "A" est identique à la colonne "B" (contrairement aux autres infos, pas de "Nom :")
  • les infos d'une même société doivent être à la suite dans le premier onglet
  • pour déterminer la colonne où on écrit le résultat, se base sur le "titre" de la colonne "B" (ex : "Code postal :")
  • si la colonne n'existe pas, on ajoute une nouvelle colonne dans l'onglet final

Bonne soirée

Bouben

bouben a écrit :

Bonsoir,

Ci-joint une proposition à tester, en VBA.

Quelques précisions :

  • le nom est déterminé quand la colonne "A" est identique à la colonne "B" (contrairement aux autres infos, pas de "Nom :")
  • les infos d'une même société doivent être à la suite dans le premier onglet
  • pour déterminer la colonne où on écrit le résultat, se base sur le "titre" de la colonne "B" (ex : "Code postal :")
  • si la colonne n'existe pas, on ajoute une nouvelle colonne dans l'onglet final

Bonne soirée

Bouben

Merci Bouben

j'ai dégrossi mes 73000 lignes à traiter grâce à ton code

sur lequel je reviendrai pour l'analyser plus en détail et le comprendre mieux

Rechercher des sujets similaires à "transpose condition"