XL 2010 Réorganiser feuille excel depuis extraction access

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

  • Traitement Base.xlsm
    17.3 KB · Affichages: 11
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...

JHA

XLDnaute Barbatruc
Bonjour à tous,

A essayer avec decaler()
VB:
=SIERREUR(DECALER('Données Brutes'!$A$1;1;PETITE.VALEUR(SI('Données Brutes'!A$1:AH$1=F$1&LIGNE()-1;COLONNE('Données Brutes'!A$1:AH$1)-1);1));"")
Validation matricielle

JHA
 

Pièces jointes

  • Traitement Base.xlsm
    19.8 KB · Affichages: 3

Olivier49500

XLDnaute Nouveau
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 ?
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
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

  • Copie de Traitement Base.xlsm
    22.3 KB · Affichages: 3
Dernière édition:

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
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:

Olivier49500

XLDnaute Nouveau
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
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
* 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
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
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

  • Copie de Traitement Base.xlsm
    24 KB · Affichages: 3
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 348
Messages
2 087 508
Membres
103 568
dernier inscrit
NoS