Copier un tableau en déplaçant les colonnes

GTT-76

XLDnaute Nouveau
Bonjour ! :)

J'utilise un logiciel duquel je peux extraire des données sous forme de tableur Excel simple (xls). Nous sommes plusieurs à nous en servir.
A partir de là, on exporte les données dans un autre classeur, dans lequel ces données sont exploitées pour d'autres applications.
L'import se passe très bien, aucun problème de ce côté-là.
Mais...
Avant d'exporter ces données, le logiciel les affiche sous forme de tableau. Et dans ce tableau, chaque utilisateur peut à sa convenance déplacer les colonnes comme il l'entend (pour raisons diverses). Malheureusement, lorsqu'on exporte les données, l'export conserve la mise en page de l'utilisateur.
Et comme plusieurs utilisateurs utilisent ce logiciel et que chacun a sa mise en page propre, je souhaite que chacun puisse exporter les données sous sa mise en page propre et qu'on puisse ensuite retravailler cet export afin de déplacer les colonnes dans un ordre spécifique, sachant que le nombre de colonnes est conséquent (56) et que vérifier le canevas d'export manuellement à chaque fois n'est pas envisageable.
Est-ce possible, à votre connaissance ?
Précision : j'utilise des tableaux structurés.

En vous remerciant par avance de vous pencher sur le sujet. ;)
 

GTT-76

XLDnaute Nouveau
Bien compris, j'ai activé l'option et la macro se lance.
Mais...:p
J'ai un souci ; un message d'erreur "Opération avortée" et quand je regarde le journal, ligne 5 :
Erreur : Microsoft OLE DB Provider for ODBC Drivers
[Microsoft][Pilote ODBC Excel] « » n’est pas un nom valide. Assurez-vous qu’il ne comprend pas de caractère ou de ponctuation incorrect et qu’il n’est pas trop long.

Les cellules "vides" seraient donc le problème car elle ne seraient pas réellement vides lorsque l'on exporte les données du logiciel sous format Excel. Y'a-t-il moyen de contourner le problème ? Car si je vide manuellement les cellules "vides" du fichier à agréger, la macro fonctionne.
 

patricktoulon

XLDnaute Barbatruc
bonsoir
Bonsoir, je suis surpris,
ce sont les utilisateurs qui provoquent l'export vers le Classeur final et ce dans la même feuille ?
C'est donc le dernier qui gagne ... :rolleyes:
je suis tout a fait d'accords avec fanch55 c'est ABSURDE
si tu impose pas un ordre de tableau bien précis tu va droit dans le mur

et comme dit Bigard "c'est quand on a le nez devant le mur que l'on voit mieux le mur" LOL
alors t'en fait pas t'es pas loin ;)
 

fanch55

XLDnaute Barbatruc
Qu'entendez-vous par vider les cellules vides ?
Qu'y a-t-il dans la ligne 4 du journal, juste avant l'erreur ?
En fait, les données vides ou non ne sont pas importantes,
il faut juste que les noms de colonnes soient renseignés et identiques partout quel qu'en soit l'ordre .
 
Dernière édition:

fanch55

XLDnaute Barbatruc
Désormais, ce sont les espaces après certains mots qui posent problème.
J'ai des colonnes où il y a une vingtaine d'espaces après le dernier mot du titre.
Si ce ne sont que des espaces, la requête devrait s'en sortir.
Je pense plutôt qu'il y a des caractères parasites non affichables dans les colonnes.
Typique si c'est une extraction faite par des logiciels comme SAP et autres consorts .
Pourriez-vous me fournir un fichier réel sans les données confidentielles, juste les entêtes .
 

GTT-76

XLDnaute Nouveau
Bonjour,

Je viens de me rendre compte que dans le dernier Zip fourni, le fichier ne fonctionne pas correctement car s'il importe le bon nombre de lignes, les données importées sont en fait les noms des en-têtes sur chaque ligne.

capture.png
 

fanch55

XLDnaute Barbatruc
Effectivement, j'avais juste vérifié que le "." passait l'étape du Select .

J'ai enfin réussi à résoudre ces problèmes de point non décrit ou mal dans les specs d'Odbc pour Excel. :mad:

J'ai failli chercher une autre voie mais j'ai trouvé la solution dans les tréfonds des Composants Ado en les traçants point par point, propriété par propriété. Que ce fut long !!!o_O

Bref, ci-joint le zip corrigé ( je supprime les autres ).
De plus, vous pourrez sélectionner plusieurs fichiers en entrée par la suite après les vérifs :cool:

Au fait, les fichiers users ont été remplis pour test en langue différente et ce pour bien les différencier dans le Tableau final .... :)
 

Pièces jointes

  • Gtt.zip
    84.2 KB · Affichages: 5
Dernière édition:

GTT-76

XLDnaute Nouveau
Bonjour !
Tout d'abord, un GRAND MERCI pour le travail effectué !
J'ai fait quelques tests rapides et ça a l'air de fonctionner parfaitement.
Je vais donc essayer de l'adapter à mon projet de manière définitive et je reviens vers vous pour le feedback.
Question subsidiaire : le module Zone_Ado, à quoi sert-il précisément ? Dois-je l'inclure à mon projet ? Merci. :)
 

GTT-76

XLDnaute Nouveau
Encore une précision ,svp. :cool:
Dans le cas où le fichier source est unique (l'équivalent des User1, User2, etc), y'a-til moyen de simplifier cette partie du code pour définir précisément l'adresse du fichier (partant du principe qu'il est dans un sous-dossier du fichier cible) ?
VB:
    With Application.FileDialog(msoFileDialogFilePicker)
        .Title = "Importer un Tableau"

        .AllowMultiSelect = True
        .InitialFileName = ThisWorkbook.Path & "\CONF\Extractions\Export.xls"
        .Filters.Clear: .Filters.Add "Tableau", "*.xls*"
        If .Show Then
            For Each Elem In .SelectedItems
                Importer CStr(Elem)
            Next
            [Tableau_Cible].Range.Columns.AutoFit
            If Err = 0 Then Show_Msg "Importation réussie", 11892015
        End If
    End With

Ceci afin que l'import se fasse sans qu'une fenêtre demandant le fichier à importer ne s'ouvre.
Remarquez que j'ai déjà volontairement changé le code pour y coller l'adresse du mon fichier source, ce qui le sélectionne automatiquement lors de la demande d'ouverture du classeur :
Code:
        .InitialFileName = ThisWorkbook.Path & "\CONF\Extractions\Export.xls"

Mais je garde l'idée de l'import multi-fichiers , ça me servira sûrement pour un autre projet ! :D
 

fanch55

XLDnaute Barbatruc
Dans le cas où le fichier source est unique (l'équivalent des User1, User2, etc), y'a-til moyen de simplifier cette partie du code pour définir précisément l'adresse du fichier (partant du principe qu'il est dans un sous-dossier du fichier cible) ?

Pas de problème :
  • Soit vous modifiez le code selon l'exemple ci-dessous
  • Soit vous incluez la Sub en entier dans votre module (elle n'a pas le même nom que l'autre)

VB:
Sub Import()
Dim Msg     As String
If [Tableau_Cible] Is Nothing Then Auto_Open

    Delete_Msg
    Log
   
    If [Tableau_Cible].DataBodyRange Is Nothing _
     Then Msg = "Agrégation en mode ""Nouvelle Table""" _
     Else Msg = "Agrégation en mode ""Ajout"""
    Log Msg
   
    Importer ThisWorkbook.Path & "\CONF\Extractions\Export.xls"
   
    [Tableau_Cible].Range.Columns.AutoFit
    If Err = 0 Then Show_Msg "Importation réussie", 11892015
   
    Log "End"
   
End Sub

Si vous l'incluez :
Soit vous modifiez le bouton existant en le faisant pointer vers la nouvelle Sub :
1588094694708.png
1588094714206.png

Soit vous créez un nouveau bouton avec la nouvelle sub .
 

Discussions similaires

Réponses
1
Affichages
199

Statistiques des forums

Discussions
312 329
Messages
2 087 327
Membres
103 516
dernier inscrit
René Rivoli Monin