Petite Macro VBA

Bonjour,
Voila j'ai un petit problème, j'ai une Macro a faire mais je ne sais pas du tout comment je pourrais faire .
J'explique ( en référence avec le fichier joint ), j'aimerais que la macro parcours chaque case de la colonne H temps qu'il y a une donner dedans et que si jamais un retour chariot est trouver il sépare les éléments comme dans le fichier exemple que j'ai fournie.
Je tableau ne doit pas être d'une longueur fixe.

Dans le fichier si joint il y a "Ce que j'ai " qui est le fichier d'entré et " Ce que je veux " qui est l résultat que je souhaiterait obtenir .
Merci d'avance du temps que vous accorderez pour m'aider.

Cordialement
Zelda

Bonjour,

une petite orientation :

tablo = Split(Range("H2").Value, Chr(10))
MsgBox Ubound(tablo)+1

vous donnera le nombre de donnée "répétées" dans une cellule de la colonne H

Pour scanner un nombre de ligne inconnu d'un tableau vous avez la fonction Do / Loop à laquelle il faut ajouter une condition de sortie et un incrément de ligne :

Sub Test()
ligne = 2
lignedest = 2
Do
    If Cells(ligne, 8).Value = "" Then Exit Do
    tablo = Split(Range("H" & ligne).Value, Chr(10))
    For i = 0 To UBound(tablo)
        ' ici le code pour recopier autant de fois que nécessaire les données de la ligne ligne sur la feuille de "sortie"
        ' avec comme valeur changeante celle se trouvant en colonne H
        ' qui correspond à la valeur de tablo(i)
        Feuil2.Range("A" & lignedest).Resize(, 12) = Feuil1.Range("A" & ligne).Resize(, 12)
        Feuil2.Range("H" & lignedest) = tablo(i)
        lignedest = lignedest + 1
    Next i
    ' on incrémente le numéro de ligne à scanner de la feuille source
    ligne = ligne + 1
Loop
End Sub

Attention ! Pas testé !

@ bientôt

LouReeD

Bonjour à tous,

Comme j'ai commencé dessus, je poste quand même mon résultat :

Sub separer()

Dim tdatas()

With Range("Data")
    For i = 1 To .Rows.Count
        If .Cells(i, 8).Value Like "*" & Chr(10) & "*" Then
            t = Split(.Cells(i, 8).Value, Chr(10))
            For j = LBound(t) To UBound(t)
                n = n + 1: ReDim Preserve tdatas(1 To .Columns.Count, 1 To n)
                For k = 1 To .Columns.Count
                    tdatas(k, n) = .Cells(i, k).Value
                Next k
                tdatas(8, n) = Application.Trim(Application.Clean(t(j)))
            Next j
        Else
            n = n + 1: ReDim Preserve tdatas(1 To .Columns.Count, 1 To n)
            For k = 1 To .Columns.Count
                tdatas(k, n) = .Cells(i, k).Value
            Next k
        End If
    Next i
    .Delete
    .Resize(n, .Columns.Count).Value = Application.Transpose(tdatas)
End With

End Sub

Le code dépend du nom du tableau renommé "Data". A tester avec un cas plus concret...

Cdlt,

Bonjour 3GB,
Effectivement cela marche a merveille.

Mais je n'arrive pas a l'intégrer dans mon vrai fichier.
Cela me met une erreur sur le Range de l'objet global.

Pouvez-vous essayer ( je met mon fichier original )

PS: il faudrait l'intégrer a la fin de la macro déjà existante.

Cordialement

Il faut renommer votre tableau "Data" ou modifier "Data" dans le code par le nom de votre tableau. Ensuite, il faut bien que les valeurs à séparer soient en colonne H (8). Sinon, il faudra aussi remplacer tous les 8 par le numéro de la colonne où se trouvent vos données multi-lignes.

Cdlt,

Et bien justement c'est ce que j'avais fais mais ça me met une erreur Range de l'objet Global.
Pourriez vous essaye ? et me renvoyer ?
Car vraiment tout seul le VBA Marche mais je n'arrive pas à l'intégrer.

Cordialement

Re,

Voici le fichier Pierre, avec une ptite modification du code car j'ai rencontré une petite erreur en essayant. Essayez quand même sur une copie au cas où...

Bonne soirée,

Bonjour,

Merci beaucoup du temps que vous avez accordez,

Mais en copiant le code de ce fichier dans mon fichier original sa me remet exactement la même erreur :(

Je comprend pas =)

sans titre

Bonjour à tous,

Au début du déclare "t as long" > ce qui donne l'erreur sur LBound(t) ...

T doit être Variant ...

ric

Bonjour,

AH

Et je le définis en string ?

Pierre

Bonjour Pierre, Salut Ric ,

Est-ce que vous faites exprès ? Ric vient de dire en variant.

Vous m'avez demandé d'adapter le code à VOTRE fichier, ce que j'ai fait je crois. Le lendemain, vous modifiez tout. Vous ne passerez pas la première ligne puisque le code dépend d'un tableau structuré nommé "Data", je l'ai renommé sur votre fichier justement. Les noms des variables du code importent peu...

Bonjour,

J'ai copier Ctrl+C et Ctrl+V votre code, rien n'a été changé !

de plus une feuille a disparue dans le fichier, désole mais je n'est rien modifier du tout a part le nom pour que cela correspond

Vous vous êtes peut-être trompé de fichier, et d’ailleurs sur votre fichier ou je n'ai rien toucher sa ne marche pas plus sa me fais la même erreur :(

Et même en Variant j'ai la même erreur.

sans titre

Vous voyez, on ne passe pas la première ligne...

Il y a 2 conditions nécessaires avec ce code (celui du dernier fichier joint) :

Les données doivent être mises sous forme d'un tableau structuré nommé "Data".

La colonne de séparation doit être la numéro 8.

Il est malgré tout possible d'adapter le code mais je ne trouve pas que ce soit sorcier sachant que je l'ai fait pour vous. Et ce qui m'agace, c'est que je vois, à nouveau, le lendemain range("ce que je veux").

Pour créer un tableau structuré, se positionner sur une cellule du tableau, allez dans Accueil/mettre sous forme de tableau/avec entêtes puis renommez le Data.

Si ça ne marche toujours pas, je regarderai.

Edit : Et sur votre image, c'est le premier code, pas le second !

Bonjour,

Mais je ne peux pas changer le fichier je voudrais juste intégrer votre code a mon fichier de base et pas un autre et même en fessant le tableau sa ne marche pas!

je suis désole, je fais tout ce que vous dites mais sa ne marche pas, mais mais mais quand je prend les résultats de mon fichier que je les copient dans un fichier .Xlsm vièrge la sa marche !!! Mais je doit absolument le mettre dans le même fichier et la est mon problème! C'est assez bizarre.

Je vous remet mon fichier au qu'elle il ne faut rien modifier ( a part essayer d'intégrer le code :) ), il faut exécuter les macro en étant sur la feuille " Ce que je veux (2). L'autre feuille c'est la ou je met mes données ( car oui je peux changer la longueur du fichier ). Il faudrait juste réussir a intégrer votre bout de code dans mon truc, mais j'y arrive pas même en suivant vos conseil.

Cordialement

Re bonjour,

Après un peux de recherche j'ai découvert que mon tableau n'avais juste pas le bon nom ( il était nommé en mode caché ).

J'ai donc modifié le nom et sa marche à la perfection !

Merci a vous tous

Cordialement

Pierre

Merci Pierre d'avoir fait cette recherche et d'être revenu le dire ! Je pense qu'il y avait un malentendu entre les tableaux dynamiques et les tableaux structurés d'Excel.

Je suis content que ça marche enfin !

Cdlt,

Re,

Oui exactement il y avait un problème de ce genre, j'ai donc renommé le tableau comme tu me l'avais dit "Data" et ça marche du tonner!!

Merci beaucoup.

Bonne continuation

Cordialement

Pierre

Rechercher des sujets similaires à "petite macro vba"