comparer un fichier ouvert avec un fichier fermer et recupérer des données des 2

globulle93

Habitué
bonjour
voila j'ai un fichier avec des données A ouvert en lançant la macro je voudrais comparer si je retrouve une référence de mon fichier A ouvert dans mon fichier B qui lui reste fermé.

Code:
Sub mag_Amex()

Dim Boutiques As Workbook
Dim mag As Worksheet
Dim WSR As Worksheet

Dim Nextrow As Long
Dim FinalRow As Long
Dim i As Long

Dim NextrowB As Long
Dim FinalRowB As Long
Dim j As Long

Dim numAmex As String
Dim numboutique As String

Set WSR = Worksheets(2)
Set Boutiques = GetObject("C:\Users\********\Boutiques.xls")
Set mag = Boutiques.Worksheets(1)

Nextrow = 1
NextrowB = 1

numAmex = WSR.Cells(Nextrow, 2)
numboutique = Boutiques.Sheets(1).Cells(NextrowB, 4)


   FinalRow = WSR.Cells(Rows.Count, 1).End(xlUp).Row
   FinalRowB = mag.Cells(Rows.Count, 1).End(xlUp).Row
   
   
      For i = 1 To FinalRow
                            
                  
           If numboutique = numAmex Then
            
            
    
        msgbox "teste ok"
        
        Else
 
                 End If
             

                Next i

End Sub

mon problème je voudrais comparer mon num amex avec mon numboutique si ok prendre recopie certaine cellue de numamex et numboutique dans un autre onglet que j'ai créer dans une permière partie de mon vba.

mon problème est de passé à la ligne suivante de numboutique si numamex et numboutique son différent et une fois la première ligne numamex testé avec tout numboutique passé à la ligne 2 de numamex et re tester toute les ligne de numboutique.

mon problème je me retrouve avec une erreur 1024 erreur definie par objet ou application.

ici

C++:
 FinalRowB = mag.Cells(Rows.Count, 1).End(xlUp).Row

un peux d'aide est pas de refus :D

merci d'avance
 

drul

Obscur pro du hardware
Staff
Salut,
C'est moche, ça passe chez moi ...
As-tu le même nombre de ligne le fichier "boutiques" que dans le fichier A (crée avec la même version d'excel ?) vu que boutique est ".xls" j'en déduis qu'il a été crée avec excel 2003 donc ne contient que 65535 lignes, si ton fichier A est lui en xlsx il contient beaucoup plus de ligne !
Essaye de modifier comme suis:
Code:
FinalRowB = mag.Cells(mag.Rows.Count, 1).End(xlUp).Row
De manière générale dans "cells()", il est fortement conseillé de toujours préciser l'objet (la feuille quoi) sur lequel tu travailles si tu utilises des références.
 

globulle93

Habitué
bonjour

merci drul j'ai testé les deux et les deux fonctionnent.

Oui chez moi aussi ca passe avec le même format de fichier xl :pfff: par contre autre question je construit comment mon teste de prendre numamex et premier numeboutique je me prend les pieds dans le tapis la :D
 

drul

Obscur pro du hardware
Staff
Explique moi mieux ce que tu veux faire, parce que la c'est pas claire du tout ...
 

globulle93

Habitué


 

globulle93

Habitué
bonjour
j'ai 2 fichier le A avec mes donnée extrait d'un site que je retraite par une premiere parti de macro qui me donne fichierA ongletB j'ai un autre fichier qu'on pourrais appeler annuaire dans lequel j'ai 1 onglet avec differente info.
le A peut faire 50 ligne comme 10 000 ou + le fichier annuaire augmente en fonction que je rajoute un magasin.

j'ai dans le fichier A créer d'autre onglet C,D,E que je vais remplir par les info que je vais récupérer du fichier A onglet B et annuaire.

je prend donc le premier numamex du fichier A et je cherche si il est dans le fichier annuaire si oui je recup mes information de A et Annuaire pour remplir mes onglet C,D,E.
je passe au deuxieme numero du fichier amex je teste si je trouve dans Annuaire ETC... jusqu'à avoir parcouru tout le fichier A.

voila j'espère être plus claire :pt1cable:

merci a toi
 

drul

Obscur pro du hardware
Staff
Ok, essaye de décomposer en plusieurs étapes très précises, ensuite je t'aide à les réalisé une par une.
Fais moi donc un plan de comment t'y prendre pour réaliser cette fonction.
 

globulle93

Habitué




 

globulle93

Habitué
bas justement la je seche pour trouver comment passé a la ligne suivante de annuaire :( une tite piste :ange:
 

drul

Obscur pro du hardware
Staff
Dis, en français, TOUTES les étapes que tu ferais, et ensuite on les traduira en VBA.
 

globulle93

Habitué
1 je prend numamex de A
2 je prend numboutique de annaire
3 numamex ligne 1=numboutique ligne 1
4 oui test ok pour simplifier pour le moment :p
5 numamex ligne 1 est different de numboutique ligne 1
6 teste numamex ligne 1 avec numboutique ligne 2 ,3,4 ETC
7 teste numamex ligne 2 = numboutique ligne 1, 2, 3 etc
:sarcastic:
 

drul

Obscur pro du hardware
Staff
Ok donc si j'ai bien compris tu as une colonne dans le fichier A avec x numamex et une colonne dans le fichier b avec y numboutique
tu veux comparer tes x numamex avec tes y numboutique, c'est bien ça ?

On est donc dans un cas de double boucle.
Code:
for i=1 to x 
  for j=1 to y
    if FeuilleA.cells(i, colonneA).value = FeuilleB.cells(j, colonneB).value then
      msgbox "Test"
   end if
  next
next
 

globulle93

Habitué
moi par rapport au code du dessus j'avais fait ca

Code:
For i = 1 To FinalRow
              For j = 1 To FinalRowB
                  
           If numboutique = numAmex Then
          
        msgbox "teste ok"
        
       End If
        
        Next
        
        Next

dans ma fenetre de variable local il m'affiche bien mon numamex et numboutique mais il passe pas au numboutique suivant si numamex different de numboutique

:??:

atttention mon numamex et numboutique son dans 2 fichier excel different voir code au dessus

merci
 

drul

Obscur pro du hardware
Staff
Faudrait peut-être les utilisés tes variables i et j non ?
Tu dois redéfinir numamex et numboutiques après chaque comparaison, sinon tu compare n fois les mêmes valeurs ...
 

globulle93

Habitué
i et j seront utilisé après le then :D quand je ferais les commande de recupérer l'information de la ligne et cellu x de numamex et numboutique pour recopier dans un onglet du fichier A et idem pour j.

et pour redefinir numamex et boutique je fait comment !
 

drul

Obscur pro du hardware
Staff
par exemple:
Code:
For i = 1 To FinalRow
  numAmex = WSR.Cells(i, 2)
  For j = 1 To FinalRowB    
    numboutique = mag.Cells(j, 4) 
     If numboutique = numAmex Then
 
        msgbox "teste ok"
 
     End If
 
  Next
 
Next
 

globulle93

Habitué
je vais tester tout ça faire mon code qui vas récupérer les info du fichier A et dans boutique pour remplir mes onglet C,D,E du fichier A avec en prime un autre if sur une autre cellule du fichier boutique et je reviens vers toi avec le code final pour me dire si y des amélioration a faire
;) :D
 

globulle93

Habitué
re je me heurt à un problème quand je lance le code c'est comme si il ne tenait pas compte du if sur societe et je me retrouve avec toutes mes données mélangé

Code:
Sub mag_Amex()

Dim WSD As Worksheet
Dim WSRCP As Worksheet
Dim WSRMJ As Worksheet
Dim WSRAD As Worksheet


Set WSD = Worksheets(1)

Set WSRCP = Worksheets(3)
Set WSRMJ = Worksheets(4)
Set WSRAD = Worksheets(5)



Dim Boutiques As Workbook
Dim mag As Worksheet
Dim WSR As Worksheet

Dim Nextrow As Long
Dim FinalRow As Long
Dim i As Long

Dim NextrowB As Long
Dim FinalRowB As Long
Dim j As Long

Dim numAmex As String
Dim numboutique As String
Dim societe As String

Set WSR = Worksheets(2)
Set Boutiques = GetObject("C:\Users\*******\Boutiques.xls")
Set mag = Boutiques.Worksheets(1)

Nextrow = 1
NextrowB = 1

numAmex = WSR.Cells(Nextrow, 2)
numboutique = Boutiques.Sheets(1).Cells(Nextrow, 4)
societe = Boutiques.Sheets(1).Cells(Nextrow, 5)



   FinalRow = WSR.Cells(Rows.Count, 1).End(xlUp).Row
 FinalRowB = mag.Cells(Rows.Count, 1).End(xlUp).Row
   
 ' FinalRowB = mag.Cells(mag.Rows.Count, 1).End(xlUp).Row
  
      For i = 1 To FinalRow
      numAmex = WSR.Cells(i, 2)
              For j = 1 To FinalRowB
              
                  numboutique = Boutiques.Sheets(1).Cells(j, 4)
                  societe = CStr(Boutiques.Sheets(1).Cells(j, 5))
  If numAmex = numboutique Then
If societe = "ANDY" Then

WSRAD.Cells(Nextrow, 1) = "G"
WSRAD.Cells(Nextrow, 2) = "G0006"
mag.Cells(j, 3).Copy Destination:=WSRAD.Cells(Nextrow, 3)
WSR.Cells(i, 3).Copy Destination:=WSRAD.Cells(Nextrow, 11)
WSR.Cells(i, 1).Copy Destination:=WSRAD.Cells(Nextrow, 5)
WSR.Cells(i, 1).Copy Destination:=WSRAD.Cells(Nextrow, 6)
WSRAD.Cells(Nextrow, 4) = "BQ"
WSRAD.Cells(Nextrow, 9) = "AM" & " " & mag.Cells(i, 1) & " " & mag.Cells(i, 2) & " " & "COM"
            
       Nextrow = Nextrow + 1
       
         
        
      
        
      End If
        
       End If
        
        
        
        Next j
        
        Next i
        
       
    Set WSR = Nothing
    Set WSRCP = Nothing
    Set WSRMJ = Nothing
    Set WSRAD = Nothing
             


Application.ScreenUpdating = True
End Sub

1 je test si numamex = numboutique
2 test si societe = "andy" j'aurai d'autre test elseif
si c'est 2 test ok

je recup dans wsr de A date, montant que je remet dans wsrad
je recup dans boutique le numéro, la banque, code ste etc... que je remet dans wsrad sur une meme ligne et après je passe a la ligne suivante ou je reprend toutes les infos du dessus en changeant juste un code après je passe au numéroamex suivant.

si numamex = numboutique et si societe= toto la comme au dessus il me recup les données de la ligne ou le test à été fait.

mais la quand je test il me met tout avec le meme code societe mes banques son mélanger.

je pense qu'une partie du problème vient du fait quand je passe à la ligne suivante "nextrow"

:??:
:( :heink:
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 132
Messages
6 717 996
Membres
1 586 386
Dernier membre
aviateurdesairs
Partager cette page
Haut