Correspondance valeur colonne excel

Résolu
Bonsoir,
J'utilise microsoft excel et je travaille sur un fichier unique avec 36000 valeurs sous forme de code dans la première colonne. Après avoir extrait 100 fichiers excel issus de ce fichier initial (par méthode d'échantillonnage), j'ai des valeurs de classement pour chaque code de départ mais sur un tiers des codes soit 12000. Mon souci je voudrais avoir une méthode automatique pour faire correspondre les codes issus de chaque fichier d'échantillonnage avec les codes totaux de départ. A la main ça me prendrait énormément de temps sachant j'aurai 100 fois à faire correspondre 12000 codes parmi les 36000 du fichier de base. J'espère j'ai été clair lol Merci d'avance pour toute éventuelle début de solution.

11 réponses

  1. je précise que j'ai collé sur le fichier initial à coté des 36000 codes les colonnes 'codes' et 'valeur classement' de chaque fichier soit 200 colonnes.
    0
    1. Si tu as été clair ?
      * tu as 36000 données (ou codes) dans une colonne
      * tu as des valeurs de classement, sur des bases qu'on ignore, pour 12000 des données, mais on ne sait pas lesquelles
      * tu as 100 fichiers, mais on ne sait pas quelles données et quelles valeurs de classement y figurent, ni quelle est leur structure
      * tu veux faire correspondre des éléments des 100 fichiers aux 24000 données non encore renseignées, mais on ne sait pas sur quels critères ou en appliquant quelles règles
      * il est aussi question de "codes totaux de départ", dont on ne sait pas s'ils font partie des 36000 ou s'ils s'y rajoutent
      ....................
      0
      1. ok désolé je vais apporter plus de précision dans ce cas.
        Les 36000 codes correspondent à des pixels crées suite a une analyse par maille. Je cherche à classifier ces pixels selon l'importance de l'urbanisation dans la région concernée. Pour cela j'ai réalisé un échantillonnage (100 fois) en prenant en compte une quarantaine de variable (situation sociale, salaire, etc) pour avoir une classification moyenne de chaque pixel. La précision c'est que l'échantillonnage n'est réalisé que sur 1 tiers des 36000 pixels et ce pour les 100 fichiers de sorties.
        C'est pour cela j'ai a faire correspondre les 12000 pixels classifiés avec la valeur correspondante a 100 reprises.
        J'espere que c'est plus précis cette fois ;-)
        0
        1. Contributeur
          Bonjour,

          Si tu déposais un fichier exemple avec des explications sur cijoint.fr (coller ici le lien fourni), on ne sait toujours pas ce que tu veux...
          eric
          0
          1. OK voici un exemple du fichier avec les résultats d'un seul fichier de sortie.

            http://www.cijoint.fr/cjlink.php?file=cj201003/cijq3SPkEx.xls
            0
            1. Contributeur
              Bon, ben on verra ça quand tu seras décidé à donner toutes les explications...
              Pas envie de passer du temps pour que tu dises que ce n'est pas ça que tu veux mais...
              On ne peut que faire des suppositions !!!
              0
            2. si tu as regardé le fichier que j'ai envoyé je veux juste mettre cote a cote les codes pixels identiques des colonnes A et C avec la valeur de classement associée. Il y aura des pixels qui seront pas associés par conséquent (36000 pour la colonne A et 12000 pour la colonne C)
              Quelles sont les autres explications que tu attend?
              0
            3. Contributeur
              Oui c'est ça que j'attend
              insérer des cellules en C,D,E pour aligner L100-C1 2004 de A4:B4 avec L100-C1 2004 C3:D3
              Faire correspondre c'est très vague et ne décris pas les actions manuelles que tu fais...
              0
          2. OK.
            Je ne me sens pas du tout inspiré par ce problème : je me retire donc de la discussion. Bon courage à vous ...
            0
            1. Contributeur
              Le traitement est un peu long, attendre...
              Sub aligne()
                  Dim lig As Long
                  Application.ScreenUpdating = False
                  For lig = 2 To [A65536].End(xlUp).Row
                      If Trim(Cells(lig, 1)) <> Trim(Cells(lig, 3)) Or Cells(lig, 2) <> Cells(lig, 4) Then
                          Cells(lig, 3).Resize(1, 3).Insert Shift:=xlDown
                      End If
                  Next lig
                  Application.ScreenUpdating = True
              End Sub

              eric
              0
              1. désolé pour le retard de la réponse! je viens de rentrer du boulot à l'instant! ok j'essayerai demain matin a mon travail la manip que tu m'a donnée !
                Merci beaucoup d'ore et déjà
                0
              2. je te tiendrai au courant si ça marche ou pas ;-)
                0
            2. Bonjour Eric,
              J'ai essayé ta manip elle fonctionne parfaitement à un détail qu'elle s'arrete a la ligne 14106 la correspondance. Il doit juste avoir un ajustement a faire dans la VBA. Je te donne le lien du fichier avec la VBA.
              http://www.cijoint.fr/cjlink.php?file=cj201003/cij0qJieSd.xls
              Merci
              Laurent
              0
              1. il manque juste une un ajustement pr que le pb soit complètement résolu merci d'avance
                0
                1. Contributeur
                  Bonjour,

                  J'ai relancé à partir de cette ligne et aucune anomalie. Tu as peut-être fait une action qui a réussi a arreter la macro (?)
                  J'ai ajouté un test de façon à pouvoir relancer la macro sans toucher aux lignes déjà traitées si ça se reproduit.

                  Une référence en C (et l'année) doit toujours être sur une ligne <= à la référence en A.
                  Une référence en C doit toujours être existante en A.
                  Si ces 2 conditions sont respectées aucune raison que ça ne tourne pas

                  J'ai ajouté aussi un compteur dans la barre d'état (en bas à gauche) pour voir évoluer le traitement et patienter.

                  Sub aligne()   
                      Dim lig As Long, derlig As Long   
                      Application.ScreenUpdating = False   
                      barreEtatsav = Application.DisplayStatusBar   
                      Application.DisplayStatusBar = True   
                      derlig = [A65536].End(xlUp).Row   
                      For lig = 2 To derlig   
                          If Trim(Cells(lig, 1)) <> Trim(Cells(lig, 3)) Or Cells(lig, 2) <> Cells(lig, 4) Then   
                              If Cells(lig, 3) & Cells(lig, 4) <> "" Then   
                                  Cells(lig, 3).Resize(1, 3).Insert Shift:=xlDown   
                              End If   
                          End If   
                          Application.StatusBar = "Ligne en cours : " & lig & "/" & derlig   
                      Next lig   
                      Application.StatusBar = False   
                      Application.DisplayStatusBar = barreEtatsav   
                      Application.ScreenUpdating = True   
                  End Sub

                  eric

                  PS : n'oublie pas de mettre en résolu si ça l'est. Merci
                  0
                  1. c bon je viens de réessayer ca a marché jusquau bout cette fois je pense jai du faire une manip qui a stopper en cours la macro
                    merci bcp vraiment
                    0
                  2. par contre j'ai pas la barre a coté de 'ne plus suivre' pour mettre la discussion comme résolue
                    0
                2. c bon ca marche c réglé :-)
                  0
                  1. Contributeur
                    ok, je met en résolu
                    @+
                    0