Ubound LBound et connection fichier fermé

kevenpom

XLDnaute Junior
Bonjour et merci encore de prendre le temps de m'aider.
Je suis capable de copier la feuil1 dans le fichier bd.xls
mais sa prend une éternité a faire puis comparer avec mon for j'ai le temp de prendre un café .. lol j'ai lu sur
le site Lire et écrire dans les classeurs Excel fermés - Club d'entraide des développeurs francophones
comment lire un fichier fermer mais moi je doit faire une comparaison des cellule avec for ubound la je sais plus trop quoi faire ....

Code:
Sub Find_Matches()
    
    Dim TableFu As Range, TableTRY As Range, TableMrp As Range, no_fu As Range, no_mrp As Range, LastTRY As Integer, LastFu As Integer, ws1 As Worksheet, ws2 As Worksheet, ws3 As Worksheet, trouve As Object
    Dim BD As Workbook, Now As Workbook
    
    
    
    Set ws1 = ActiveWorkbook.Sheets("fukanban")
    Set ws2 = ActiveWorkbook.Sheets("TRY")
    Set ws3 = ActiveWorkbook.Sheets("liste")
    Set TableMrp = Selection
    tablo = TableMrp.value
    
    Application.ScreenUpdating = False
 
ActiveWorkbook.Worksheets.Add
    With ActiveSheet.QueryTables.Add(Connection:=Array( _
        "OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User ID=Admin;Data Source=D:\keven\désuetude\bd.xls;Mode=Share Deny Write;Extended " _
        , _
        "Properties=""HDR=YES;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Database Password="""";Jet OLEDB:Engine Ty" _
        , _
        "pe=35;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New D" _
        , _
        "atabase Password="""";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compa" _
        , "ct=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False") _
        , Destination:=Range("A1"))
        .CommandType = xlCmdTable
        .CommandText = Array("Feuil1$")
        .Name = "bd"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .SourceDataFile = "D:\keven\désuetude\bd.xls"
        .Refresh BackgroundQuery:=False
    End With



tablo2 = Sheets("Feuil1").Range("A2:A" & Sheets("Feuil1").Range("A65536").End(xlUp).Row)
   For n = LBound(tablo) To UBound(tablo)
     For m = LBound(tablo2) To UBound(tablo2)
        If tablo(n, 1) = tablo2(m, 1) Then
            Sheets("Feuil1").Range("A" & m + 1 & ":D" & m + 1).Copy Destination:=Sheets("TRY").Range("A65536").End(xlUp).Offset(1, 0)
         End If
     Next m
  Next n
Application.DisplayAlerts = False
    Sheets("Feuil1").Delete
    Application.DisplayAlerts = True
   Application.ScreenUpdating = True
   
End Sub
 

cafeine

XLDnaute Nouveau
Re : Ubound LBound et connection fichier fermé

Hello,

il existe un truc assez simple pour lire dans un fichier fermé, c'est la liaison ...
Code:
='T:\Truc\[Fichier.xls]Onglet'!B12

parce qu'en fait je ne parviens pas réellement à comprendre ce que tu souhaites faire.

Il me semble qu'un NB.SI() pourrait répondre à ta problématique
 
Dernière édition:

kevenpom

XLDnaute Junior
Re : Ubound LBound et connection fichier fermé

Voici mon code pour faire une comparaison de colonne (bd et TableMrp) et pour renvoyer dans ma feuille try les données voulu.
Mais moi ma base de donné est dans une feuille (bd) dans mon fichier exel
alors comment faire pour faire cette comparaison mais a partir d'un fichier fermer (bd.xls!feuil1) pour comparer la même chose....

Code:
Set TableMrp = Selection ' sélection de chaine de caracteres (ex: 123-567-543)
    tablo = TableMrp.value

tablo2 = Sheets("bd").Range("A2:A" & Sheets("bd").Range("A65536").End(xlUp).Row)
   For n = LBound(tablo) To UBound(tablo)
     For m = LBound(tablo2) To UBound(tablo2)
        If tablo(n, 1) = tablo2(m, 1) Then
            Sheets("bd").Range("A" & m + 1 & ":D" & m + 1).Copy Destination:=Sheets("TRY").Range("A65536").End(xlUp).Offset(1, 0)
         End If
     Next m
  Next n


Parce que je sais pas comment écrire sa a partir de ta liaison ?:confused:
merci encore pour votre aide :D
 

ChTi160

XLDnaute Barbatruc
Re : Ubound LBound et connection fichier fermé

Salut kevenpom
Bonjour le fil
Bonjour le Forum

questions :connais tu l'adresse de ton fichier bd.xls ? est il dans le même dossier que ton fichier Actif ?
si Oui tu peux créer une macro qui ouvre le fichier ,le temps d'y récupérer les valeurs de la plage déterminée dans ton tableau (tablo2) et de comparer la colonne 1 de ce tableau avec les valeurs du tableau (tablo)

peux tu mettre, un fichier exemple enfin deux ,l'un avec la mise en forme du fichier cible et l'autre avec la mise en forme de ton fichier Source(bd.xls)
merci d'avance
 

kevenpom

XLDnaute Junior
Re : Ubound LBound et connection fichier fermé

Voici un version très légère de mes 2 fichiers parce que ma bd contient 70000 article
et ma selection une centaire. donc avec le code
Code:
ActiveWorkbook.Worksheets.Add
    With ActiveSheet.QueryTables.Add(Connection:=Array( _
        "OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User ID=Admin;Data Source=D:\keven\désuetude\bd.xls;Mode=Share Deny Write;Extended " _
        , _
        "Properties=""HDR=YES;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Database Password="""";Jet OLEDB:Engine Ty" _
        , _
        "pe=35;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New D" _
        , _
        "atabase Password="""";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compa" _
        , "ct=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False") _
        , Destination:=Range("A1"))
        .CommandType = xlCmdTable
        .CommandText = Array("Feuil1$")
        .Name = "bd"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .SourceDataFile = "D:\keven\désuetude\bd.xls"
        .Refresh BackgroundQuery:=False
    End With
je sais copier une feuille d'un fichier a un autre même fermer mais la a 70000 articles sa prend un temp de fou. D
onc ses pour sa que je voudrait faire ma comparaison dans le fichier bd.xls directement mais quil soit fermé.

mon code de comparaison est dans ma réponse précédente alors ses la que je suis rendu .
 

Pièces jointes

  • bd.xls
    14.5 KB · Affichages: 88
  • classeur.xls
    26.5 KB · Affichages: 94
  • bd.xls
    14.5 KB · Affichages: 98
  • classeur.xls
    26.5 KB · Affichages: 99
  • bd.xls
    14.5 KB · Affichages: 90
  • classeur.xls
    26.5 KB · Affichages: 91

ChTi160

XLDnaute Barbatruc
Re : Ubound LBound et connection fichier fermé

re
pour le test j'ai mis les deux fichiers dans le même dossier ensuite tu ouvres classeur.xls et tu cliques sur le bouton résultat en feuille try
tu regardes dans le code j'ai mis des commentaires

le principe , c'est que l'on ouvre le fichier (ca se voit à peine Lol) on récupére les données dans un tableau temporaire et ensuite on fait les recherches
tu parles de sélection il faut préciser ,moi dans l'exemple j'ai récupéré l'ensemble des données présentent en colonne 1 de la feuille Liste pour faire ensuite la comparaison avec les données de dB.xls
Tu parles de 70000 articles, c'est donc 70000 lignes que tu as (excel2007) pour la recherche de la derniere ligne du tableau de la feuil1 de db.xls je suis partis du Haut en espérant qu'il n'y a pas de lignes vides dans db.xls Feuil1 , si Excel 2007 mettre DerLigne=.Range("80000").End(xlUp).Row par exemple

Le fichier :Regarde la pièce jointe classeur.xls

Tiens nous au courant
Bonne fin de Soirée
 

Pièces jointes

  • classeur.xls
    48.5 KB · Affichages: 97
  • classeur.xls
    48.5 KB · Affichages: 93

kevenpom

XLDnaute Junior
Re : Ubound LBound et connection fichier fermé

ChTi160 merci de tout coeur..
ses GÉNIAL ma me servir de sa pour aller faire des requete sur d'autre fichiers
excel en tk merci pour ton aide pis de prendre le temp de nous donner un ti coup de main au nouveau qui comme moi commence a jouer avec les macros excel.:)
 

kevenpom

XLDnaute Junior
Re : Ubound LBound et connection fichier fermé

rebonjour
J'ai essayer d'adapter ton code pour faire autre chose en plus mais la je bug et je comprend pas.
Code:
Set Ws_SourceFu = Worksheets("try")
  With Ws_SourceFu
     TabListeTry = .Range("A1:A" & .Range("A65536").End(xlUp).Row).Value
  End With
    Workbooks.Open Chemin & "\fu.xls"
    With ActiveWorkbook
    With .Worksheets("feuil1")
    DerLigneFu = .Range("A1").End(xlDown).Row
    TabtempFu = .Range(.Cells(1, 1), .Cells(DerLigneFu, 1)).Value
    End With
    .Close
   
    For Each no_fu In TabListeTry
        Set trouve = TabtempFu(no_fu.Value, LookIn:=xlValues, LookAt:=xlWhole)
        If Not trouve Is Nothing Then no_fu.Interior.ColorIndex = 6
    Next

il me marque une erreur style argument nommés interdits a (LookAt:=xlWhole)
une petite suggestion a ce sujet :D
 

ChTi160

XLDnaute Barbatruc
Re : Ubound LBound et connection fichier fermé

Salut kevenpom
Bonjour le fil
Bonjour le Forum

Arff pas evident

mais il me semble que tu veux comparer la liste de la feuille try et modifier une plage de données , d'un classeur fermé
Je décortique
Set Ws_SourceFu = Worksheets("try") 'on affecte la valeur à la feuille Ws_SourceFu
With Ws_SourceFu 'avec cette feuille
'je remplie un tableau des valeurs de la plage déterminée en colonne A
TabListeTry = .Range("A1:A" & .Range("A65536").End(xlUp).Row).Value
End With
Workbooks.Open Chemin & "\fu.xls" 'ici j'ouvre un fichier fu.xls
With ActiveWorkbook 'avec ce classeur
With .Worksheets("feuil1") 'avec la feuille feuil1 de ce classeur
DerLigneFu = .Range("A1").End(xlDown).Row 'je détermine la derniére ligne non vide de la colonne A en partant du haut
TabtempFu = .Range(.Cells(1, 1), .Cells(DerLigneFu, 1)).Value 'je remplis un tableau de la plage ainsi déterminée
End With
.Close 'ici je ferme le classeur fu.xls
For Each no_fu In TabListeTry 'pour chaque ligne du tableau TabListeTry
'ci dessous tu veux faire une recherche sur le tableau récupéré dans le clssseur fu.xls mais la méthode n'est pas bonne ,elle s'applique avec la méthode Find et sur une plage de données
exemple :
Set Trouve=.Range(.Cells(1, 1), .Cells(DerLigneFu, 1)).Find(no_fu )
Pour travailler sur un tableau il faut passer les lignes et colonnes en revue par exemple
Code:
For L=1 to Ubound(TabListeTry,1) [COLOR=green]'pour chaque lignes du tableau[/COLOR]
  For ligne =1 to Ubound(TabtempFu,1)[COLOR=green] 'pour chaque lignes[/COLOR] 
   For col =1 to Ubound(TabtempFu,2) [COLOR=green]'pour chaque colonnes[/COLOR]
        If  TabtempFu(Ligne,col)= TabListeTry(L,1) Then [COLOR=green]'si égalité[/COLOR]
             .Cells(Ligne,col).Interior.ColorIndex=6 [COLOR=green]'alors on met l'équivalent _[/COLOR]
[COLOR=green]                                                cellule en couleur[/COLOR]
        End if
   Next
Next
Mais attention !!!!!!! Il faut que le classeur cible (fu.xls) soit ouvert pour pouvoir modifier les cellules Lol Eh Oui
on pourrait aussi modifier les cellules directement sans passé par le tableau TabtempFu à voir
Tiens nous au courant
Bonne fin de journée
 
Dernière édition:

kevenpom

XLDnaute Junior
Re : Ubound LBound et connection fichier fermé

Code:
For L = 1 To UBound(TabListeTry, 1) 'pour chaque lignes du tableau
  For Ligne = 1 To UBound(TabtempFu, 1) 'pour chaque lignes
        If TabListeTry(L, 1) = TabtempFu(Ligne, 1) Then
        Worksheets("try").Cells(L, 1).Interior.ColorIndex = 6
        
      End If
   Next
Next

Merci encore j'ai du mal m'expliquer mais jai changer un peu ton code pis sa marche nickel merci encore...
 

kevenpom

XLDnaute Junior
Re : Ubound LBound et connection fichier fermé

petite questions
avec se code
Code:
  Set Ws_Source = Worksheets("liste")
  With Ws_Source
      TabListe = Selection
      ' TabListe = .Range("A3:A" & .Range("A65536").End(xlUp).Row).Value
  End With
       Workbooks.Open Chemin & "\BD.xls"
    With ActiveWorkbook
        With .Worksheets("EMPL")
       DerLigne = .Range("A1").End(xlDown).Row
        Tabtemp = .Range(.Cells(2, 1), .Cells(DerLigne, 4)).Value
        End With
         .Close
    End With
    
' -------------------------------------------- Récupération de la localisation -----------------------------------------
    x = 0
   For Ligne = 1 To UBound(TabListe, 1) 'pour chaque element du tableau liste
     For L = 1 To UBound(Tabtemp, 1) 'pour chaque ligne du tableau bd
        If Tabtemp(L, 1) = TabListe(Ligne, 1) Then 'si egalite en colonne 1
          x = x + 1
             ReDim Preserve TabRecup(4, x) 'on redimensionne le tableau de récupération
               For Col = 1 To 4 'ici on boucle sur les colonne de la ligne trouvée
                 TabRecup(Col, x) = Tabtemp(L, Col)
               Next
        End If
      Next
   Next
With Worksheets("try")
  DerLigne = .Range("A65536").End(xlUp).Row + 1
  .Range(.Cells(2, 1), .Cells(DerLigne, 4)).ClearContents
  .Range("A2").Resize(UBound(TabRecup, 2), UBound(TabRecup, 1)) = Application.Transpose(TabRecup)
End With

sa me permet de récupérer mes emplacements d'articles mais si je voudrait en même temps récupérer une autre donnée de plus du style la colonne prix qui est situer dans une autre feuille de mon fichier BD.xls que dois-je faire.
Suis-je obliger de redouble ce code ou ya un moyen d'intégrer sa dans se code..
 
Dernière édition:

kevenpom

XLDnaute Junior
Re : Ubound LBound et connection fichier fermé

A partir de ton code je sais pas comment faire pour aller faire fonctionné mon application.transpose pck je sais pas comment faire vu qu'il y a des éléments dans les colonnes a b c d si je veut seulement coller mon tableau (Lui qui va récupérer les donné prix) dans la colonne e comment faire ...
Code:
TabListe = Selection
    Workbooks.Open Chemin & "\BD-080209.xls"
        With ActiveWorkbook
       With .Worksheets("ARTICLE")
            DerLigne2 = .Range("D1").End(xlDown).Row
            Tabtemp2 = .Range(.Cells(2, 4), .Cells(DerLigne2, 4)).Value
        End With
    .Close
    End With
    
    x = 0
   For Ligne = 1 To UBound(TabListe, 1) 'pour chaque element du tableau liste
     For L = 1 To UBound(Tabtemp2, 1) 'pour chaque ligne du tableau bd
        If Tabtemp2(L, 1) = TabListe(Ligne, 1) Then 'si egalite en colonne 1
          x = x + 1
             ReDim Preserve TabRecup2(1, x) 'on redimensionne le tableau de récupération
                 TabRecup2(4, x) = Tabtemp2(L, 4)
        End If
      Next
   Next
   
With Worksheets("try")
  DerLigne2 = .Range("E65536").End(xlUp).Row + 1
  .Range(.Cells(2, 5), .Cells(DerLigne, 5)).ClearContents
  ' .Range("E2").Resize(UBound(TabRecup2, 5)) = Application.Transpose(TabRecup2)
 
End With
 
Dernière édition:

Discussions similaires