Importer/Exporter données d'un tableau à un autre, filtrage de doublons

Bonjour à tous, aujourd'hui une nouvelle question VBA pour les experts. Je possède 2 tableaux dans 2 worksheets distinctes. Mon projet est le suivant :

"input_table" contient des données dans sheet1, "target_table" est vide dans sheet2 et une macro doit pouvoir récupérer les valeurs de la colonne "Input" de "input_table" pour les mettre dans la colonne "Target" de "target_table" avec modification perso sur certaines valeurs et un filtrage de doublons. Je vois la chose comme cela :

  • vider "Target" de target_table
  • importer les données de "Input" de input_table dans "Target" de target_table
  • appliquer la modification (en l’occurrence, supprimer tout ce qui se trouve entre parenthèse dans la cellule ex : SetMod(12) devient SetMod
  • supprimer les doublons dans "Target" maintenant rempli
  • redimensionner le tableau (car j'ai vu que c’était pas toujours automatique)

Je rencontre des difficultés pour importer les valeurs d'une colonne dans une autre, sachant que nous manipulons ici des objets de type "tableau" déjà existants. La fonction Advancedfilter de Range ne marche pas bien sur les colonnes de tableau, je n'arrive pas a trouver de syntaxe valide. Je possède des bouts de codes fonctionnels :

  • pour redimensionner un tableau donné
  • pour ma partie filtrage, (on agit cellule par cellule, ça, ça va)

Je joint mon fichier pour visualiser.

Merci par avance et bonne journée.

17classeur1.xlsm (26.98 Ko)

Bonjour

Pas de fichier joint

trop important ?

Quelques lignes suffisent

Cordialement

FINDRH

Normalement il y est, je n'avais peut être pas bien fait "incorporer au message"

Cdt

Bonjour

ton fichier vient d’apparaître et je l'ai ouvert....

Désolé c'est inexploitable et l est impossible de faire un quelconque lien avec ta demande; supprimer ce qui est entre parenthèse où, dans quelle cellule, colonne ???

sans te demander de joindre des fichiers complets, un extrait du tableau de base anonymisé avec quelques lignes et les bonnes colonnes ( avec leur intitulé, une maquette explicite du résultat souhaité sont nécessaires si tu veux obtenir une aide...

Dans l'attente

Cordialement

FINDRH

Bonjour, merci pour ta réponse.

Désolé c'est inexploitable et l est impossible de faire un quelconque lien avec ta demande; supprimer ce qui est entre parenthèse où, dans quelle cellule, colonne ???

J'ai signalé que la partie filtre entre les parenthèses je l'avais déjà... donc j'ai pas mis de parenthèses dans l'exemple ^^. Je n'ai mis que es contenus utiles a mon projet pour clarifier donc... Sinon le fichier est assez clair... 2 onglets, 2 tableaux, et je veux copier le contenu de la 2ème colonne du tableau présent dans l'onglet 1 à celui de l'onglet 2 sans les doublons. Je joins un exemple plus clair si tu veux avec la colonne input en vert et target en rouge.

Pour le filtre des parenthèses, ça ça me va:

Dim Cell As Range
Dim content As String

For Each Cell In Sheets("Sheet2").Range("target_col")
    MsgBox (Cell.Value)
    If Not IsNumeric(Cell) And Cell <> "" Then
    pos = InStr(Cell, "(")
    If pos > 0 Then
        Cell = Left(Cell, pos - 1)
    End If
End If: Next Cell

Cordialement,

Thomas

9classeur1.xlsm (26.86 Ko)

Voici le code que j'ai pour le moment et qui fonctionne bien.

' Clear content of the target column
Worksheets("Sheet2").Select
Range("target_table").Columns(2).Clear

'Copy the whole input column of Sheet1 to the corresponding one in Sheet2
Worksheets("Sheet1").Range("input_table").Columns(2).AdvancedFilter _
Action:=xlFilterCopy, _
CopyToRange:=Worksheets("Sheet2").Range("target_table").Columns(2) ', _
'Unique:=True

'resize the table
With Worksheets("Sheet2")
    .ListObjects("target_table").Resize .Range("B2").CurrentRegion
End With

'delete every content after "("
Dim Cell As Range
Dim content As String
For Each Cell In Sheets("Sheet2").Range("target_col")
    'MsgBox (Cell.Value)
    If Not IsNumeric(Cell) And Cell <> "" Then
    pos = InStr(Cell, "(")
    If pos > 0 Then
        Cell = Left(Cell, pos - 1)
    End If
End If: Next Cell

'remove duplicates in target_table
Range("target_table").RemoveDuplicates Columns:=2, Header _
        :=xlYes

J'aimerais bien savoir pourquoi ...

 'Copy the whole column step type of the sheet1 to the corresponding one in Sheet2
Worksheets("Sheet1").Range("input_table").Columns(2).AdvancedFilter _
Action:=xlFilterCopy, _
CopyToRange:=Worksheets("Sheet2").Range("target_table").Columns(2) ', _
'Unique:=True

... la commande Unique:=True marche bien, sauf pour la première valeur du tableau qui apparaît donc 2 fois dans le tableau target. si quelqu'un peut m'expliqer pourquoi ?

11classeur1.xlsm (151.00 Ko)

Bonjour

une proposition avec une macro qui traite le tout

a regarder

Cordialement

Findrh

20classeur3.xlsm (30.26 Ko)

Merci du temps que tu as pris pour trouver une solution.

Selection.Replace What:="(*)", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2

... me renvoie une erreur 1004. (il doit pas aimer Selection.Replace)

Par ailleurs, je souhaite importer uniquement la colonne 2

Je pense que j'ai trouvé une solution qui remplit mes besoins.

Merci encore !

Cdt

Bonjour

le replace correspond à la dernière version d'excel, c'est une fonction classique qui a toujours marché sans pb. Enregistre la séquence sur ton micro et compare les deux syntaxes

Selection.Replace What:="(*)", Replacement:="", LookAt:=xlPart, _

SearchOrder:=xlByRows

j'ai supprimer toute cette partie et ça marche aussi !!

MatchCase:=False, SearchFormat:=False, _

ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2

Cordialement

FINDRH

28classeur4.xlsm (29.77 Ko)

Résolu !

Rechercher des sujets similaires à "importer exporter donnees tableau filtrage doublons"