Problème ligne de code enregistrement fichier et coller en valeur

cookies

XLDnaute Occasionnel
Bonjour le forum,

J'ai un code que j'ai pris en parti sur ce forum qui permet de boucler sur tous les fichiers d'un répertoire et de récupérer une certaine plage de données.

Il y deux choses que je voudrais adapter :
- lors de l'exécution de la procédure, il me propose d'enregistrer chaque fichier (car il ouvre chaque fichier) j'aimerais inclure dans le code que "non" je ne veut pas qu'il enregistre le fichier.
- ensuite j'essaie d'adapter pour qu'il "colle" en valeur afin de pas avoir les formules dans ma plage qui est copiée.

Voici le code :

Code:
Dim intFile As Integer
 Dim strWB As String
 Dim strFile As String
 Dim lgDerLig As Long
 Dim lgDerligB As Long
 
 Application.ScreenUpdating = False
 Application.EnableEvents = False

 ' Nom du classeur actuel
 strWB = ThisWorkbook.Name
 
 ActiveWorkbook.Worksheets(1).Activate
 lgDerligB = Range("B65536").End(xlUp).Row + 1
 
 ' Récupération du premier fichier dans le répertoire
 Chemin = "C:\Users\Desktop\test\entrée - Copie - Copie - Copie"
 strFile = Dir(Chemin & "\*.xls")

 ' Boucle du 1er au dernier classeur dans le répertoire
 Do While strFile <> ""
 ' Si le classeur n'est pas le classeur de destination
 If strFile <> strWB Then
 ' Ouvrir le fichier
Workbooks.Open Chemin & "\" & strFile

 ' Sélectionner le 1er onglet feuille de saisie
 ActiveWorkbook.Worksheets(1).Activate

 ' Copie des données
    lgDerLig = Range("B65536").End(xlUp).Row
 lgDerligB = Workbooks(strWB).Worksheets("Feuil1").Range("B65536").End(xlUp).Row + 1
 Workbooks(strFile).Worksheets("Synthèse").Range("B26:BA" & lgDerLig).Copy Destination:=Workbooks(strWB).Worksheets("Feuil1").Range("B" & lgDerligB)


 ' Fermeture du classeur
 Workbooks(strFile).Close
 End If

 ' Classeur suivant
 strFile = Dir
 Loop

 MsgBox "Le traitement des fichiers est terminé.", vbInformation, "Traitement..."

 Application.ScreenUpdating = True
 Application.EnableEvents = True
End Sub

La focalisation est dans ces lignes :
Code:
 ' Copie des données
    lgDerLig = Range("B65536").End(xlUp).Row
 lgDerligB = Workbooks(strWB).Worksheets("Feuil1").Range("B65536").End(xlUp).Row + 1
 Workbooks(strFile).Worksheets("Synthèse").Range("B26:BA" & lgDerLig).Copy Destination:=Workbooks(strWB).Worksheets("Feuil1").Range("B" & lgDerligB)


 ' Fermeture du classeur
 Workbooks(strFile).Close
 End If
Si vous avez des réponses je suis preneur.
Merci à tous !

Cookies
 
Dernière édition:

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : Problème ligne de code enregistrement fichier et coller en valeur

Bonjourcookies,

pour répondre à la première question
- lors de l'exécution de la procédure, il me propose d'enregistrer chaque fichier (car il ouvre chaque fichier) j'aimerais inclure dans le code que "non" je ne veut pas qu'il enregistre le fichier.
avec ceci:
Code:
 ' Fermeture du classeur
Application.DisplayAlerts = False
 Workbooks(strFile).Close
 End If
à+
Philippe
 

cookies

XLDnaute Occasionnel
Re : Problème ligne de code enregistrement fichier et coller en valeur

Salut Philippe,

Merci. J'avais vu cette fonction mais je l'avais placé après la fermeture du fichier donc ça ne marchait pas.

As-tu une idée pour coller ma plage en valeur ?

Code:
' Copie des données
lgDerLig = Range("B65536").End(xlUp).Row
lgDerligB = Workbooks(strWB).Worksheets("Feuil1").Range("B6553 6").End(xlUp).Row + 1

Workbooks(strFile).Worksheets("Synthèse").Range("B 26:BA" & lgDerLig).Copy Destination:=Workbooks(strWB).Worksheets("Feuil1") .Range("B" & lgDerligB)

J'ai tenté de mettre un .Value à la fin mais ça ne fonctionne pas..

Merci d'avance pour votre aide

Cookies
 

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : Problème ligne de code enregistrement fichier et coller en valeur

Re,

peut-être avec ceci . . . . . (pas testé)
Code:
Workbooks(strFile).Worksheets("Synthèse").Range("B 26:BA" & lgDerLig).Copy
Workbooks(strWB).Worksheets("Feuil1").Range("B" & lgDerligB).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
à+
Philippe
 

cookies

XLDnaute Occasionnel
Re : Problème ligne de code enregistrement fichier et coller en valeur

Re,

Non ça ne fonctionne pas.
Il plante sur la ligne ou il repasse sur le classeur de destination.

J'arrive pas à comprendre pourquoi j'arrive pas à coller en valeur...
 

Staple1600

XLDnaute Barbatruc
Re : Problème ligne de code enregistrement fichier et coller en valeur

Bonjour à tous


Et avec ceci, cela donne quoi?
Code:
Workbooks(strFile).Worksheets("Synthèse").Range("B26:BA" & lgDerLig).Copy 
Workbooks(strWB).Worksheets("Feuil1").Range("B" & lgDerligB).PasteSpecial Paste:=xlPasteValues
 

cookies

XLDnaute Occasionnel
Re : Problème ligne de code enregistrement fichier et coller en valeur

Re bonjour,

Je reviens vers vous sur le même code mais pas la meme demande. C'est pourquoi je n'ouvre pas un autre sujet.
Je sais pas si vous allez pouvoir m'aider, mais je tente.

Le code ci dessus me permet donc de copier coller une plage de données de tous les fichiers d'un même répertoire.

Ma sélection de plage remonte jusqu'à la dernière ligne non vide. Et c'est là le souci car j'ai dans des cellules de cette colonne B, des formules qui affichent du vide "".

Code:
 lgDerLig = Range("B65536").End(xlUp).Row

Comment lui dire de remonter jusqu'à la derniere ligne non vide, mais dans le sens non vide "avec valeur" et pas non vide "avec formule" ?

Se sont des formules simples qui affiche soit un chiffre soit "".

Merci pour votre aide.

Cookies
 

cookies

XLDnaute Occasionnel
Re : Problème ligne de code enregistrement fichier et coller en valeur

Bonsoir,

Merci.
Mais quand je l'adapte dans mon code, il ne fonctionne pas.

Je l'ai intégré de la sorte :

Code:
Sub Macro4()
 Dim intFile As Integer
 Dim strWB As String
 Dim strFile As String
 Dim lgDerLig As Long
 Dim lgDerligB As Long
 
 Application.ScreenUpdating = False
 Application.EnableEvents = False

 ' Nom du classeur actuel
 strWB = ThisWorkbook.Name
 
 ActiveWorkbook.Worksheets(1).Activate
 lgDerligB = Range("B65536").End(xlUp).Row + 1
 
 ' Récupération du premier fichier dans le répertoire
 Chemin = "C:\Users\ABP\Desktop\test\entrée - Copie - Copie - Copie"
 strFile = Dir(Chemin & "\*.xls")

 ' Boucle du 1er au dernier classeur dans le répertoire
 Do While strFile <> ""
 ' Si le classeur n'est pas le classeur de destination
 If strFile <> strWB Then
 ' Ouvrir le fichier
Workbooks.Open Chemin & "\" & strFile

 ' Sélectionner le 1er onglet feuille de saisie
 ActiveWorkbook.Worksheets(1).Activate

For i = Range("B65535").End(xlUp).Row To 1 Step -1
If Cells(i, 2) <> "" Then
lgDerLig = i
End If
Next i

 ' Copie des données

 lgDerligB = Workbooks(strWB).Worksheets("Feuil1").Range("B65536").End(xlUp).Row + 1
 Workbooks(strFile).Worksheets("Synthèse").Range("A26:BC" & lgDerLig).Copy
Workbooks(strWB).Worksheets("Feuil1").Range("B" & lgDerligB).PasteSpecial Paste:=xlPasteValues

 ' Fermeture du classeur
 Application.DisplayAlerts = False
 Workbooks(strFile).Close
 End If

 ' Classeur suivant
 strFile = Dir
 Loop

 MsgBox "Le traitement des fiches de suivi des gains est terminé.", vbInformation, "Traitement..."

 Application.ScreenUpdating = True
 Application.EnableEvents = True
 
 Call Macro3
 
End Sub

Mais je suis pas sur de moi...

Merci d'avance pour votre aide précieuse.

Cookies
 
Dernière édition:

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : Problème ligne de code enregistrement fichier et coller en valeur

Re,

Code:
For i = Range("B65535").End(xlUp).Row To 1 Step -1
If Cells(i, 2) <> "" Then
lgDerLig = i
End If
Next i

 ' Copie des données

 lgDerligB = Workbooks(strWB).Worksheets("Feuil1").Range("B65536").End(xlUp).Row + 1
 Workbooks(strFile).Worksheets("Synthèse").Range("A26:BC" & lgDerLig).Copy
Workbooks(strWB).Worksheets("Feuil1").Range("B" & lgDerligB).PasteSpecial Paste:=xlPasteValues
il y a sans doute un petit problème avec lgDerligB ,lgDerLig

à+
Philippe
 

cookies

XLDnaute Occasionnel
Re : Problème ligne de code enregistrement fichier et coller en valeur

Re,

Je ne crois pas car cela fonctionne lorsque je fais un xlup.

Je mets le fichier. C'est toujours un peu plus parlant avec. (c'est le module 1 par ailleurs)

Est-ce que l'on est sur qu'il enregistre bien "i" comme la dernière ligne tel que je l'ai mis dans le code ?
Car je me demande si il boucle pas en continu dessus...

Merci d'avance.
Cookies
 

Pièces jointes

  • compil_suivi2 - Copie.xlsm
    27.8 KB · Affichages: 26

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : Problème ligne de code enregistrement fichier et coller en valeur

Re,

Est-ce que l'on est sur qu'il enregistre bien "i" comme la dernière ligne tel que je l'ai mis dans le code ?
Car je me demande si il boucle pas en continu dessus...
le problème vient du fait qu'il manque une sortie de la boucle comme je l'avais mis dans le code en exemple

dans ce contexte il faut mettre Exit For

Code:
For i = Range("B65535").End(xlUp).Row To 1 Step -1
If Cells(i, 2) <> "" Then
lgDerLig = i
Exit For
End If
Next i

à+
Philippe
 

Statistiques des forums

Discussions
312 196
Messages
2 086 099
Membres
103 116
dernier inscrit
kutobi87