aide sur copier/coller classeur fermé

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

J

jean

Guest
Bonjour à tous

je m'excuse si je repose encore la même question sur un nouveau fil.
Voila, je sais que l'on peut écrire des donnée dans un classeur fermé, parce que j'ai vu un poste traitant du sujet sur ce forum, mais est t'il possible d'en extraire des données.

Peut être quelqu'un peut il me répondre sans prendre trop de son temp.

Merci
jean
 
Bonjour MichelXld,

Merci de me répondre si vite, mais les liens ne m'aide pas beaucoup.

Je me permet en quelque mots de t'expliquer ce que je voudrais faire
J'ai dans un repertoire bien definis tous mes devis
Dans un usf, j'ai une listbox qui m'affiche les devis que je peut ouvrir en dblcliquant dessus.
J'ai fait avec l'enregistreur une macro qui me copie toutes les donnée de ce devis vers une facture, cela marche bien, le problème avec cette macro, il faut chaque fois changer le nom du devis.

voici les premiers ligne de la macro

Windows('devis Mr Fanuel 05-9.xls')Activate
Range('E12').Select
Selection.Copy
Windows('facture.xls.xls').Activate
Sheets('facture').Select
Range('E12').Select
ActiveSheet.Paste

Ce que je voudrais , c'est sélectionner n'importe quel devis et qu'un button me lance la macro.

Est ce possible de faire cela

Merci de la réponse

Bon après midi
jean
 
Bonjour Michel, Jean, le Forum

Le titre de ce fil me laisse présager une certaine méconnaissance en Programmation.

En fait litéralement un 'Copier / Coller' ne pourra se faire que pour des classeurs ouverts.

Maintenant les liens de Michel et tout son énorme travail qu'il partage avec générosité, sont tout à fait aptes à répondre entièrement aux Actions 'Ecrire / Lire' sur des Fichier Fermés.

Il en résulte par contre des codes qui sont toutefois assez hardus pour quelqu'un qui débute.

Pour le cas où tu cherches des solutions de bases pour ta question 'mais est t'il possible d'en extraire des données' je répondrai de ne pas oublier qu'il est toujours possible de lire un classeur fermé par simples formules avec un lien... (On peut aussi 'aider' la formule à être dynamique en l'écrivant avec VBA)

Voici un exemple de Formule 'Pilotée' par VBA :

Option Explicit

Sub MonLecteurDeFichierFermes()
Dim FileToRead As Variant
Dim RangeToRead As String, SheetToRead As String
Dim FileName As String, PathString As String
Dim y As Integer, X As Integer

SheetToRead = InputBox('Indiquer la Feuille à Lire' & vbCrLf & _
                      ' (sinon rien et vous pourrez choiser)', 'Sheet Address', 'Feuil1')
RangeToRead = InputBox('Indiquer la Cellule à Lire', 'Range Address', 'A1')


FileToRead = Application.GetOpenFilename('Classeurs Excel,*.xls')
If FileToRead = False Then Exit Sub

        y = Len(FileToRead)
           
For X = y To 1 Step -1
               
If Mid(FileToRead, X, 1) <> Chr(92) Then
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; FileName = Mid(FileToRead, X, 1) & FileName
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
Else
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
Exit For
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
End If
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
Next X

PathString = Left(FileToRead, Len(FileToRead) - Len(FileName))

On Error GoTo Out
ActiveCell.Formula = '=
'' & PathString & '[' & FileName & ']' & SheetToRead & ''!' & RangeToRead
Exit Sub
Out:
MsgBox 'Opération Annulée'
End Sub

Bon Après Midi
[ol]@+Thierry[/ol]

PS Je viens de voir ta réponse Jean, en Fait tu as déjà tout dans le Code ci-dessus...

H - 29 = U 2
 
Bonsoir michel,thierry et le forum

Me revoila, role de grand père oblige

il est vrai que je ne connais pas grand chose sinon rien en programation vba, j'essaye de comprendre parfois j'arrive ou non.

Merci Thierry pour le code qui marche très bien pour une cellule,mais ce que je veux c'est recopier tous le devis en facture

Le code ci dessous marche très bien, pour un devis nommé, ce que je veux, c'est remplacer la ou les lignes

Windows('devis Mr Fanuel 05-9.xls').Activate

par un code qui peut ouvrir n'importe quel devis sans le nommé et le fermer a la fin de la procédure.

Private Sub ListBox1_DblClick(ByVal cancel As MSForms.ReturnBoolean)
Workbooks.Open chemin & ListBox1
Unload Me
'**********************************************
Windows('devis Mr Fanuel 05-9.xls').Activate
Range('E12').Select
Selection.Copy
Windows('facture.xls.xls').Activate
Sheets('facture').Select
Range('E12').Select
ActiveSheet.Paste
Windows('devis Mr Fanuel 05-9.xls').Activate
Range('H12').Select
Application.CutCopyMode = False
Selection.Copy
Windows('facture.xls.xls').Activate
Sheets('facture').Select
Range('H12').Select
ActiveSheet.Paste
Windows('devis Mr Fanuel 05-9.xls').Activate
Range('E13').Select
Application.CutCopyMode = False
Selection.Copy
Windows('facture.xls.xls').Activate
Sheets('facture').Select
Range('E13').Select
ActiveSheet.Paste
Windows('devis Mr Fanuel 05-9.xls').Activate
Range('E14').Select
Application.CutCopyMode = False
Selection.Copy
Windows('facture.xls.xls').Activate
Sheets('facture').Select
Range('E14').Select
ActiveSheet.Paste
Windows('devis Mr Fanuel 05-9.xls').Activate
Range('G14').Select
Application.CutCopyMode = False
Selection.Copy
Windows('facture.xls.xls').Activate
Sheets('facture').Select
Range('G14').Select
ActiveSheet.Paste
Windows('devis Mr Fanuel 05-9.xls').Activate
Range('E15').Select
Application.CutCopyMode = False
Selection.Copy
Windows('facture.xls.xls').Activate
Sheets('facture').Select
Range('E15').Select
ActiveSheet.Paste
Windows('devis Mr Fanuel 05-9.xls').Activate
Range('L4').Select
Application.CutCopyMode = False
Selection.Copy
Windows('facture.xls.xls').Activate
Sheets('facture').Select
Range('L13').Select
ActiveSheet.Paste
Windows('devis Mr Fanuel 05-9.xls').Activate
Range('D18:L27').Select
Application.CutCopyMode = False
Selection.Copy
Windows('facture.xls.xls').Activate
Sheets('facture').Select
Range('D18:L27').Select
ActiveSheet.Paste
Windows('devis Mr Fanuel 05-9.xls').Activate
'ActiveWindow.SmallScroll Down:=18
Range('L51').Select
Application.CutCopyMode = False
Selection.Copy
Windows('facture.xls.xls').Activate
Sheets('facture').Select
' ActiveWindow.SmallScroll Down:=11
Range('L51').Select
ActiveSheet.Paste
Windows('devis Mr Fanuel 05-9.xls').Activate
Range('L53').Select
Application.CutCopyMode = False
Selection.Copy
Windows('facture.xls.xls').Activate
Sheets('facture').Select
Range('L53').Select
ActiveSheet.Paste
Windows('devis Mr Fanuel 05-9.xls').Activate
Range('L55').Select
Application.CutCopyMode = False
Selection.Copy
Windows('facture.xls.xls').Activate
Sheets('facture').Select
Range('L55').Select
ActiveSheet.Paste
'*********************************FERMETURE DEVIS
Windows('devis Mr Fanuel 05-9.xls').Close
'**********************************************
Windows('facture.xls.xls').Activate
Sheets('facture').Select
Range('c3').Select
'**********************************
End Sub

Si quelqu'un a une idée.

Merci d'avance
jean
 
Bonjour Jean, Michel, le Forum

Désolé, je n'étais pas dispo pour te répondre avant.

Voilà mon code précédent adapté à ton cas de figure (il te restera à compléter l'Array sur les cellules qui doivent être traîtées, en respectant scrupuleusement la Syntax)

Option Explicit

Sub MonLecteurDeFichierFermes()
Dim FileToRead As Variant
Dim SheetToWrite As Worksheet
Dim SheetToRead As String
Dim FileName As String, PathString As String
Dim y As Integer, X As Integer
Dim Cell As Variant

Set SheetToWrite = ThisWorkbook.Worksheets('Facture')

SheetToRead = InputBox('Indiquer la Feuille à Lire' & vbCrLf & _
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ' (sinon rien et vous pourrez choiser)', 'Sheet Address', 'Devis')

FileToRead = Application.GetOpenFilename('Classeurs Excel,*.xls')
If FileToRead = False Then Exit Sub

&nbsp; &nbsp; &nbsp; &nbsp; y = Len(FileToRead)
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
For X = y To 1 Step -1
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
If Mid(FileToRead, X, 1) <> Chr(92) Then
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; FileName = Mid(FileToRead, X, 1) & FileName
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
Else
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
Exit For
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
End If
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
Next X

PathString = Left(FileToRead, Len(FileToRead) - Len(FileName))

&nbsp; &nbsp;
For Each Cell In Array('E12', 'H12', 'E13', 'E14', 'G14', 'E15', 'L4', 'L13', _
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'D18', 'E18', 'F18', 'G18', 'H18', 'I18', 'J18', 'K18', 'L18', _
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'D19', 'E19', 'F19', 'G19', 'H19', 'I19', 'J19', 'K19', 'L19', _
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'D20', 'E20', 'F20', 'G20', 'H20', 'I20', 'J20', 'K20', 'L20')
&nbsp; &nbsp;
&nbsp; &nbsp;
On Error GoTo Out
&nbsp; &nbsp; SheetToWrite.Range(Cell) = '=
'' & PathString & '[' & FileName & ']' & SheetToRead & ''!' & Cell
&nbsp; &nbsp;
Next Cell

Exit Sub
Out:
MsgBox 'Opération Annulée'
End Sub

Bon Week End
[ol]@+Thierry[/ol]
 
Bonjour Thierry et tous le forum

Me revoila, et je viens de voir le code modifié.

Génial, c'est génial je ne sais dire que cela

un petit hic cependant, il m'écrit des lignes sur le feuil facture qui ne figure pas sur le devis. Je joint le fichier pour voir.
Cela n'est pas dramatique, il suffit d'effacer le surplus.

Merci encore à Thierry ,Michel et tous les AS du forum pour le travail et leur connaissance qu'ils donnent si gentiment et gratuitement.

Un vieux belge de la région de Namur

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

Pièces jointes

bonsoir Jean , bonsoir cher @+Thierry

les cellules qui te posent probleme dans la feuille 'Facture' ne sont pas au bon format

fais un clic droit sur ces cellules
choisis l'option 'Format des cellules' dans le menu contextuel
dans l'onglet 'Nombre' , tu sélectionnes la catégorie 'Standard'
cliques sur OK pour valider

Ensuites revalides les formules


bonne soiree
MichelXld

Message édité par: michelxld, à: 07/08/2005 20:39
 
Bonsoir michel, thierry et le forum

Merci michel pour ta réponse, c'est génial d'avoir des personnes tel que vous tous, je n'aurais pas pensé a cela.

Maintenant cela marche à merveille

Merci, mille mercis et bonne vacance si ce n'est déjà fait.

jean
 
Bonsoir Jean, Michel, le Forum

Je n'avais plus suivi ce Fil...

Et bien Hélas non Jean, si tu ne respectes pas la même dispostion de tes Cellules entre 'Devis' et 'Facture' cette boucle devient obsolète...

For Each Cell In Array('E12', 'H12', 'E13', 'E14', 'G14', 'E15', 'L4', 'L13', _
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'D18', 'E18', 'F18', 'G18', 'H18', 'I18', 'J18', 'K18', 'L18', _
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'D19', 'E19', 'F19', 'G19', 'H19', 'I19', 'J19', 'K19', 'L19', _
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'D20', 'E20', 'F20', 'G20', 'H20', 'I20', 'J20', 'K20', 'L20')
&nbsp; &nbsp;
&nbsp; &nbsp;
On Error GoTo Out
&nbsp; &nbsp; SheetToWrite.Range(Cell) = '=
'' & PathString & '[' & Filename & ']' & SheetToRead & ''!' & Cell
Next Cell


Et c'est Elle qui fait tout 'le Moteur' de cet Algo...

Si vraiment tu ne peux pas t'arranger tu peux trafiquer....

Tu peux ignorer la cellule L13 (L4) dans la boucle et ajouter une ligne de plus dans le code

SheetToWrite.Range('L13') = '='' & PathString & '[' & FileName & ']' & SheetToRead & ''!L4'

Juste avant le 'Exit Sub'

Bonne Soirée
[ol]@+Thierry[/ol]

Message édité par: _Thierry, à: 09/08/2005 17:58
 
Bonsoir Thierry et le Forum,

Je viens à tout hazard de regarder a nouveau sur mon fil et à ma grande surprise, je vois que je ne suis pas oublié.

Merci à Thierry, cela marche super et d'une rapidité, alors là je ne vous dis pas.

Encore merci pour ce que vous donner, c'est super.

Jean
 
- 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 Classeur Disparu
Réponses
2
Affichages
474
Retour