Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

VBA macro copier coller plage non vide

  • Initiateur de la discussion Initiateur de la discussion Sylvie
  • 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 !

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

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

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
 
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:
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
 
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
 
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 à +.
 
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
 
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
 
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
 
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
 
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
 
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
 
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
 
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
 
- 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

Discussions similaires

Réponses
48
Affichages
1 K
Réponses
3
Affichages
270
Réponses
5
Affichages
565
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…