Remplissage d'un tableau EXCEL en VBA par comparaison
Répondre à la discussion
Affichage des résultats 1 à 4 sur 4

Remplissage d'un tableau EXCEL en VBA par comparaison



  1. #1
    Brixsm

    Remplissage d'un tableau EXCEL en VBA par comparaison


    ------

    Bonjour a tous,
    Je travaille actuellement sur excel, et j'aimerai comparer 2 tableaux de composants de 2 feuilles différentes (d'un même classeur) et importer des données du tableau 2 au tableau 1.
    Mes 2 tableaux ont les des colonnes en commun notamment la colonne "G" qui me sert pour faire la comparaison des composants, cependant les composants présents dans cette colonne ne sont pas tous communs aux 2 tableaux.

    Je cherche donc a trouver depuis mon tableau 1, des valeurs (nomenclatures) présentes dans mon tableau 2 puis importer le contenu de certaines cellules(pas toutes) présentes sur la ligne de chaque valeur trouvée de mon tableau 2.
    Je tiens a préciser que toutes les lignes et toutes les colonnes ne sont pas communes aux 2 tableaux (certaines sont présentes dans le 1 d'autres dans le 2 uniquement) et que je ne souhaite pas rapatrier les valeurs non présentes dans le tableau 1.

    Pour répondre a ce problème j'ai élaboré plusieurs codes VBA cependant, ceux-ci ne me donnent pas les résultats attendus. En effet, ils laissent certaines lignes vides malgré des nomenclatures identiques dans la colonne G(c1 et c2 sur le code) et laissent il me semble certaines colonnes vides.

    Lorsque je passe par la fonction rechercher de excel (ctrl+f) et que j'y copie-colle des nomenclatures apparemment non trouvées dans le tableau 2 il me les trouve parfois, donc il y a un problème.
    J'ai regardé au niveau des incrémentations de mes variables mais je ne pense pas que ce soit ça..

    Voici le code dernier code que j'ai tapé :

    ______________________________ ________

    Code:
    Sub I_1LIST2()
    
    Dim wb As Workbook
    Dim ws As Worksheet
    Dim ws2 As Worksheet
    
    Dim l1 As Integer                                      'l1 est la ligne de la cellule en cours de traitement dans ws
    Dim l2 As Integer                                      'l2 est la ligne de la cellule en cours de traitement dans ws2
    Dim c1 As Integer                                    'c1 est la colonne de la cellule en cours de traitement dans ws(colonne G)
    Dim c2 As Integer                                     'c2 est la colonne de la cellule en cours de traitement dans ws2(colonne G)
    Dim c3 As Integer                                     'c3 est la colonne dans  laquelle sont copié les valeurs
    
    Set wb = Workbooks("ListeArticles2_4")
    Set ws = wb.Worksheets("Feuil1")           'ws contient le tableau 1
    Set ws2 = wb.Worksheets("Nom2")         'ws2 contient le tableau 2
    
    l1 = 2
    l2 = 2
    c1 = 7
    c2 = 7
    c3 = 13
    
    While ws.Cells(l1, 3).Value <> ""   'tant que la cells l1,c1 de ws n'est pas vide
    
                While ws2.Cells(l2, 1) <> "" And ws2.Cells(l2, c2).Value <> ws.Cells(l1, c1).Value   'tant que la cellule (l2,1) de ws2 n'est pas vide et que la case (l1,c1) de ws = ws2
                        l2 = l2 + 1                                                       'incrementer la ligne l2
                Wend
                    
                    If ws2.Cells(l2, c2).Value = ws.Cells(l1, c1).Value Then
                        For c3 = 13 To 37 Step 1                          'remplir les cases allant de M(=13) a AJ(=36) de la ligne l1 de ws
                            ws.Cells(l1, c3).Value = ws2.Cells(l2, c3 - 4).Value    
                        Next c3
                    c3 = 13
                    End If
                    
                    l1 = l1 + 1                                 'incrementer la ligne l1
                    l2 = 2                                      'remettre la ligne l2 a 2
                
    Wend
    
    End Sub
    ____________________________

    Voilà, je ne sais plus du tout comment résoudre mon problème.
    J'ai également entendu parler de recherchev (partie tableur) que j'ai essayé mais qui m'a donné un résultat similaire, on m'a aussi parlé d'utiliser des fonctions en utilisant "Byval" mais je n'ai pas tout compris
    Quelqu'un pourrait-il m'aider a trouver l'origine de mon problème svp ?
    Merci d'avance

    -----
    Dernière modification par JPL ; 09/11/2018 à 17h54. Motif: Ajout de la balise Code (#) pour garder l'indentation

  2. #2
    JPL
    Responsable des forums

    Re : Remplissage d'un tableau EXCEL en VBA par comparaison

    Avec les balise Color que tu as mises ce code n’est pas exécutable en l’état pour un lecteur qui voudrait le tester. Dommage.
    Rien ne sert de penser, il faut réfléchir avant - Pierre Dac

  3. #3
    invite948b37db

    Re : Remplissage d'un tableau EXCEL en VBA par comparaison

    Bonsoir

    Je me suis souvent cassé la tête sur ce genre de problèmes pour arriver chaque fois à la même conclusion :
    si certaines valeurs présentes ne sont pas trouvées, c'est qu'elles ne sont pas rigoureusement identiques.
    Ce n'est donc pas dans le code qu'il faut chercher l'erreur mais plutôt dans les données
    Il suffit d'un espace, donc invisible, pour générer le problème

    Teste tes données avec les fonctions texte du tableur, exemple nbcar() pour comparer la chaîne non trouvée avec l'autre ressemblante

  4. #4
    invite6486d7bd

    Re : Remplissage d'un tableau EXCEL en VBA par comparaison

    Citation Envoyé par cherbe Voir le message
    Je me suis souvent cassé la tête sur ce genre de problèmes pour arriver chaque fois à la même conclusion :
    si certaines valeurs présentes ne sont pas trouvées, c'est qu'elles ne sont pas rigoureusement identiques.
    Ce n'est donc pas dans le code qu'il faut chercher l'erreur mais plutôt dans les données
    Il suffit d'un espace, donc invisible, pour générer le problème
    Exact, et de plus si la "clef", le numéro de composant ou que sais-je encore, est numérique, il se peut que la cellule soit formatée en chaine d'un côté et en numérique de l'autre, donc ne pas oublier de prendre la valeur chaine depuis les cellules, un str() il me semble si ma mémoire ne me joue pas des tours, puis de faire effectivement un trim() pour supprimer les blancs éventuels à gauche et à droite de la chaine, puis un uppercase() pour passer la chaine en majuscule (ça ne mange pas de pain).
    Ensuite seulement on peut comparer ces deux valeurs (qui seront donc des chaines de caractère).

  5. A voir en vidéo sur Futura

Discussions similaires

  1. Remplissage d'un tableau
    Par invitee803f01d dans le forum Programmation et langages, Algorithmique
    Réponses: 0
    Dernier message: 16/02/2018, 19h35
  2. EXCEL - Remplissage de tableau automatique
    Par invitef6d4c773 dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 05/01/2018, 00h13
  3. Python - Remplissage d'un tableau
    Par invitee351071a dans le forum Programmation et langages, Algorithmique
    Réponses: 9
    Dernier message: 18/04/2017, 22h18
  4. Problème remplissage ListBox VBA Excel
    Par invite3b879c03 dans le forum Programmation et langages, Algorithmique
    Réponses: 2
    Dernier message: 01/12/2014, 13h20
  5. Remplissage tableau C#
    Par invite39d97ca2 dans le forum Programmation et langages, Algorithmique
    Réponses: 7
    Dernier message: 23/05/2014, 11h58