Recherche dans fichier fermé entre 2 valeurs et copie des données

  • Initiateur de la discussion Initiateur de la discussion Pierre31
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

P

Pierre31

Guest
Bonjour à toutes et tous,

Par VBA et éventuellement par ADO je souhaite pouvoir copier dans le classeur ouvert "Ouvert.xls" les données des cellules de A(i) à (M(i) du fichier fermé "Fermé.xls" si dans ce fichier la cellule M(i) = > à 4500 ou M(i) =< à 5200. Le collage de la première donnée dans le fichier "Fermé.xls" commence à la cellule "A20".

D'avance merci pour vos réponses.

Cordialement
Pierre
 
Bonjour à toutes et tous,

Éventuellement est ce que je peux faire une boucle dans ADO du nombre de fois (5200-4500) et chercher dans le fichier fermé la valeur 4500 + numéro d'itération, copier les cellules de A à M qui correspondent à l'adresse si la valeur est trouvée et ce jusqu'à 5200.

Cordialement
Pierre
 
Re bonjour à toutes et tous,

Est ce que avec cette procédure je peux vérifier que la donnée de chaque cellule est égale ou supérieure par exemple à 4500.

Private Sub RechVal_Click()

Dim Source As ADODB.Connection
Dim Rst As ADODB.Recordset
Dim ADOCommand As ADODB.Command
Dim Fichier As String, Cellule As String, Feuille As String

'Adresse de la cellule contenant la donnée à récupérer
Cellule = "M2:M60000"
'Pour une plage de cellules, utilisez:
'Cellule = "A4:C10"

Feuille = "Liste$" 'n'oubliez pas d'ajouter $ au nom de la feuille.
'Chemin complet du classeur fermé
Fichier = "E:\Sous-Traitance\Sitia\GMAO\Budget\Facturation\Recap_Couts_Maint.xls"

Set Source = New ADODB.Connection
Source.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Fichier & ";Extended Properties=""Excel 8.0;HDR=No;"";"

Set ADOCommand = New ADODB.Command
With ADOCommand
.ActiveConnection = Source
.CommandText = "SELECT * FROM [" & Feuille & Cellule & "]"
End With

Set Rst = New ADODB.Recordset
Rst.Open ADOCommand, , adOpenKeyset, adLockOptimistic

Set Rst = Source.Execute("[" & Feuille & Cellule & "]")

Range("A2").CopyFromRecordset Rst
Else
End If


Rst.Close
Source.Close
Set Source = Nothing
Set Rst = Nothing
Set ADOCommand = Nothing

End Sub

Cordialement
Pierre
 
Re : Recherche dans fichier fermé entre 2 valeurs et copie des données

Bonjour Pierre, Michel, et à ceux qui passeront par ici,

Si tu es en réseau, et que la méthode ADO est indispensable pour éviter des télescopages: O.K.

Sinon, je te conseille d'éviter,
car il peut y avoir des surprises en cas de mauvaise configuration de la page Source!
(Je l'ai beaucoup testé à mes dépends)

Hormis ce point, puisque ADO peut te copier correctement les données,
je pense qu'il ne reste qu'à imaginer le travail à faire avec dans le Classeur maître.
(Voire à se satisfaire d'une copie traditionnelle de cette page source)

Là je soupçonne que tu saches le faire,

Amicalement, et au besoin si tu coinces quelque part

Yann

P.S. Salut Michel 🙂 🙂 🙂 Heureux de te croiser.
 
Bonjour Michel et Yann,

Tout d'abord merci Michel pour la solution MS Query à laquelle je n'avais pas pensé alors que j'ai eu l'occasion de l'utiliser il y a quelques années. Je travaille en réseau et effectivement cette solution nécessite comme le souligne Yann d'avoir un fichier source, dont là structure reste bien figée. La solution qui consiste à copier toute la base du fichier fermé (je l'utilise aussi dans d'autres cas) suivi de manipulations en local sur le fichier ouvert est intéressante, mais lorsque le nombre de lignes atteint les 5 à 6000 sur 14 colonnes c'est un peu lourd.
Je regarde à nouveau tout cela de près et j'opterais pour l'une ou l'autre des solutions, sachant que dans les deux cas je serais débloqué.

Bonne journée
Cordialement
Pierre
 
Bonjour à toutes et tous,

Dans la procédure ci dessous (MS_Query) comment remplacer les nombres 40500 et 41000 par les variables ValDeb pour la première valeur et ValFin pour la seconde valeur ceci afin de lancer la procédure à partir d'un bouton de la feuille de calcul après avoir saisi les valeurs dans les champs "deb" et "fin". J'ai essayé de mettre les variables directement à la place des nombres dans la procédure mais j'ai chaque fois un message d'erreur de syntaxe.


ValDeb = CDbl(Range("deb"))
ValFin = CDbl(Range("Fin"))


With ActiveSheet.QueryTables.Add(Connection:=Array(Array( _
"ODBC;DSN=Fichiers Excel;DBQ=E:\Sous-Traitance\Sitia\GMAO\Budget\Facturation\Recap_Couts_Maint.xls;DefaultDir=E:\Sous-Traitance\Sitia" _
), Array( _
"\GMAO\Budget\Facturation;DriverId=790;MaxBufferSize=2048;PageTimeout=5;")), _
Destination:=Range("A1"))
.CommandText = Array( _
"SELECT Histo.Date, Histo.`N°_OT`, Histo.ATL, Histo.C_C, Histo.Type_TRX, Histo.MO_Meca, Histo.Coeff_Meca, Histo.MO_Elect, Histo.Coeff_Elec, Histo.MO_Autre, Histo.Coeff_Autre, Histo.Mont_Tot_Fournit, Hi" _
, _
"sto.Date_Num" & Chr(13) & "" & Chr(10) & "FROM Histo Histo" & Chr(13) & "" & Chr(10) & "WHERE (Histo.Date_Num>=40500 And Histo.Date_Num<=41000)" & Chr(13) & "" & Chr(10) & "ORDER BY Histo.Date_Num, Histo.`N°_OT`")
.Name = "Lancer la requête à partir de Fichiers Excel_2"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.Refresh BackgroundQuery:=False
End With
End Sub


Cordialement
Pierre
 
Bonjour à toutes et tous,

Ne trouvant pas de solution avec MS_Query je me rabat sur ADO mais là encore je n'arrive pas à passer dans une variable la valeur à rechercher

Sub Extrac_ADO()
'
' Extrac Macro
' Macro enregistrée le 31/05/2011 par ADMIN
'


ValDeb = Range("Deb")
répertoire = ThisWorkbook.Path & "\"
Dim rs As ADODB.Recordset
Set cnn = New ADODB.Connection
cnn.Open "DRIVER={Microsoft Excel Driver (*.xls)};DBQ=" & répertoire & "Recap_Couts_Maint.xls"
Set rs = cnn.Execute("SELECT N°_OT,Mont_Tot_Fournit,Date_Num FROM Histo where Date_Num >40700 ")
[G2].CopyFromRecordset rs
'
End Sub

A la place de la valeur 40700 je voudrais mettre la variable ValDeb mais celà me provoque une erreur

D'avance merci pour vos réponses.

Cordialement
Pierre
 
Re bonjour,

J'ai enfin trouvé:

Set rs = cnn.Execute("SELECT N°_OT,Mont_Tot_Fournit,Date_Num FROM Histo where Date_Num >=" & ValDeb & "And Date_Num <=" & ValFin)

Ce qui me permet de récupérer la valeur des variables ValDeb et ValFin à partir des valeurs contenues dans les cellules de la feuille

Cordialement
Pierre
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

  • Question Question
Microsoft 365 Export données
Réponses
4
Affichages
903
Réponses
3
Affichages
879
Retour