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 :

sshot-1.png
sshot-2.png


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.
 

Discussions similaires

Statistiques des forums

Discussions
315 098
Messages
2 116 203
Membres
112 687
dernier inscrit
snexedwards