Bonjour
Idem, avec des noms.
La PlageA est une plage dynamique, donc dont la hauteur s'adapte au nombre de données dans la colonne A. Les autres noms sont définis, directement ou indirectement, par rapport à cette PlageA.
@ plus
P.S : Tout fonctionne en comptant le nombre de virgules dans les colonnes B et C. S'il en manque une, ou s'il y en a une en trop, le résultat obtenu ne sera pas correct.
=SUBSTITUE(SUPPRESPACE(INDEX(PlageB;EQUIV(Data!$J1;PlageA;0)));", ,";",")
=SUBSTITUE(SUPPRESPACE(INDEX(PlageB;EQUIV(Data!$J2;PlageA;0)));", ,";",")
Bonjour Cisco,
...
Par contre, j'aurai également deux petites questions, est-ce que on pourrait imaginer que le tableau s'agrandissent tout seul sans être obligé d'étirer les cellules (dans l'idéal sans recourir au macro).
....
Option Explicit
Sub test()
Dim a, b(), x, y, i As Long, ii As Byte, iii As Byte, n As Long
a = Sheets("Data").Range("a1").CurrentRegion.Value
'attention a la 1ere dimension
ReDim b(1 To UBound(a, 1) * 100, 1 To UBound(a, 2))
n = 1
b(n, 1) = a(1, 1): b(n, 2) = a(1, 2): b(n, 3) = a(1, 3)
For i = 2 To UBound(a, 1)
y = Split(a(i, 2), ",")
x = Split(a(i, 3), ",")
For ii = 0 To UBound(x)
For iii = 0 To UBound(y)
n = n + 1
b(n, 1) = a(i, 1)
b(n, 3) = x(ii)
b(n, 2) = y(iii)
Next
Next
Next
With Sheets.Add().Cells(1).Resize(n, 3)
.Value = b
.Columns.AutoFit
End With
End Sub
Bonjour
Pour supprimer les espaces liés à la présence d'une virgule suivie d'un espace, puis d'une autre virgule dans la colonne B, il faut, après avoir sélectionné une cellule de la ligne 2, remplacer la définition de CelluleB dans le gestionnaire de noms par
et de CelluleBbis parCode:=SUBSTITUE(SUPPRESPACE(INDEX(PlageB;EQUIV(Data!$J1;PlageA;0)));", ,";",")
Code:=SUBSTITUE(SUPPRESPACE(INDEX(PlageB;EQUIV(Data!$J2;PlageA;0)));", ,";",")
Si tu risques d'avoir certaines fois deux virgules l'une après l'autre, sans espace entre elles, il faudra transformer ces dernières propositions avec un SUBSTITUE(formule ci-dessus;",,";",").
Si tu as le même problème sur la colonne C, il faut modifier en conséquence CelluleC et CelluleCbis.
Pour ce qui est de remplir les colonnes E, F, G et H, c'est plus compliqué. J'y réfléchi, mais je ne vois pas comment faire avec des formules pour que les dates obtenues n'évoluent pas dans le temps.
@ plus
Bonjour
Et pour cela, là aussi, je ne vois pas trop comment faire... Tu peux toujours tirer les formules, après avoir sélectionné les cellules de la dernière ligne contenant des formules, très, très bas...
@ plus
Bonsoir qtn.leclerc, CISCO, le forum
Pourquoi pas une macro
klin89VB:Option Explicit Sub test() Dim a, b(), x, y, i As Long, ii As Byte, iii As Byte, n As Long a = Sheets("Data").Range("a1").CurrentRegion.Value 'attention a la 1ere dimension ReDim b(1 To UBound(a, 1) * 100, 1 To UBound(a, 2)) n = 1 b(n, 1) = a(1, 1): b(n, 2) = a(1, 2): b(n, 3) = a(1, 3) For i = 2 To UBound(a, 1) y = Split(a(i, 2), ",") x = Split(a(i, 3), ",") For ii = 0 To UBound(x) For iii = 0 To UBound(y) n = n + 1 b(n, 1) = a(i, 1) b(n, 3) = x(ii) b(n, 2) = y(iii) Next Next Next With Sheets.Add().Cells(1).Resize(n, 3) .Value = b .Columns.AutoFit End With End Sub
Bonjour @CISCO,
J'essayé en modifiant actuellement les données dans le gestionnaire de noms car en effet le cas peut se produire pour chacune des colonnes mais malheureusement cela vide entièrement ton tableau ...
...
Merci pour ton aide,
@CISCO , Oui en effet on pourrait tirer les formules jusqu'en bas, très très bon mais cela fait pas forcément très propre, non ?
Bonjour @CISCO,
...
Pour ce qui est du blocage des cellules, je cherche mais pour le moment rien de concret de mon côté et toi as-tu réussi à trouver quelque chose qui pourrait convenir ? Le principal problème étant de réussir à figer la cellule pour qu'elle arrête de changer.
Merci pour ton aide,