Réorganiser cellules en fonction du nom identique au titre de colonne

didinelfange

XLDnaute Nouveau
Bonjour,

J'ai un tableau d'extraction recensant les accès de chacun par application à des services. Or, par exemple nom1 sur appli1 a accès aux 3 services, mais nom2 n'a accès qu'à 2 services sur 3 .

Je souhaiterais donc avoir un tableau qui réorganise ces cellules de manière cohérente et lisible, sachant que le nom de la colonne porte le nom du service et que si la personne n'a pas d'accès il n'y a rien dans la cellule.

J'ai commencé plusieurs tests mais le plus simple serait, si c'est possible, de lui demander une macro pour faire correspondre par nom la colonne avec ses cellules dont le contenu est identique. Car j'ai environ 50 colonnes sur plus de 2000 lignes.

Je pense ne pas être très clair donc je vous ai joint le fichier d'exemple pour illustrer mon propos.

Je vous remercie par avance de votre réponse.
 

Pièces jointes

  • exemple.xlsx
    9.1 KB · Affichages: 24
  • exemple.xlsx
    9.1 KB · Affichages: 28

vgendron

XLDnaute Barbatruc
Re : Réorganiser cellules en fonction du nom identique au titre de colonne

Hello

voir Pj pour exemples
le problème de ton fichier, c'est qu' il y a beaucoup d'espaces en début et /ou fin de cellule..
et que ce n'est pas systématique

soit. tu te tapes tes 2 000 lignes pour supprimer tous les espaces de début et fin de cellule quand ils existent
soit tu tapes la formule matricielle (dans le Tab3)
ou encore, tu passes par un tableau intermédiaire (à droite colonnes H I J) et la formule dans le tab2
 

Pièces jointes

  • exemple (7).xlsx
    10.2 KB · Affichages: 37
  • exemple (7).xlsx
    10.2 KB · Affichages: 28

didinelfange

XLDnaute Nouveau
Re : Réorganiser cellules en fonction du nom identique au titre de colonne

Bonjour,

Merci de votre réponse rapide mais ces solutions ne fonctionnent pas dans l'extraction du document que je dois faire.
En effet, j'ai oublié de préciser dans mon précédent message que l'extraction du document mélange les services comme modifié dans le document ci dessous à la ligne 5 .

Je vous remercie de votre aide car je suis coincée sur ce point depuis un moment . :confused:
 

Pièces jointes

  • exemple.xlsx
    9.1 KB · Affichages: 35
  • exemple.xlsx
    9.1 KB · Affichages: 33
Dernière modification par un modérateur:

vgendron

XLDnaute Barbatruc
Re : Réorganiser cellules en fonction du nom identique au titre de colonne

Re,

l'extraction du document mélange les services comme modifié dans le document ci dessous à la ligne 5 .

je ne vois pas en quoi les données sont "mélangées" ??


dans les solutions proposées précédemment. qu'est ce qui ne fonctionne pas?
solution 1:
tableau intermédiaire en colonnes H I J pour supprimer les espaces présents parfois devant ou derrière le service
puis formule en D11 = SIERREUR(SI(EQUIV(D$10;$H2:$J2;0);D$10;"");"")

solution 2: SANS le tableau intermédiaire

formule MATRICIELLE en D19
=SIERREUR(SI(EQUIV(D$18;STXT($D2:$F2;1+1*(GAUCHE($D2:$F2;1)=" ");9);0);D$10;"");"")

attention: MATRICIELLE veut dire qu'il faut valider la formule avec Ctrl+Maj +Entrée
 

klin89

XLDnaute Accro
Re : Réorganiser cellules en fonction du nom identique au titre de colonne

Bonjour vgendron, didinelfange, le forum :)

Pour ton cas, Application.Match devrait suffire.
A tester sur le fichier fourni au post #3
Attention aux espaces parasites.
VB:
Option Explicit
Sub test()
Dim x, a, b(), i As Long, j As Long, pos
    x = Array("Service 1", "Service 2", "Service 3")
    With Sheets("Feuil1").Cells(1).CurrentRegion
        a = .Value
        ReDim b(1 To .Rows.Count, 1 To .Columns.Count)
        For i = 1 To UBound(a, 2)
            b(1, i) = a(1, i)
        Next
        For i = 2 To UBound(a, 1)
            For j = 1 To 3
                b(i, j) = a(i, j)
            Next
            For j = 4 To UBound(a, 2)
                If a(i, j) <> "" Then
                    pos = Application.Match(a(i, j), x, 0)
                    b(i, pos + 3) = a(i, j)
                End If
            Next
        Next
        With .Offset(, .Columns.Count + 1).Resize(UBound(b, 1), UBound(b, 2))
            .CurrentRegion.Clear
            .Value = b
            .Font.Name = "calibri"
            .Font.Size = 10
            .VerticalAlignment = xlCenter
            .BorderAround ColorIndex:=3, Weight:=xlThin
            With .Borders(xlInsideVertical)
                .Weight = xlThin
                .ColorIndex = 3
            End With
            With .Borders(xlInsideHorizontal)
                .Weight = xlThin
                .ColorIndex = 3
            End With
            With .Rows(1)
                .Interior.ColorIndex = 6
                .HorizontalAlignment = xlCenter
            End With
        End With
    End With
End Sub
klin89
 
Dernière édition:

didinelfange

XLDnaute Nouveau
Re : Réorganiser cellules en fonction du nom identique au titre de colonne

Bonjour et merci pour votre aide.

J'ai essayé la macro de Klin89 mais j'ai une erreur 13 à cette ligne b(i, pos + 3) = a(i, j)
Je pense que je n'ai pas saisi toutes les variables de ta macro, serait il possible d'avoir un commentaire sur ton code pour que je puisse me repérer dans les variables

Je ne suis absolument pas experte des macros Excel et désolé si je pose beaucoup de questions .

Bonne soirée. et merci encore pour votre patience.
 

klin89

XLDnaute Accro
Re : Réorganiser cellules en fonction du nom identique au titre de colonne

Re didinelfange,

La recherche de position s'effectue dans :
Code:
x = Array("Service 1", "Service 2", "Service 3")
Si tu possèdes plusieurs services, redéfinis la variable tableau x et tu n'auras plus d'erreur.

Dans le fichier du post #3, cela fonctionne sans les espaces parasites évidemment.
Commence par supprimer ces "parasites", passe un coup de trim et de clean.
Comme ceci :
VB:
Sub Nettoyage()
    With Sheets("Feuil1").Range("a1").CurrentRegion
        .Value = Evaluate("if(" & .Address & _
        "<>"""",trim(clean(" & .Address & ")),"""")")
    End With
End Sub
klin89
 
Dernière édition:

didinelfange

XLDnaute Nouveau
Re : Réorganiser cellules en fonction du nom identique au titre de colonne

Bonjour Klin89,

Je te remercie pour ta macro qui fonctionne sur mon fichier exemple. Or, je dois le transposer sur un fichier de mon entreprise qui est évolutif et dont la macro doit être évolutive. ainsi j'ai donc plus de 50 colonnes dans mon tableau et je ne peux pas entrer tous les entêtes à la main sachant que de nouvelles colonnes se rajoutent régulièrement.
Comment pourrais-je transformer la macro pour que les nouveaux entête se rajoutent automatiquement .

Je vous remercie par avance de votre réponse. Et un très grand MERCI pour votre aide. ;)
 

Discussions similaires

Statistiques des forums

Discussions
312 362
Messages
2 087 635
Membres
103 617
dernier inscrit
cisco1