Attribuer une valeur à une cellule selon valeur d'une autre plage dynamique

Bonjour au forum,

J'importe régulièrement des données dans un fichier Excel (de la colonne A à la colonne I) via une macro et dans une colonne supplémentaire J, j'ai une formule RechercheV pour trouver la dénomination du code de mes cellules en colonne G.

Ma question est la suivante :

Selon vous, quelle serait la meilleure manière de faire pour renseigner cette colonne J ?

Faut-il traiter la RechercheV plutôt via VBA à chaque import de données ?

Faut-il plutôt renseigner toutes mes cellules de la colonne J avec la formule pour qu'elle soit valable lors de chaque import ?

Faut-il boucler sur toutes les cellules de la colonne G ayant des données pour écrire en colonne J ?

Merci d'avance pour vos avis :)

Bonjour,

Pour ma part, j'ai constaté qu'en fonction du volume des données, le RECHERCHEV peut être relativement lent surtout lorsqu'on utilise des filtres (recalcul à chaque changement du filtre ou effacement). Si les données sont volumineuses et dans la mesure où elles sont importées via une macro pourquoi ne pas y ajouter une étape supplémentaire pour alimenter la dénomination du code ?

Bonjour Cylfo,

Merci pour ton avis.

Je pense effectivement que je vais essayer de traiter ces infos directement lors de l'import par VBA, j'avais juste peur du temps que ça prendrait vu que les données sont très nombreuses.

Tu ferais comment ?

Boucler sur chaque cellule de la colonne J et si vide, RECHERCHEV ?

Bonjour,

Selon le type du fichier d'export, un traitement par le biais de Power Query pourrait être envisagé...(mais il faudrait un exemple du fichier)

En natif sur 365, en téléchargement gratuit sur le site de µSoft pour 2013.

Bonne journée

Bonjour Nrev74,

Cela dépendrait de la manière dont les données sont importées et de la taille du référentiel de codification. Je crois comprendre que les données importées viennent s'ajouter aux données déjà existantes ?

Données importées en bloc => pas le choix, il faut boucler sur la colonne J après import. SI les données importées viennent s'ajouter, tu peux repérer la dernière ligne renseignée avant l'import pour ne pas rebalayer toute la feuille.

Données importées ligne à ligne => j'opterai plutôt pour une alimentation de la dénomination avant d'écrire la ligne dans la feuille de destination.

Recherche de la dénomination : soit recherchev (avec gestion de l'erreur si le code n'est pas trouvé), soit chargement en tableau des codes et dénominations et recherche dans ce tableau pour trouver la dénomination.

Bonjour Cousinhub, Re Cylfo,

Merci pour vos réponses.

@cousinhub : le fichier d'export est un .csv. PowerQuery semble être une solution très intéressante pour la plupart des fichiers que je traite, mais je n'arrive pas à comprendre son fonctionnement, surtout pour l'automatisation, y'a rien à faire...

Il faudrait vraiment que je m'y mette sérieusement, trouver de bons tutos, etc.

@cylfo : oui les données sont ajoutées à la suite et en bloc. J'ai donc opté pour un traitement en bouclant comme tu recommandais :

    dl2 = OD.Range("A" & Rows.Count).End(xlUp).Row
    dlVL = OD.Range("J" & Rows.Count).End(xlUp).Row

    With OD
        For Each c In .Range("J" & dlVL & ":J" & dl2)
            If c.Value = "" Then
                c.Value = Application.WorksheetFunction.VLookup(c.Offset(0, -3).Value, Sheets("Traitement").Range("Matdest"), 2, 0)
            End If
        Next c
End With

Cela fonctionne bien et c'est rapide contre toute attente, je valide donc...

Merci pour ton aide.

Merci également à cousinhub, je vais essayer de prendre du temps pour PowerQuery, ça à l'air d'en valoir la peine quand même...

Bonne journée à vous !

Rechercher des sujets similaires à "attribuer valeur plage dynamique"