Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Transposition spécifique

  • Initiateur de la discussion Initiateur de la discussion anber
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

anber

XLDnaute Occasionnel
Bonjour le Forum,

Je bute sur une solution VBA pour transposer des données en fonction du nombre de valeurs séparées par des ;
dans d'autres colonnes.
Je ne sais pas si si assez claire comme explication
Ci-joint un fichier pour exemple

Merci

Bon WE
 

Pièces jointes

Bonsoir à tous, 🙂

Si tu tiens vraiment à compter les occurrences en colonne B :
VB:
Sub test()
    With Sheets("feuil1").Range("a1").CurrentRegion
        With .Offset(1).Resize(Rows.Count - 1)
            x = UBound(Split(Join(Application.Transpose(.Columns(2).SpecialCells(2)), ";"), ";")) + 1
            MsgBox x
        End With
    End With
End Sub
Génère une erreur en cas de cellules vides
klin89
 
Bonjour klin89, le Forum,
Ce ne n'est tout à fait ce que je cherche, je ne veux pas le cumul de toute la colonne
mais compter cellule par cellule les ; et lorsqu'il en a, reporter d'autant de lignes que de ; +1
c'est le résultat qu'a obtenu @Staples1600 d'une autre manière
Merci d'avoir répondu
 
Bonsoir le fil, le forum

Bonjour Staple1600, le Forum
Un cas que je n'avais pas vu :
s'il y a d'autres cellules avec ; dans la colonne B, ce ne pas pris en compte
Regarde la pièce jointe 1000469
Si j'étais moi, j'adopterai le code de Si...
Et comme je suis moi, je me corrigerai

NB: A tester sur la PJ de Si...
(testé sans lignes vides dans Tbo)
VB:
Sub d()
Dim i&, x&, y&, t
[Tbo].Copy
On Error Resume Next
Sheets.Add
ActiveSheet.Paste
ActiveSheet.Name = "$$$"
For i = Cells(Rows.Count, "B").End(xlUp).Row To 2 Step -1
If InStr(Cells(i, "B"), ";") > 0 Then
t = Split(Cells(i, "B"), ";")
x = Cells(i, "B").Offset(1).Row
y = UBound(t)
Rows(x).Resize(y).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Cells(i, "B").Resize(y + 1) = Application.Transpose(t)
Cells(i, "A").Resize(y + 1).FillDown
Cells(i, "C").Resize(y + 1).FillDown
End If
Next
[A1].CurrentRegion.Copy Feuil1.[F2]
Application.DisplayAlerts = False
Sheets("$$$").Delete
End Sub
 
Re

Premier tour :


Après la suppression de lignes du tableau Tbo précédée de suppresion de la ligne de code [F2:H65000] = ""


Doit-on garder les lignes grisées superflues ? Dans le doute, j'ai prévu de les supprimer.

Pour les garder il suffirait de la déplacer la ligne
VB:
Private Sub Worksheet_SelectionChange(ByVal R As Range)
  If R.Address <> [E2].Address Then Exit Sub  'pour lancer
  [F2:H65000] = ""
  '...
Staple , c'est parce que T bo est beau que tu en fais une copie ?
Il me semble que tu prends un canon pour tuer un moustique. Libre à toi de le faire mais attention aux dégats. Tu risques de coucher à la belle étoile 😵 !
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
6
Affichages
258
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…