Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2013 Importation de données dans un template et valeurs mal placées.

Leguyl

XLDnaute Occasionnel
Bonjour à tou(te)s,

Désolé pour le titre peu clair, je ne sais que mettre. Si vous en avez un meilleur, je changerais.

J'importe, dans un tableau structuré, les données utiles provenant de l'export xls d'un échéancier clients.

Cet export n'est, bien sûr, pas parfait et comporte des colonnes et autres données inutiles que je n'importe pas et des lignes vides automatiquement supprimées, là n'est pas le souci.

Le souci est que, dans le fichier source, les noms des clients ne se trouvent pas dans une colonne qui leur est dédiée mais dans la même colonne que les références, juste au dessus de celles-ci. Les références sous le nom d'un client sont toutes en rapport avec celui-ci.

A gauche, ce que j'obtiens après import des données, à droite, ce que j'aimerais obtenir :



Je pense que vous comprendrez mieux avec un exemple, voir fichier joint.

Dans la feuille Import du classeur, les données telles qu'elles sont importées dans le tableau
Et dans la feuille Résultat, ce que j'aimerais obtenir.

Merci d'avance à qui pourra m'aider.

Bonne journée,
Leguyl
 

Pièces jointes

  • Échéancier clients test.xlsm
    38.8 KB · Affichages: 10
Solution
Bonjour

Si tu as la possibilité d'installer l'add on PowerQuery (intégré çà Excel à partir de 2016) ce pourrait être assez facile et rapide à traiter sans VBA

Sinon
VB:
With Range("TabImport").ListObject.DataBodyRange
    For I = 1 To .Rows.Count
        If .Cells(I, 3) = "" Then
            .Cells(I, 1) = .Cells(I, 2)
        Else
            .Cells(I, 1) = .Cells(I - 1, 1)
        End If
    Next I
   
    For I = .Rows.Count To 1 Step -1
        If .Cells(I, 1) = .Cells(I, 2) Then .Rows(I).Delete
    Next I

End With
Selon la taille du tableau il peut être intéressant de passer par un array...

chris

XLDnaute Barbatruc
Bonjour

Si tu as la possibilité d'installer l'add on PowerQuery (intégré çà Excel à partir de 2016) ce pourrait être assez facile et rapide à traiter sans VBA

Sinon
VB:
With Range("TabImport").ListObject.DataBodyRange
    For I = 1 To .Rows.Count
        If .Cells(I, 3) = "" Then
            .Cells(I, 1) = .Cells(I, 2)
        Else
            .Cells(I, 1) = .Cells(I - 1, 1)
        End If
    Next I
   
    For I = .Rows.Count To 1 Step -1
        If .Cells(I, 1) = .Cells(I, 2) Then .Rows(I).Delete
    Next I

End With
Selon la taille du tableau il peut être intéressant de passer par un array...
 
Dernière édition:

Leguyl

XLDnaute Occasionnel
Bonjour Chris,

En fait, on ne le voit pas sur les captures d'écran, mais les lignes où apparaît un nom de client dans Réf, ne contiennent aucune valeur dans toutes les autres colonnes. Effacer ces lignes lorsque les noms de clients seront bien placés est assez simple, mais...

J'ai bien Power Query sur mon propre PC mais pas sur celui du boulot. Et même avec Power Query, je ne vois pas comment retrouver les noms des clients au bon endroit.
 

Leguyl

XLDnaute Occasionnel
Oups je n'avais pas vu, qu'entre temps, vous aviez édité votre réponse et ajouté un code VBA.

Cette solution fonctionne parfaitement après petite adaptation dans le fichier de travail.

Merci beaucoup, Chris
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…