Macro de recherche fonctionnant dans un fichier de test mais pas dans mon origin

Gwad063 Messages postés 23 Date d'inscription lundi 10 décembre 2007 Statut Membre Dernière intervention 25 janvier 2008 - 10 janv. 2008 à 11:21
Gwad063 Messages postés 23 Date d'inscription lundi 10 décembre 2007 Statut Membre Dernière intervention 25 janvier 2008 - 15 janv. 2008 à 10:06
Bonjour à tous,
suite à mon poste:http://www.vbfrance.com/infomsg_MACRO-RECHERCHE-COPIE-VALEUR-DANS-AUTRE-FEUILLE_1055369.aspx#7
dans lequel je cherchais à créer une macro de recherche et bien, j'ai fait (un peu) de  chemin; mon macro marche lorsque je la mets dans un fichier me permettant de la tester...mon gros problème, c'est qu'elle ne marche pas danzs mon fichier original; j'ai tout tenté, et je ne vois pas d'où peut provenir mon problème...
Sur les conseils MPi et de bigfish, je l'ai exécuter pas à pas, j'ai mis des espions sur mes variables, rien n'y fait; elle semble effectuer la recherche mais ne vient pas incrémenter ma feuille lorsqu'elle trouve les valeurs cherchées...
Je pensais qu'une autre macro (présente dans mon fichier original) venait court-circuiter celle-là, après l'avoir enlevée, ça ne marche toujours pas...
Bref, là, je suis un peu à cours d'idée...

Voila ma macro :

Option Explicit


Private Sub CommandButton1_Click()


Dim cell As Range, k As Long, J As Long
Dim Wb2 As Workbook
Dim Ws As Worksheet


 Application.ScreenUpdating = False
 Application.DisplayStatusBar = True
 Application.StatusBar = "Traitement en cours, veuillez patienter..."


 Workbooks.Open Filename:=ThisWorkbook.Path & "\Donnees_de_base.xls"
 Workbooks("Proposition finale données de base version 2.xls").Activate
     Set Wb2 = Workbooks("Donnees_de_base.xls")
     Set Ws = Wb2.Sheets("Master Datas")
     Sheets("Transactions Données de Base").Range("A2:B" & Sheets("Transactions Données de Base").Range("A65536").End(xlUp).Row + 1) = ""
     k = Sheets("Transactions Données de Base").Range("A65536").End(xlUp).Row
     For J = 2 To Range("B65536").Row
         For Each cell In Ws.Range("B2:B" & Ws.Range("B65536").End(xlUp).Row)
             If Range("B" & J) = cell Then
                With Sheets("Transactions Données de Base")
                   .Cells(k, 1) = Range("B" & J)
                   .Cells(k, 2) = Ws.Cells(cell.Offset(0, 0).Row, cell.Offset(0, -1).End(xlUp).Column).Value
                k = k + 1
                End With
             End If
         Next
     Next
 Sheets("Transactions Données de Base").Activate
 Application.StatusBar = False
 Application.ScreenUpdating = True
End Sub

Un grand merci par avance à tous ceux qui pourront m'aider...

5 réponses

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
10 janv. 2008 à 15:00
déplacé de VB6 vers VBA !!!!
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
11 janv. 2008 à 03:12
Pas facile à décrypter ...
Quelquefois, tu utilises Ws, quelquefois non...

Ici, je dirais qu'il doit y avoir un problème:
.Cells(k, 2) = Ws.Cells(cell.Offset(0, 0).Row, _
cell.Offset(0,-1) .End(xlUp).Column).Value

en bleu... qu'est-ce que Offset vient faire là ?
en rouge... pourquoi remonter (xlUp) pour retracer une colonne ?

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
Gwad063 Messages postés 23 Date d'inscription lundi 10 décembre 2007 Statut Membre Dernière intervention 25 janvier 2008
11 janv. 2008 à 15:06
Oups!, Désolé d'avoir mis mon post dans le mauvais thème...
Merci MPi pour ta réponse et désolé également du retour tardif...effectivement, quelques éclaircissements s'imposent :

Bon, d'une part, cette macro m'a été fortement inspiré d'un modèle que l'on m'a proposé pour résoudre un problème de recherche (également) mais dans un fichier en arborescence...
Etant débutant dans le domaine, elle m'a d'ailleurs été fort utile.

ma macro est placé dans ma feuille 1 (là où il y a mon bouton pour la lancer) : cette feuille 1 est appelé "Transactions par rôle"
dans ce même classeur excel, ma feuille 2 est appelé "Transactions Données de Base";
j'ai un autre classeur excel appelé Données de Base, dans lequel il y a une seule feuille appelée "Master Data";

Ce que ma macro doit faire lorsque je clique sur le bouton : 
Elle compare les valeurs de ma colonne B de ma feuille "Transactions par rôle" à ma colonne B de ma feuille "Master Data"; lorsqu'elle trouve la même valeur (ici la transaction), elle vient la mettre dans la colonne A de la feuille "Transactions Données de Base", et elle va mettre la valeur de la colonne A de ma feuille "Master Data" à laquelle elle renvoie dans la colonne B de la feuille "Transaction Donnée de Base" (tout cela à partir de la ligne 2 puisque la ligne 1 est réservée à l'intitulé); 
Je la met dans une autre feuille nommée "Transactions Données de Base) car la transaction peut être trouvée 0,1 ou X fois (si c'est X fois, c'est par qu'elle renverra une valeur différente) :
concrètement, cela devrait ressembler à ça lorsque la macro marche (dans la feuille "Transactions Données de Base"):
                    A                                                B
1       TRANSACTIONS                    DONNEES DE BASE
2                 T1                                             ergqegqrh
3                 T1                                             shhytjssj
4                 T7                                             erhqehqh
5                 T4                                             dhfqshq
6                 T4                                             zjdqsdhdhh
7                 T4                                             dshhaqeqd                  
8                 T6                                             rtystsjss 
9                 etc..                                           etc,..

Donc j'utilise Ws parce que c'est mon fichier c'est mon fichier avec lequel je vais comparer mes valeurs de ma feuille Transactions par Rôle; et, effectivement, je n'est pas besoin du cell.Offset(0, 0).Row (c'est d'ailleurs pour ça que je l'avais mis à 0,0), de même que je peux virer le end(xlup). Mais malgrès cela, ça ne marche pas (je l'avais déjà fait, et je les avais remis même si ça ne changeait rien...)
Voilà en gros; si cela ne reste pas clair, n'hésites pas à me demander d'autres info; au pire, je peux joindre un fichier pour exemple...
Et si une autre âme charitable passe par là et veux aussi me donner quelques tuyaux...ce serait le bienvenue.
Merci.

Gwad
  

 
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
12 janv. 2008 à 17:34
Si j'ai bien compris (?), ceci devrait faire l'affaire

Sub Démarrer()
    Dim I As Long, J As Long, LigneCourante As Long
    Dim wkBook As Workbook, WsData As Worksheet, WsTransaction As Worksheet
   
    'Initialisation des différents objets
    Set wkBook = ActiveWorkbook
    Set WsTransaction = Sheets("Transactions Données de Base")
    Workbooks.Open Filename:="C:\Donnees_de_base.xls" 'change le chemin
    Set WsData = ActiveWorkbook.Sheets("Master Data")
    wkBook.Activate
   
    'Ligne sur laquelle on va inscrire les données trouvées
    LigneCourante = Sheets("Transactions Données de Base"). _
                    Cells(Rows.Count, "A").End(xlUp).Row + 1
   
    'Boucler la feuille de transactions par rôle
    For I = 2 To Cells(Rows.Count, "A").End(xlUp).Row
        'Boucler la feuille Master Data
        For J = 2 To WsData.Cells(Rows.Count, "A").End(xlUp).Row
            If Range("B" & I) = WsData.Range("B" & J) Then
                WsTransaction.Range("A" & LigneCourante) = _
                        WsData.Range("B" & I)
                WsTransaction.Range("B" & LigneCourante) = _
                        WsData.Range("A" & I)
                LigneCourante = LigneCourante + 1 'incrémenter pour la nouvelle ligne
            End If
        Next
    Next
   
    'Libérer les objets
    Set wkBook = Nothing
    Set WsTransaction = Nothing
    Set WsData = Nothing
   
    MsgBox "Terminé"
End Sub

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Gwad063 Messages postés 23 Date d'inscription lundi 10 décembre 2007 Statut Membre Dernière intervention 25 janvier 2008
15 janv. 2008 à 10:06
Merci MPi, en fait, mon problème de départ, c'était des espaces dans mes cellules après mes valeurs (dans ma feuille "Master Data").
Sinon, j'ai testé ta macro : elle marche...c'est nickel.
Merci beaucoup pour ton aide.

Gwad.
0
Rejoignez-nous