XL 2010 Réorganiser feuille excel depuis extraction access

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 !

Olivier49500

XLDnaute Nouveau
Bonjour à Tous,

Je souhaiterais réorganiser des données depuis une feuille excel où celles-ci sont enregistrées par colonne sous 4 tâches maxi et je souhaiterais les déplacer donc en 4 lignes maxi.
Est ce que quelqu'un pourrait m'orienter sur le code vba à utiliser ?
Je joins un fichier pour expliquer tout ça
 

Pièces jointes

Solution
Bonsoir

voila la nouvelle version.
J'ai testé sur 50000 lignes dans les données brutes soit environ 160000 lignes à inscrire dans la base, moins de cinq secondes sur mon PC.
Bonne soirée

Cordialement
VB:
Sub Traitement_Données_Brutes()
    Dim Tab_Données_Ori, Tab_Données(), Compteur As Long, Compteur2 As Byte, Compteur3 As Long, Compteur4 As Byte
    'création du tableau VB aux dimensions finales
    ReDim Tab_Données(1 To (ThisWorkbook.Sheets("Données Brutes").Range("A100000").End(xlUp).Row - 1) * 4, 1 To 12)
    'initialisation d'un variant en tableau de données brutes
    Tab_Données_Ori = ThisWorkbook.Sheets("Données Brutes").Range("A2:AH" & ThisWorkbook.Sheets("Données Brutes").Range("A100000").End(xlUp).Row).Value...
Bonjour JHA,
Tout d'abord, merci beaucoup de m'apporter ton soutien.
Je ne connaissais pas cette fonction et c'est plutôt intéressant. Par contre j'aurais préféré passer par une macro car il se peut qu'avec ce fichier, j'ai plus de 2000 lignes à réorganiser et donc cela fera environ 4000 dans feuille base.
De plus il faut aussi que cela m'importe les données des colonnes A à E sur chacune des lignes correspondantes.
As-tu une idée avec une macro ?
 
Bonjour Olivier, JHA, le forum

Voila la macro avec des tableaux VB, ce sera rapide même sur plusieurs milliers de lignes à traiter.
Je ne savais pas si tu voulais écraser les données existantes dans l'onglet base alors je les ajoute à la suite
Macro Traitement_Données_Brutes dans le fichier joint

Bien cordialement
VB:
Sub Traitement_Données_Brutes()
    Dim Tab_Données_Ori, Tab_Données() As String, Compteur As Long, Compteur2 As Byte, Compteur3 As Long, Compteur4 As Byte
    'création du tableau VB aux dimensions finales
    ReDim Tab_Données(1 To (ThisWorkbook.Sheets("Données Brutes").Range("A65536").End(xlUp).Row - 1) * 4, 1 To 12)
    'initialisation d'un variant en tableau de données brutes
    Tab_Données_Ori = ThisWorkbook.Sheets("Données Brutes").Range("A2:AH" & ThisWorkbook.Sheets("Données Brutes").Range("A65536").End(xlUp).Row).Value
    'écriture des données dans le tableau VB final à partir du variant tableau
    For Compteur = 1 To UBound(Tab_Données_Ori, 1)
        For Compteur2 = 1 To 4
            Compteur3 = (Compteur * 4) - 4 + Compteur2
            For Compteur4 = 1 To 5
                Tab_Données(Compteur3, Compteur4) = Tab_Données_Ori(Compteur, Compteur4)
            Next Compteur4
            For Compteur4 = 6 To 12
                Tab_Données(Compteur3, Compteur4) = Tab_Données_Ori(Compteur, Compteur4 + (7 * (Compteur2 - 1)))
            Next Compteur4
        Next Compteur2
    Next Compteur
    'désactivation affichage écran
    Application.ScreenUpdating = False
    'désactivation calcul auto
    Application.Calculation = xlCalculationManual
    'écriture des données du tableau VB dans la feuille Base
    ThisWorkbook.Sheets("Base").Range("A65536").End(xlUp).Range("A2:L" & UBound(Tab_Données) + 1).Value = Tab_Données
    'activation affichage écran
    Application.ScreenUpdating = True
    'activation calcul auto
    Application.Calculation = xlCalculationAutomatic
End Sub
 

Pièces jointes

Dernière édition:
Par exécution, la limite d'importation de lignes dans la base est de 32768 lignes soit 8192 lignes dans les données brutes, cela suffit il ou faut t'il augmenter ?
sinon tu modifies Compteur et Compteur3 en long
Compteur As Long, Compteur2 As Byte, Compteur3 As Long
et tu augmentes les valeurs 65536 jusqu'au nombre de lignes désirées mais cela ne fonctionnera pas sur des anciens formats de fichiers Xls, il faudra au moins du Xlsx/Xlsm où le nombre de lignes maximum par feuille est passé de 65536 à 16 millions.

Bien cordialement
 
Dernière édition:
Merci c'est top 👍👍👍
Juste 3/4 petits points si je peux abuser...

* Effectivement, je vais peut être augmenter le nb de lignes mais je ne comprends pas Compteur et Compteur 3 sont déjà en "As Long" ??? Il faut juste que j'augmente 65536 ?
* Serait il possible de supprimer les lignes dont le temps tâche = 0 (colonne F dans Base)
* Pourquoi les colonnes A, F et I dans Base sont au format texte ? est il possible de les mettre en format nombre ? De façon à pouvoir réaliser des calculs à la suite.
* Pourquoi les colonnes A,B et F ne sont pas alignées de la même manière ?

Merci d'avance pour tes réponses
 
* Effectivement, je vais peut être augmenter le nb de lignes mais je ne comprends pas Compteur et Compteur 3 sont déjà en "As Long" ??? Il faut juste que j'augmente 65536 ?
oui, pour les long, j'ai mis à jour le fichier avec les commentaires et j'avais modifié les variables en long
* Serait il possible de supprimer les lignes dont le temps tâche = 0 (colonne F dans Base)
tout est possible, je regarde
* Pourquoi les colonnes A, F et I dans Base sont au format texte ? est il possible de les mettre en format nombre ? De façon à pouvoir réaliser des calculs à la suite.
le tableau VB est de type texte, je vais le modifier en variant ce qui devrait régler le problème.
* Pourquoi les colonnes A,B et F ne sont pas alignées de la même manière ?
même réponse que la précédente, dans les cellules non formatées, l'alignement se fait en fonction du type de donnée
 
Bonsoir

voila la nouvelle version.
J'ai testé sur 50000 lignes dans les données brutes soit environ 160000 lignes à inscrire dans la base, moins de cinq secondes sur mon PC.
Bonne soirée

Cordialement
VB:
Sub Traitement_Données_Brutes()
    Dim Tab_Données_Ori, Tab_Données(), Compteur As Long, Compteur2 As Byte, Compteur3 As Long, Compteur4 As Byte
    'création du tableau VB aux dimensions finales
    ReDim Tab_Données(1 To (ThisWorkbook.Sheets("Données Brutes").Range("A100000").End(xlUp).Row - 1) * 4, 1 To 12)
    'initialisation d'un variant en tableau de données brutes
    Tab_Données_Ori = ThisWorkbook.Sheets("Données Brutes").Range("A2:AH" & ThisWorkbook.Sheets("Données Brutes").Range("A100000").End(xlUp).Row).Value
    'écriture des données dans le tableau VB final à partir du variant tableau
    Compteur3 = 0
    For Compteur = 1 To UBound(Tab_Données_Ori, 1)
        For Compteur2 = 1 To 4
            If Tab_Données_Ori(Compteur, 6 + (7 * (Compteur2 - 1))) > 0 Then 'on vérifie le temps de la tache > 0 avant d'inscrire la ligne
                Compteur3 = Compteur3 + 1
                For Compteur4 = 1 To 5
                    Tab_Données(Compteur3, Compteur4) = Tab_Données_Ori(Compteur, Compteur4)
                Next Compteur4
                For Compteur4 = 6 To 12
                    Tab_Données(Compteur3, Compteur4) = Tab_Données_Ori(Compteur, Compteur4 + (7 * (Compteur2 - 1)))
                Next Compteur4
            End If
        Next Compteur2
    Next Compteur
    'désactivation affichage écran
    Application.ScreenUpdating = False
    'désactivation calcul auto
    Application.Calculation = xlCalculationManual
    'écriture des données du tableau VB dans la feuille Base
    ThisWorkbook.Sheets("Base").Range("A400000").End(xlUp).Range("A2:L" & UBound(Tab_Données) + 1).Value = Tab_Données
    'activation affichage écran
    Application.ScreenUpdating = True
    'activation calcul auto
    Application.Calculation = xlCalculationAutomatic
End Sub
 

Pièces jointes

Dernière édition:
- 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

O
Réponses
7
Affichages
1 K
Olivier
O
Retour