VBA macro copier coller plage non vide

Sylvie

XLDnaute Accro
Bonjour à tous,

je souhaiterais pouvoir intégrer dans une feuille de mon classeur le code macro qui me permettrait de copier les valeurs des cellules des premières lignes non vides se trouvant dans la plage R19 à T29. Je précise que cette feuille s'appelle en réalité 'calculs' et non feuil1 (au cas où ceci serait important)

Le collage des valeurs se fait à destination d'un fichier ouvert nommé
'copie résultats.xls' : collage spécial des valeurs à partir de la première ligne non vide de la colonne A à D de la ligne 4 à .....

Ce qui m'interesse surtout c'est d'automatiser la selection puis la copie de ma plage non vide de ma feuille 'calculs'.
Ensuite j'effecturais le collage spécial dans ma feuille de destination à moins que l'un de vous puisse l'intégrer dans le code ou pourquoi pas en faire un autre code distinct dans la feuille d'arrivée (ca serait très bien aussi :).
Je dois faire cette selection et ce copier coller sur 90 classeurs différents d'où ma demande.

Merci par avance à vous tous
Bonne fin de journée
Sylvie [file name=Sylvie_20050708181011.zip size=3794]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Sylvie_20050708181011.zip[/file]
 

Pièces jointes

  • Sylvie_20050708181011.zip
    3.7 KB · Affichages: 247

_Thierry

XLDnaute Barbatruc
Repose en paix
Re:ADO Lecture Feuille Classeur Précise (Index 2)

Bonsoir à tous,

Je regarderai plus longtemps tes liens et propositions Michel_M, car je sais d'avance que c'est sûrement très interressant, mais je suis à la bourre au bureau.

Pour Sylvie, heureux que tout ai marché comme prévu !

Pour ce qui est de ma part, j'ai testé en réseau la Version V01.00 sur 800 fichiers hyper structurés (Fabriqués automatiquement), Mais sans savoir combien de lignes sur chacun je devais scanner (je connaissais juste le nombre de colonnes, qu'en ADO on dénommera plutôt 'Champs' (Field))

J'ai donc testé 'A2:K500' en Range... Avec le nom de la Feuille Adéquate... 'Ca peut aller' ... mais il y avait encore des 'chti'-bugs par-ci par là... (Non non Jean-Marie je ne t'ai pas appelé !! lol)

Et comme le disais très justement, Michel_M, il ne faut surtout pas qu'un des Classeurs soit Ouvert (sur la WorkStation, mais en réseau aussi...) Donc j'ai récupéré une Function que j'avais collaboré à mettre au point pour un test de Lecture de Fichiers en Réseau avec Frédérique Sigonneau à l'époque sur le MPFE...


Voici donc une Version 01.01 un peu plus bétonnée... (Enfin j'espère !! lol)

Bonne Soirée
@+Thierry

[file name=USF_ADO_Calculs_Collector_V01_01.zip size=46947]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/USF_ADO_Calculs_Collector_V01_01.zip[/file]
 

Pièces jointes

  • USF_ADO_Calculs_Collector_V01_01.zip
    45.8 KB · Affichages: 372

Sylvie

XLDnaute Accro
Re:ADO Lecture Feuille Classeur Précise (Index 2)

Re Bonjour Thierry, Le forum

comme je te l'ai dit en tout début d'après midi pas de souci pour faire tourner ton userform sur Windows XP. Par contre cet après midi il est resté muet sur un pC equipé de Windows 98 SE. Aucun message d'erreur. Rien !
Michel a évoqué des problèmes de bibiothèques à modifier.... peux tu m'indiquer où je dois faire cette manip le cas échéant ?


Merci
Excellente soirée
Sylvie
 

michel_m

XLDnaute Accro
Re:ADO Lecture Feuille Classeur Précise (Index 2)

rere

At home avec Win98 et XL 2000 il faut 'décocher' les références Signalées 'MANQUANT' dans outils-références de VBE , cliquer sur OK et redemander outils références:

Cocher alors

Microsoft activeX Data objet 2.1 library

Et
Microsoft ADO ext. 2.1 for DDL and security

C'est ce que je signalais cet après-midi au boulot

Je joins l'appli indice 02 avec ces références de bibliothèques; normalement une version ultérieure Win et/ou XL absorbera la 'vieille' reférence. A vérifier bien sûr

A+

Michel
[file name=USF_ADO_Calculs_Collector_V01_02.zip size=34594]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/USF_ADO_Calculs_Collector_V01_02.zip[/file]
 
Dernière édition:

_Thierry

XLDnaute Barbatruc
Repose en paix
Re:ADO Lecture Feuille Classeur Précise (Index 2)

Bonjour Michel_M, Sylvie, le Forum


Merci Michel, je viens de faire tourner sous un vieux coucou avec WinME et Office Standard 2000, çà marche avec ton Fichier qui pointent sur des librairies 'vétustes' (lol)

Voici l'état de ma fenêtre Référence Blibliothèques dans le menu VBE (Visual Basic Editor) Menu => Outils => Puis 'Références' (Pour Sylvie)

PC Win Me / Office 2000 : Ouverture Directe du Fichier Sauvé par Michel_M (OK)


Tu dois trouver (Sylvie) selon le PC des référence 'MANQUANTES' dans cette liste... Tu les Décoches et tu cherches ensuite la même référence mais avec une Version plus ancienne... Logiquement le Fichier tel que Michel l'a paramétré devrait être absorbé par des Machines plus anciennes, le seul 'Hic' c'est au cas ou le fichier circule entre diverses configurations...

En effet...

PC Win XP S/P2 / Office Pro 2003 Ouverture Directe du Fichier Sauvé par Michel_M (OK)


Je sauve ce Fichier avec Office 2003...

Je réouvre sous l'autre bécanne (heureusement suis en réseau chez moi ;) )

PC Win Me / Office 2000 : Ouverture du Fichier Sauvé par Office 2003 (PAS OK)


Par conséquent, je décoche cette librairie manquante et je referme cette boite de dialogue (important, sinon on ne trouvera pas la 'Microsoft ADO ext. 2.x for DDL and security' dans la liste si on ne referme pas)

Pouis je ré-ouvre dans VBE Menu => Outils => 'Références' et je peux cocher comme suit :


Sacrée gymnastique ! lol

Donc par conséquent, il vaut mieux, dans le cas de ce genre de programme qui ne fait que récolter de l'info à la volée, en faire autant de copie que de PC avec configurations différentes.. Car le sens descendant change la référence...

Quand j'aurai 5 minutes (pas prèt d'arriver lol) je regarderrai le coup de la 'Liaison Tardive) si ça peut se faire pour cette library !!

Bon apétit ! (et oui c'est fête ici lol)
@+Thierry
 
M

michel_m

Guest
Re:ADO Lecture Feuille Classeur Précise (Index 2)

Bonjour Thierry et Sylvie

Bon repos, Thierry !

Sylvie, si tu passes dans le coin...

Comme je ne sais pas incorporer des images dans un post Ci joint constatation lucide et sage de 2 champions de 'provencale', ton passe-temps favori; après Excel, bien entendu

Amicalement

Michel
 
M

modus57

Guest
Re:ADO Lecture Feuille Classeur Précise (Index 2)

Ta procédure est trés interressante, mais je voudrais récupérer sur la feuille source la dernière cellule non vide de la colonne A.

J'ai pas réussi à écrire le code.

Pourrais-tu m'aider.

Merci d'avance à +.
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re:ADO Lecture Feuille Classeur Précise (Index 2)

Bonsoir Modus, Michel_m; MichelXLD, Sylvie

Ben modus, c'est que tu n'as pas regardé le code bien en entier, dans le module qui porte mon prénom, tu as un moyen de le faire...(par contre probablement pas le plus directe, mais là je laisse la place aux 'jeunes ados' (lol)

Bonne Soirée
@+Thierry
 

chemist

XLDnaute Junior
Re:ADO Lecture Feuille Classeur Précise (Index 2)

Bonjour je suis assez débutant en vb

j'ai regarder votre super démo et j'aimerais bien en utiliser une partie

Ce que je veux c'est de pouvoir ouvrir plusieurs fichiers qui se trouvent dans un répertoire. j'ai déja une macro qui compte le nombre de fichier et ouvre les fichiers pour un répertoire fix (voir macro plus bas. Mais j'aimerais avoir un formulaire qui demande quel répertoire et pouvoir avoir le choix d'ouvrir seulement 1 ou plusieur fichier. Donc la partie 1 et 2 de votre super démo fait exatement ce que je veux. Il reste juste a faire ouvrir mes fichiers. Je suis certain qu'il ne manque pas grand chose.

Si quelqu'un pouvais m'aider

win98se excel 2000 (maison)
xp (au travail)



Sub ChercheetOuvreFichier()
Set fichcherche = Application.FileSearch
With fichcherche

' .LookIn = GetDirectory
.LookIn = 'c:\\julie'
.Filename = '*.z' (format de mes fichier)
If .Execute > 0 Then
MsgBox .FoundFiles.Count & ' Fichier(s) a (ont) été trouvé(s).'
For I = 1 To .FoundFiles.Count
Workbooks.Open Filename:=.FoundFiles(I)
Cells.Select
Selection.Columns.AutoFit
ActiveWindow.LargeScroll Down:=4
Range('K142').Select
On Error Resume Next
Next I
Else
MsgBox 'Aucun fichier n'a été trouvé.'
End If
End With
End Sub
 

MichelXld

XLDnaute Barbatruc
Re:ADO Lecture Feuille Classeur Précise (Index 2)

bonjour à tous


modus57 , tu peux tester cette macro pour récuperer la derniere donnée de la colonne A , dans la feuille 'Feuil1' , du classeur fermé


Code:
Sub derniereDonnee_ColonneA()
'nécessite d'activer la référence Microsoft ActiveX Data Object 2.x Library
Dim Rs As ADODB.Recordset
Dim Cn As String
Dim Cible As String
Dim Fichier As String

Fichier = 'C:\\Documents and Settings\\michel\\excel\\test.xls'
Cn = 'DRIVER={Microsoft Excel Driver (*.xls)};' & _
        'ReadOnly=1;DBQ=' & Fichier & ';' & _
                'extended properties=''Excel 8.0;'''

'requete dans la feuille nommé 'Feuil1'
Cible = 'SELECT * FROM [Feuil1$];'

Set Rs = New ADODB.Recordset
Rs.Open Cible, Cn, adOpenKeyset

If Not Rs.EOF Then
'récupère la derniere donnee du 1er champ ( colonne A )
Rs.Move (Rs.RecordCount - 1)
MsgBox Rs.Fields(0).Value
End If

Rs.Close
Set Rs = Nothing
End Sub


Chemist , il vaut mieux que tu ouvres un nouveau fil de discussion pour ta question car la demo de Thierry consiste à récupérer les données sans ouvrir les classeurs

tu trouveras aussi de nombreux exemples en utilisant le moteur de recherche du forum 1ere génération

https://www.excel-downloads.com/search/


bonne journée
MichelXld
 
M

modus57

Guest
Re:ADO Lecture Feuille Classeur Précise (Index 2)

Bonjour à tous

Merci Michel c'est sympa, réponse ultra rapide, petit hic! quand je teste ça bug sur:

Cn = 'DRIVER={Microsoft Excel Driver (*.xls)};' & _
'ReadOnly=1;DBQ=' & Fichier & ';' & _
'extended properties=''Excel 8.0;'''

Est-il possible d'imbriquer cette procédure avec ta procédure ci-dessous récupérée sur le forum comportant un ligne légèrement modifiée:

Sub TheADOReader()
Dim XLFile As String
Dim RangeSource As String
Dim ADOConnection As ADODB.Connection
Dim ADOCommand As ADODB.Command
Dim ADORecordSet As ADODB.Recordset

XLFile = ThisWorkbook.Path & '\\classeurFerme.xls'

RangeSource = 'A1:A5'

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

Set ADOCommand = New ADODB.Command
With ADOCommand
.ActiveConnection = ADOConnection
.CommandText = 'SELECT * from [' & RangeSource & ']'
End With

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

Set ADORecordSet = ADOConnection.Execute('[' & RangeSource & ']')

With Sheets('Feuil1')
'LIGNE MODIFIEE
.Range('A65536').End(xlUp).Offset(1, 0).CopyFromRecordset ADORecordSet
End With

ADORecordSet.Close
ADOConnection.Close
End Sub

J'ai du mal avec les ADO, merci ciao à +

modus57
 

michel_m

XLDnaute Accro
Re:ADO Lecture Feuille Classeur Précise (Index 2)

Bonjour à Tous,


Michel:

Dans la démo ci dessus tu affectes la connection XL par un string

'DRIVER={Microsoft Excel Driver (*.xls)};' & _
'ReadOnly=1;DBQ=' & Fichier & ';' & _
'extended properties=''Excel 8.0;'''

ligne que je ne connais pas; il semble que l'on se passe du moteur jet qui va disparaitre (fil de Thierry il y a quelque temps) ? peux tu m'en dire + là dessus ou m'indiquer un lien ?
autre choseavec 'driver': ne faut il pas activer une bibliothèque supplémentaire?


Modus,

Sans vouloir empiéter sur la Démo de MichelXLd:

si tu emploies la proc avec 'jet' que tu proposes, tu remplaces sous la ligne 'LIGNE MODIFIEE' les instructions par celles écrites plus tôt par MIchel

If Not Rs.EOF Then
'récupère la derniere donnee du 1er champ ( colonne A )
Rs.Move (Rs.RecordCount - 1)
MsgBox Rs.Fields(0).Value
End If
Rs.Close
Set Rs = Nothing

en remplacant Rs par ADOrecordset

A+
Michel
 
M

modus57

Guest
Re:ADO Lecture Feuille Classeur Précise (Index 2)

Re Bonjour à tous

Re Merci Michel, c'est de ma faute j’aurais dû te transmettre la procédure intégrale que tu as communiquée ce matin

Sub derniereDonnee_ColonneA()
'nécessite d'activer la référence Microsoft ActiveX Data Object 2.x Library
Dim Rs As ADODB.Recordset
Dim Cn As String
Dim Cible As String
Dim Fichier As String

Fichier = 'C:\\Documents and Settings\\michel\\excel\\test.xls'

‘ QUAND JE TESTE C’EST LA OU CA BUG
Cn = 'DRIVER={Microsoft Excel Driver (*.xls)};' & _
'ReadOnly=1;DBQ=' & Fichier & ';' & _
'extended properties=''Excel 8.0;'''

'requete dans la feuille nommé 'Feuil1'
Cible = 'SELECT * FROM [Feuil1$];'

Set Rs = New ADODB.Recordset
Rs.Open Cible, Cn, adOpenKeyset

If Not Rs.EOF Then
'récupère la derniere donnee du 1er champ ( colonne A )
Rs.Move (Rs.RecordCount - 1)
MsgBox Rs.Fields(0).Value
End If

Rs.Close
Set Rs = Nothing
End Sub

Est-il possible d'imbriquer cette procédure avec la procédure ci-dessous récupérée sur le forum comportant un ligne légèrement modifiée:

Sub TheADOReader()
Dim XLFile As String
Dim RangeSource As String
Dim ADOConnection As ADODB.Connection
Dim ADOCommand As ADODB.Command
Dim ADORecordSet As ADODB.Recordset

XLFile = ThisWorkbook.Path & '\\classeurFerme.xls'

‘SOURCE A RECUPERER LA DERNIERE CELLULE NON VIDE DE LA COLONNE A
RangeSource = 'A1:A5'

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

Set ADOCommand = New ADODB.Command
With ADOCommand
.ActiveConnection = ADOConnection
.CommandText = 'SELECT * from [' & RangeSource & ']'
End With

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

Set ADORecordSet = ADOConnection.Execute('[' & RangeSource & ']')

With Sheets('Feuil1')
'LIGNE MODIFIEE
.Range('A65536').End(xlUp).Offset(1, 0).CopyFromRecordset ADORecordSet
End With

ADORecordSet.Close
ADOConnection.Close
End Sub

J'ai toujours autant de mal avec les ADO, je me documente, bon A.M, re merci ciao à +

modus57
 
M

modus57

Guest
Re:ADO Lecture Feuille Classeur Précise (Index 2)

Michel je me suis mal exprimé et je le regrette, en fait j’attendais une réponse de ta part car c’est la 2° fois que participe à un forum.

Ce que je cherche à faire c’est de copier la dernière cellule non vide de la colonne A, de la première feuille d’un classeur fermé, vers la première cellule vide de la colonne A sur la première feuille du classeur actif.

Grâce à ta procédure et depuis ton dernier message j’ai trouver la solution ci-dessous :

Sub derniereDonnee_ColonneA()
'nécessite d'activer la référence Microsoft ActiveX Data Object 2.x Library
Dim Rs As ADODB.Recordset
Dim Cn As String
Dim Cible As String
Dim Fichier As String

Fichier = ThisWorkbook.Path & '\\classeurFerme.xls'

Cn = 'Provider=Microsoft.Jet.OLEDB.4.0;' & _
'Data Source=' & Fichier & ';' & _
'Extended Properties=''Excel 8.0;HDR=No;'';'

'requete dans la feuille nommé 'Feuil1'
Cible = 'SELECT * FROM [Feuil1$];'

Set Rs = New ADODB.Recordset
Rs.Open Cible, Cn, adOpenKeyset

If Not Rs.EOF Then
'récupère la derniere donnee du 1er champ ( colonne A )
Rs.Move (Rs.RecordCount - 1)
MsgBox Rs.Fields(0).Value
End If

Range('A65536').End(xlUp).Offset(1, 0).Value = Rs.Fields(0).Value

Rs.Close
Set Rs = Nothing
End Sub

Mille fois merci pour ton aide

modus57
 

MichelXld

XLDnaute Barbatruc
Re:ADO Lecture Feuille Classeur Précise (Index 2)

rebonjour Modus , bonjour cher Michel

j'avais découvert cette méthode dans ce lien

http://www.erlandsendata.no/english/index.php?d=envbadacimportwbado

mais je n'ai pas de documentation très précise à ce sujet ( il n'y a pas de bibliotheque supplémentaire à activer )


je ne l'utilise pas souvent , mais tu dois pouvoir trouver quelques exemples sur la wiki page 6

un autres exemple :
Lien supprimé



bonne soirée
MichelXld
 

Discussions similaires

Réponses
56
Affichages
1 K

Statistiques des forums

Discussions
312 176
Messages
2 085 961
Membres
103 066
dernier inscrit
bobfils