XL 2010 Reconstruire un tableau

cathodique

XLDnaute Barbatruc
Bonjour,

Dans le fichier joint feuille bd, la copie d'un tableau structuré de mon fichier de travail alimenté via un formulaire.
en colonne G et H donnée obtenu avec un saut de ligne (le caractère utilisé dans le code de transfert est Chr(10)).
Je voudrai obtenir le tableau de la feuille résultat. La consultation du fichier sera plus explicite.
tableau départ
1713418917787.png


tableau résultat
1713418965355.png


En vous remerciant.
 

Pièces jointes

  • Reconstruire tableau.xlsm
    26.8 KB · Affichages: 4
Dernière édition:
Solution
J'attends de voir comment sylvanu va traiter votre sujet
😅 C'est de l'abus ou un challenge ? 😅

Un essai en PJ avec :
VB:
Sub Worksheet_Activate()
Application.ScreenUpdating = False
Dim T, Tsortie, TabloTransfert, DL%, DLS%, N%, L%
TabloTransfert = Array(0, 8, 7, 1, 2, 3, 4, 5, 6, 9) ' Array de permutation de champs tableau de sortie vs tableau entrée.
ReDim Tsortie(1 To 10000, 1 To 9)                   ' Tableau de sortie, gde taille par défaut
T = [TbS]                                           ' Transfert tableau dans array
DLS = 0                                             ' Init N° ligne écriture dans array de sortie Tsortie
For DL = 1 To UBound(T)                             ' Pour toutes les lignes du tableau
    DLS = DLS...

Oneida

XLDnaute Impliqué
Re,
de mon fichier de travail alimenté via un formulaire.

Mettre un fichier XLSM sans code ca le fait moyen. Pour moi, c'est dans le code du formulaire que les modifs sont a faire a supposer evedement qu'il y ait du code dans votre fichier "de travail"
 

cathodique

XLDnaute Barbatruc
Re,
de mon fichier de travail alimenté via un formulaire.

Mettre un fichier XLSM sans code ca le fait moyen. Pour moi, c'est dans le code du formulaire que les modifs sont a faire a supposer evedement qu'il y ait du code dans votre fichier "de travail"
Il me semble que ma demande ne concerne pas mon fichier de travail.
Je ne veux rien modifier à mon fichier de travail.
Je cherche à transformer le tableau extrait de mon fichier de travail pour l'exploiter dans un autre fichier.
Apparemment, tu n'as pas bien compris ma demande.
Maintenant, si tu es disposé à m'aider (vocation de ce forum), je t'en remercie.
Sinon, passe ton chemin car je n'ai ni le temps, ni l'envie de répondre à des messages qui n'apportent rien à cette discussion, ni au forum.

Bonne journée.
 

Oneida

XLDnaute Impliqué
Il me semble que ma demande ne concerne pas mon fichier de travail.
Je ne veux rien modifier à mon fichier de travail.
Je cherche à transformer le tableau extrait de mon fichier de travail pour l'exploiter dans un autre fichier.
Apparemment, tu n'as pas bien compris ma demande.
Maintenant, si tu es disposé à m'aider (vocation de ce forum), je t'en remercie.
Sinon, passe ton chemin car je n'ai ni le temps, ni l'envie de répondre à des messages qui n'apportent rien à cette discussion, ni au forum.

Bonne journée.
Re,
J'attends de voir comment sylvanu va traiter votre sujet
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
J'attends de voir comment sylvanu va traiter votre sujet
😅 C'est de l'abus ou un challenge ? 😅

Un essai en PJ avec :
VB:
Sub Worksheet_Activate()
Application.ScreenUpdating = False
Dim T, Tsortie, TabloTransfert, DL%, DLS%, N%, L%
TabloTransfert = Array(0, 8, 7, 1, 2, 3, 4, 5, 6, 9) ' Array de permutation de champs tableau de sortie vs tableau entrée.
ReDim Tsortie(1 To 10000, 1 To 9)                   ' Tableau de sortie, gde taille par défaut
T = [TbS]                                           ' Transfert tableau dans array
DLS = 0                                             ' Init N° ligne écriture dans array de sortie Tsortie
For DL = 1 To UBound(T)                             ' Pour toutes les lignes du tableau
    DLS = DLS + 1                                   ' On incrémente la ligne d'écriture de Tsortie
    T(DL, 8) = T(DL, 8) & Chr(10)                   ' On ajoute un chr(10) à la fin, on en a donc toujours au moins 1
    T7chr10 = Split(T(DL, 7), Chr(10))              ' On sépare les champs de N° de dossier
    T8chr10 = Split(T(DL, 8), Chr(10))              ' On sépare les champs de ID
    For N = 0 To UBound(T8chr10) - 1                ' Pour tous les ID ( -1 ligne car la dernière est vide )
        For L = 1 To 9                              ' Transfert ligne avec permutation données
            Tsortie(DLS, L) = T(DL, TabloTransfert(L))
        Next L
        Tsortie(DLS, 1) = T8chr10(N)                ' Inscription ID
        Tsortie(DLS, 2) = T7chr10(N)                ' Inscription N° dossier
        DLS = DLS + 1                               ' Procheine ligne
    Next N
    DLS = DLS - 1                                   ' Quand on sort on supprime la ligne vide du dernier for
Next DL
[TbId].ListObject.DataBodyRange.Delete              ' On efface le tableau résultat
[TbId].Item(1, 1).Resize(DLS, UBound(Tsortie, 2)) = Tsortie  ' On écrit le tableau de sortie
End Sub
La macro est automatique quand on sélectionne la feuille "Résultat"
 

Pièces jointes

  • Reconstruire tableau.xlsm
    20.7 KB · Affichages: 1

Oneida

XLDnaute Impliqué
😅 C'est de l'abus ou un challenge ? 😅

Un essai en PJ avec :
VB:
Sub Worksheet_Activate()
Application.ScreenUpdating = False
Dim T, Tsortie, TabloTransfert, DL%, DLS%, N%, L%
TabloTransfert = Array(0, 8, 7, 1, 2, 3, 4, 5, 6, 9) ' Array de permutation de champs tableau de sortie vs tableau entrée.
ReDim Tsortie(1 To 10000, 1 To 9)                   ' Tableau de sortie, gde taille par défaut
T = [TbS]                                           ' Transfert tableau dans array
DLS = 0                                             ' Init N° ligne écriture dans array de sortie Tsortie
For DL = 1 To UBound(T)                             ' Pour toutes les lignes du tableau
    DLS = DLS + 1                                   ' On incrémente la ligne d'écriture de Tsortie
    T(DL, 8) = T(DL, 8) & Chr(10)                   ' On ajoute un chr(10) à la fin, on en a donc toujours au moins 1
    T7chr10 = Split(T(DL, 7), Chr(10))              ' On sépare les champs de N° de dossier
    T8chr10 = Split(T(DL, 8), Chr(10))              ' On sépare les champs de ID
    For N = 0 To UBound(T8chr10) - 1                ' Pour tous les ID ( -1 ligne car la dernière est vide )
        For L = 1 To 9                              ' Transfert ligne avec permutation données
            Tsortie(DLS, L) = T(DL, TabloTransfert(L))
        Next L
        Tsortie(DLS, 1) = T8chr10(N)                ' Inscription ID
        Tsortie(DLS, 2) = T7chr10(N)                ' Inscription N° dossier
        DLS = DLS + 1                               ' Procheine ligne
    Next N
    DLS = DLS - 1                                   ' Quand on sort on supprime la ligne vide du dernier for
Next DL
[TbId].ListObject.DataBodyRange.Delete              ' On efface le tableau résultat
[TbId].Item(1, 1).Resize(DLS, UBound(Tsortie, 2)) = Tsortie  ' On écrit le tableau de sortie
End Sub
La macro est automatique quand on sélectionne la feuille "Résultat"
Bonjour Sylvau,
Rien de tout cela 👽
Perso, le code doit s'ecrire dans le formulaire vu que c'est le traitement du formulaire qui ne correspond pas a l'attente de cette personne. Epithete qu'il n'y connait vraiment rien de ce qu'il y a dans son formulaire. Plutot irracible le gars, mais pas grave. Je lui souhaites bon vent quand meme
 

cathodique

XLDnaute Barbatruc
Perso, le code doit s'ecrire dans le formulaire vu que c'est le traitement du formulaire qui ne correspond pas a l'attente de cette personne. Epithete qu'il n'y connait vraiment rien de ce qu'il y a dans son formulaire. Plutot irracible le gars, mais pas grave. Je lui souhaites bon vent quand meme
Aigri dès le matin. Ce n'est pas bon pour la santé.
Lorsqu'on ne comprend pas la demande. Le plus sage est de s'abstenir.
En tout cas tu as le mérite de m'avoir convaincu de te mettre dans la liste des indésirables.
Je t'assure qu'ils sont très peu. Tu en fais partir dés cet instant.
 

cathodique

XLDnaute Barbatruc
😅 C'est de l'abus ou un challenge ? 😅

Un essai en PJ avec :
VB:
Sub Worksheet_Activate()
Application.ScreenUpdating = False
Dim T, Tsortie, TabloTransfert, DL%, DLS%, N%, L%
TabloTransfert = Array(0, 8, 7, 1, 2, 3, 4, 5, 6, 9) ' Array de permutation de champs tableau de sortie vs tableau entrée.
ReDim Tsortie(1 To 10000, 1 To 9)                   ' Tableau de sortie, gde taille par défaut
T = [TbS]                                           ' Transfert tableau dans array
DLS = 0                                             ' Init N° ligne écriture dans array de sortie Tsortie
For DL = 1 To UBound(T)                             ' Pour toutes les lignes du tableau
    DLS = DLS + 1                                   ' On incrémente la ligne d'écriture de Tsortie
    T(DL, 8) = T(DL, 8) & Chr(10)                   ' On ajoute un chr(10) à la fin, on en a donc toujours au moins 1
    T7chr10 = Split(T(DL, 7), Chr(10))              ' On sépare les champs de N° de dossier
    T8chr10 = Split(T(DL, 8), Chr(10))              ' On sépare les champs de ID
    For N = 0 To UBound(T8chr10) - 1                ' Pour tous les ID ( -1 ligne car la dernière est vide )
        For L = 1 To 9                              ' Transfert ligne avec permutation données
            Tsortie(DLS, L) = T(DL, TabloTransfert(L))
        Next L
        Tsortie(DLS, 1) = T8chr10(N)                ' Inscription ID
        Tsortie(DLS, 2) = T7chr10(N)                ' Inscription N° dossier
        DLS = DLS + 1                               ' Procheine ligne
    Next N
    DLS = DLS - 1                                   ' Quand on sort on supprime la ligne vide du dernier for
Next DL
[TbId].ListObject.DataBodyRange.Delete              ' On efface le tableau résultat
[TbId].Item(1, 1).Resize(DLS, UBound(Tsortie, 2)) = Tsortie  ' On écrit le tableau de sortie
End Sub
La macro est automatique quand on sélectionne la feuille "Résultat"
Rebonjour @sylvanu 👏 👏 👏 👏 👏 👏 :cool::cool::cool::cool:

Avant tout, mes excuses d'avoir répondu à @Oneida avant toi, il n'a pas compris ma demande.
Il a fini par toucher une corde sensible pour l'ignorer afin qu'il ne m'importune plus.

Je te remercie infiniment, c'est parfait. Je savais qu'il fallait utiliser la fonction Split.
Mais je n'ai pas su comment m'y prendre.
En fait, je n'aurai besoin que du tableau Tsortie à exploiter.

Tu me rends un grand service.
Encore merci.

Excellente journée.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
il n'a pas compris ma demande.
Généralement quand un contributeur ne comprends pas la demande c'est que la demande est ambigüe, peu précise, trop vague.
Dans ce cas le contributeur comprends ou pas. Dans ce cas on fait un peu au pif ou on demande des précisions.
Mais inutile d'être agressif envers quelqu'un qui essaye de vous aider. :)
 

cathodique

XLDnaute Barbatruc
Généralement quand un contributeur ne comprends pas la demande c'est que la demande est ambigüe, peu précise, trop vague.
Dans ce cas le contributeur comprends ou pas. Dans ce cas on fait un peu au pif ou on demande des précisions.
Mais inutile d'être agressif envers quelqu'un qui essaye de vous aider. :)
J'ai fait un gros effort pour être le plus explicite possible.
Je lui ai répondu très poliment. lui expliquant qu'il s'agissait d'un tableau issu de mon fichier de travail.
Pour lui, il fallait intervenir au niveau de mon formulaire pour réorganiser mon tableau initial comme demander dans cette discussion.
Stp, relis le début de la discussion pour te rendre compte qu'il n'a pas essayé de m'aider mais plutôt autre chose...
Enfin, j'ai décidé de rejeter son aide à l'avenir.

Je te remercie infiniment.
 

Statistiques des forums

Discussions
312 293
Messages
2 086 866
Membres
103 402
dernier inscrit
regishar