Rechercher première ligne vide d'un fichier et ecrire

Résolu
Baloo24700 Messages postés 14 Date d'inscription   Statut Membre Dernière intervention   -  
 baloo24 -
Bonsoir A Toutes et Tous !

Un vrai néophyte en VBA s'adresse aux pros pour tenter d'éclaircir sa lanterne ! Merci d'avance à toutes celles et ceux qui se pencheront sur mon souci (sûrement modeste pour nombre d'entre Vous !).
a) J'ai un fichier A dans lequel j'enregistre des infos diverses et variées.
b) J'ai un fichier B que je fais ouvrir à travers une macro. maintenant j'aimerai connaitre l'ensemble du code pour :
- se positionner dans le fichier B sur la première ligne vide,
- recopier des infos de A dans les cellules de cette première ligne vide du fichier B.
Pourriez-vous me donner un coup de main ? D'avance merci et excellente soirée
JPierre,
A voir également:

43 réponses

pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Bonjour,

Ci dessous mon code du jour, avec tous les commentaires...
A tester.....

Sub exporter()
Dim FichierA As Workbook, FichierB As Workbook, drLign As Long, Tb(), i As Integer
Dim StrToCompare As String, Lig As Long, TablDonnees(), TablAComparer(), j As Byte, p As Integer

'Détermination du fichier source des données (on l'appelle FichierA)
Set FichierA = ThisWorkbook
'Stockage des données à exporter, dans une variable tableau
Tb = FichierA.Sheets("Prospect").Range("AN7:BG7").Value
'On créé une variable de type String qui concatène les données à comparer
    '-- Ici comme on ne veux que les 4 premières valeurs, on boucle de 1 à 4...
    'on aurait pu remplacer cette ligne par : StrToCompare = Tb(1, 1) & Tb(1, 2) & Tb(1, 3) & Tb(1, 4)
    'Mais c'est plus "évolutif" par une boucle
For i = 1 To 4
    StrToCompare = StrToCompare & Tb(1, i)                     ' A COMPARER
Next i

'TEST si le classeur Opérations.xlsx est ouvert, si non l'ouvre
    'sources [Ouskel'n'or]: https://www.developpez.net/forums/d98510/logiciels/microsoft-office/excel/macros-vba-excel/vba-e-tester-fichier-deja-ouvert/#post691146
On Error Resume Next
Workbooks("Opérations.xlsx").Activate
If Err <> 0 Then
    Set FichierB = Workbooks.Open("Y:/Partage/Opérations/Opérations.xslx")
Else
    Set FichierB = Workbooks("Opérations.xlsx")
End If
On Error GoTo 0

'Avec le Classeur FichierB que l'on vient d'activer
With FichierB
    'Dans la feuille patrimoine
    With .Sheets("Patrimoine")
        'on stocke le num de la première ligne vide colonne B
        drLign = .Range("B" & Rows.Count).End(xlUp).Row + 1
        'on stocke les valeurs contenues dans les 4 premières colonnes jusqu'à la dernière ligne
        'pour pouvoir les comparer cf ci-dessus "A COMPARER"
        TablDonnees = .Range("B1:E" & drLign - 1).Value
        'Concaténation de ces données dans une variable tableau
        For i = LBound(TablDonnees, 1) To UBound(TablDonnees, 1)
            ReDim Preserve TablAComparer(i)
            For j = 1 To 4
                TablAComparer(i) = TablAComparer(i) & TablDonnees(i, j)
            Next j
        Next i
        'Application.Match renvoie une erreur si les valeurs ne sont pas trouvées
        On Error Resume Next
        p = Application.Match(StrToCompare, TablAComparer, 0)
        'donc on traite l'erreur,
        'si pas trouvé alors
        If Err <> 0 Then
            'on les inscrit en dernières lignes
            .Range("B" & drLign).Resize(1, UBound(Tb, 2)) = Tb
        Else 'sinon
            'on indique à l'utilisateur à qu'elle ligne il peut les trouver......
            MsgBox "Ces données ont déjà été importées, cf ligne : " & p - 1
        End If
        On Error GoTo 0
    End With
End With
End Sub

0
Baloo24
 
Bonjour ! Là c'est du lourd .... Merci, je teste et vous dit ! Bonne journée et encore merci !
JPierre
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
C'est un poil plus complexe que ne le laisse envisager le titre de ce sujet : "Rechercher première ligne vide d'un fichier et ecrire", mais ça reste très abordable... Avec un peu d'habitude.
0
Baloo24
 
Merci ! Merci ! ça fonctionne à merveille ! Bravo Ô Maitre VBA !
JPierre
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
De rien, et oh non je ne suis pas "maître VBA".
N'hésite pas.
A+
0
Baloo24
 
Si ! Si! J'y tiens ! Je me permettrai bien une dernière requête si vous me le permettez....
La colonne A du fichier "Opérations.xlsx" feuille "Patrimoine" contient des codes. J'aimerai afin de simplifier la tâche des utilisateurs, rapatrier le code de la ligne qu'on vient d'écrire sur Opérations à travers votre macro dans la cellule K6 d'"Erola-6.xlsm" feuille "Prospect"
En résumé, votre macro inscrit sur la première ligne vide du tableau "Opérations" feuille "Patrimoine" à partir de la colonne B. Sur cette même ligne, colonne A, j'ai un code automatique que j'aimerai rapatrier dans "Erola-6" cellule K6 !
Pouvez-vous (encore) m'aider svp ? Merci d'avance,
Vous êtes dans quelle région d'ailleurs ?
JPierre
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Et après.......

Mi j'sus du 6-2, mais actuellement, je suis sur Lille.

Voici le code modifié, non testé. En gras les modifs.

Sub exporter()
Dim FichierA As Workbook, FichierB As Workbook, drLign As Long, Tb(), i As Integer
Dim StrToCompare As String, Lig As Long, TablDonnees(), TablAComparer(), j As Byte, p As Integer, Codauto As String

'Détermination du fichier source des données (on l'appelle FichierA)
Set FichierA = ThisWorkbook
'Stockage des données à exporter, dans une variable tableau
Tb = FichierA.Sheets("Prospect").Range("AN7:BG7").Value
'On créé une variable de type String qui concatène les données à comparer
    '-- Ici comme on ne veux que les 4 premières valeurs, on boucle de 1 à 4...
    'on aurait pu remplacer cette ligne par : StrToCompare = Tb(1, 1) & Tb(1, 2) & Tb(1, 3) & Tb(1, 4)
    'Mais c'est plus "évolutif" par une boucle
For i = 1 To 4
    StrToCompare = StrToCompare & Tb(1, i)                     ' A COMPARER
Next i

'TEST si le classeur Opérations.xlsx est ouvert, si non l'ouvre
    'sources [Ouskel'n'or]: https://www.developpez.net/forums/d98510/logiciels/microsoft-office/excel/macros-vba-excel/vba-e-tester-fichier-deja-ouvert/#post691146
On Error Resume Next
Workbooks("Opérations.xlsx").Activate
If Err <> 0 Then
    Set FichierB = Workbooks.Open("Y:/Partage/Opérations/Opérations.xslx")
Else
    Set FichierB = Workbooks("Opérations.xlsx")
End If
On Error GoTo 0

'Avec le Classeur FichierB que l'on vient d'activer
With FichierB
    'Dans la feuille patrimoine
    With .Sheets("Patrimoine")
        'on stocke le num de la première ligne vide colonne B
        drLign = .Range("B" & Rows.Count).End(xlUp).Row + 1
        'on stocke les valeurs contenues dans les 4 premières colonnes jusqu'à la dernière ligne
        'pour pouvoir les comparer cf ci-dessus "A COMPARER"
        TablDonnees = .Range("B1:E" & drLign - 1).Value
        'Concaténation de ces données dans une variable tableau
        For i = LBound(TablDonnees, 1) To UBound(TablDonnees, 1)
            ReDim Preserve TablAComparer(i)
            For j = 1 To 4
                TablAComparer(i) = TablAComparer(i) & TablDonnees(i, j)
            Next j
        Next i
        'Application.Match renvoie une erreur si les valeurs ne sont pas trouvées
        On Error Resume Next
        p = Application.Match(StrToCompare, TablAComparer, 0)
        'donc on traite l'erreur,
        'si pas trouvé alors
        If Err <> 0 Then
            'on les inscrit en dernières lignes
            .Range("B" & drLign).Resize(1, UBound(Tb, 2)) = Tb
        Else 'sinon
            'on indique à l'utilisateur à qu'elle ligne il peut les trouver......
            MsgBox "Ces données ont déjà été importées, cf ligne : " & p - 1
        End If
        On Error GoTo 0
        Codauto = .Range("A" & drLign).Value
    End With
End With
With FichierA.Sheets("Prospect") ' A ADAPTER tu ne m'as pas indiqué la feuille
    .Range("K6") = Codauto
End With
End Sub
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Baloo24
 
Pas compris le "A Adapter tu ne m'as pas indiqué la feuille". Je veux copier la cellule (A; ligne qu'on vient d'écrire) dans Opérations.xlsx feuille "patrimoine" dans "Erola-6.Xlsm" feuille "Prospect" cellule K6.
Voilà ... Où dois-je rajouter le nom de feuille ? Merci !

"With FichierA.Sheets("Prospect") ' A ADAPTER tu ne m'as pas indiqué la feuille
.Range("K6") = Codauto"
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Ben il y est... J'ai juste mis A ADAPTER au cas ou ça ne serait pas dans cette feuille là.
En fait, je n'avais pas vu que tu me l'indiquais...

Donc laisse comme ça. Le code est bon
0
Baloo24
 
Oui .... Maître mais cela ne marche pas ... Je n'ai rien en K6 dans Erola feuille prospect ... Voilà le code :
Sub exporter()
Dim FichierA As Workbook, FichierB As Workbook, drLign As Long, Tb(), i As Integer
Dim StrToCompare As String, Lig As Long, TablDonnees(), TablAComparer(), j As Byte, p As Integer, Codauto As String

'Détermination du fichier source des données (on l'appelle FichierA)
Set FichierA = ThisWorkbook
'Stockage des données à exporter, dans une variable tableau
Tb = FichierA.Sheets("Prospect").Range("AN7:BG7").Value
'On créé une variable de type String qui concatène les données à comparer
'-- Ici comme on ne veux que les 4 premières valeurs, on boucle de 1 à 4...
'on aurait pu remplacer cette ligne par : StrToCompare = Tb(1, 1) & Tb(1, 2) & Tb(1, 3) & Tb(1, 4)
'Mais c'est plus "évolutif" par une boucle
For i = 1 To 4
StrToCompare = StrToCompare & Tb(1, i) ' A COMPARER
Next i

'TEST si le classeur Opérations.xlsx est ouvert, si non l'ouvre
'sources [Ouskel'n'or]: http://www.developpez.net/forums/showpost.php?p=691146&postcount=12
On Error Resume Next
Workbooks("Opérations.xlsx").Activate
If Err <> 0 Then
Set FichierB = Workbooks.Open("X:\EROLA\Opérations.xlsx")
Else
Set FichierB = Workbooks("Opérations.xlsx")
End If
On Error GoTo 0

'Avec le Classeur FichierB que l'on vient d'activer
With FichierB
'Dans la feuille patrimoine
With .Sheets("Patrimoine")
'on stocke le num de la première ligne vide colonne B
drLign = .Range("B" & Rows.Count).End(xlUp).Row + 1
'on stocke les valeurs contenues dans les 4 premières colonnes jusqu'à la dernière ligne
'pour pouvoir les comparer cf ci-dessus "A COMPARER"
TablDonnees = .Range("B1:E" & drLign - 1).Value
'Concaténation de ces données dans une variable tableau
For i = LBound(TablDonnees, 1) To UBound(TablDonnees, 1)
ReDim Preserve TablAComparer(i)
For j = 1 To 4
TablAComparer(i) = TablAComparer(i) & TablDonnees(i, j)
Next j
Next i
'Application.Match renvoie une erreur si les valeurs ne sont pas trouvées
On Error Resume Next
p = Application.Match(StrToCompare, TablAComparer, 0)
'donc on traite l'erreur,
'si pas trouvé alors
If Err <> 0 Then
'on les inscrit en dernières lignes
.Range("B" & drLign).Resize(1, UBound(Tb, 2)) = Tb
Else 'sinon
'on indique à l'utilisateur à qu'elle ligne il peut les trouver......
MsgBox "Ces données ont déjà été importées, cf ligne : " & p - 1
End If
On Error GoTo 0
Codauto = .Range("A" & drLign).Value
End With
End With
With FichierA.Sheets("Prospect").Range("K6") = Codauto

End With
End Sub
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
arrête avec "maître" sinon j'm'en vais...

remplace :
With FichierA.Sheets("Prospect").Range("K6") = Codauto 

End With

par
With FichierA.Sheets("Prospect")
    .Range("K6") = Codauto 
End With

Mais est ce que Codauto est bien rempli??????
Pour cela vérifions d'abord en ajoutant un message :
With FichierA.Sheets("Prospect")
    MsgBox Codauto
    .Range("K6") = Codauto 
End With

Comment est complété le code automatique en cellule "A" dernière ligne?????
S'il n'y a rien au moment du copié collé, il n'y aura rien en K6...
0
Baloo24
 
Merci de vos remarques pertinentes. Codeauto dans "Opérations.xslx" s'incrémente automatiquement suivant un critère :
si la case commune (colonne Dx) est<>"" alors = Ax+1. Donc je ne pense pas avoir de problème là-dessus ...

Par contre, je risque d'avoir d'autres soucis différents ... Je me permettrai de vous solliciter comme proposé ! Je vous tiens au courant !
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Est ce que cela fonctionne??? ou pas...

Sinon, pas de souci, je suis à l'écoute.
0
Baloo24
 
Oui Franck ! Tout marche bien pour l'instant ... Je suis en train de développer une autre partie de ce fichier et n'hésiterai à vous contacter si ... Merci pour tout ! Et à très vite je pense ... Bien cordialement!
0
Baloo24
 
Bon ben ça n'a pas trainé .... Bien alors je vais essayer d'être plus sérieux dans l'approche de ma problématique :

a) J'ai le fichier "Erola-6.xlsm",
b) J'ai le fichier "Opérations.xlsx"
vous connaissez déjà

Mon fichier Erola - créé un répertoire du nom de mon opération, (ex: 323-Lille)
- enregistre dans ce répertoire sous le nom de mon opération (ex:323-Lille.xlsm).

J'ai un autre fichier très lourd en formules appelé Calcoto qui vient chercher des infos de ex:323-Lille.xlsm, les triturer pour fournir différentes infos.
0
Baloo24
 
Bonjour, je reprends mon message d'hier soir envoyé malgré son manque de fin car interrompu par l'arrivée d'une réunion inopinée désole ...
"Bon ben ça n'a pas trainé .... Bien alors je vais essayer d'être plus sérieux dans l'approche de ma problématique :

a) J'ai le fichier "Erola-6.xlsm",
b) J'ai le fichier "Opérations.xlsx"
vous connaissez déjà

Mon fichier Erola
- créé un répertoire du nom de mon opération, (ex: 323-Lille) à travers le chemin : W:\07 - Espace collaboratif\Programmation\Opérations d'investissement\Opérations Erola
- enregistre Erola dans ce répertoire sous le nom de mon opération (ex:323-Lille.xlsm).

J'ai un autre fichier très lourd en formules appelé Calcoto qui vient chercher des infos d'Erola maintenant appellé 323-Lille.xlsm, les triturer pour fournir différentes infos."
Ca c'était hier donc je continue ...
La fonction indirect() doit me permettre d'aller chercher les infos non plus dans Erola mais 323-Lille
J'aimerai pouvoir conserver en automatique Calcoto sous le nom "323-Lille Calcoto" en pdf et ce dans le répertoire "323-Lille" que j'ai créé à travers l'utilisation d'Erola-6.
J'ai compris (du moins je crois ...) que travailler en direct n'était pas possible, donc à l'ouverture de Calcoto que je lance depuis Erola, je créé un fichier intermédiaire dans lequel j'enregistre en cellule A1 l'info 323-Lille.
Quand calcoto s'ouvre, il récupère l'info 323-Lille et grâce à la fonction indirect() il va récupérer les infos dans 323-Lille.xslm. Maintenant j'aimerai enregistrer Calcoto sous "323-Lille-Calcoto-date.pdf"
Savez vous comment faire d'avance merci !
JPierre
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Bonjour,

Si tu disposes d'Excel >= 2007, et que ta question est bien :
Maintenant j'aimerai enregistrer Calcoto sous "323-Lille-Calcoto-date.pdf"
Voici la réponse :
- Fichier
- Enregistrer sous
- nom de fichier : 323-Lille-Calcoto-date
- type : choisir pdf
0
Baloo24
 
Oui Pijaku, j'ai bien excel2007 mais vous comprenez que je préfère travailler par macro car sinon je vais avoir une définition de noms de fichier aléatoire car je ne suis pas seul à bosser sur ce fichier ... C'est pourquoi je me permettais de vous solliciter ! Merci d'avance,
JPierre
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Alors quand souhaites tu enregistrer automatiquement ce fichier en pdf? A la fin d'une macro? Si oui, passe nous le code.
Lorsque l'utilisateur cliques sur un bouton? Quand il ferme le classeur? Quand il change de feuille?
Quand, comment, etc... veux tu que se lance ta procédure d'enregistrement en pdf.
0
Baloo24
 
Quand l'utilisateur ferme le classeur en cliquant sur un bouton svp ... Merci !
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Je suppose que tu sauras comment récupérer les informations permettant de trouver le nom du répertoire et le nom du fichier...
Donc le code du bouton (à insérer dans la feuille que tu souhaites exporter en pdf) est :
Private Sub CommandButton1_Click()
Dim Rep As String, NomFic As String
Rep = "C:\Ici\LeChemin\D'accès\Aton\Répertoire" 'A ADAPTER
NomFic = "nomDuFichierSansExtension" 'A ADAPTER
ChDir Rep
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Rep & "\" & NomFic
With ThisWorkbook
    .Save
    .Close
End With
End Sub
0
Baloo24
 
Merci je teste et vous dit ! Bien à Vous
0
Baloo24
 
Pijaku .... Help ! J'ai un os :

Avec le code ci dessous, j'aimerai :

a) faire créer un fichier appelé Intermédiaire.xslx
b) faire copier la cellule R1C17 de la feuille Prospect d'Erola-6 dans la cellule R1C1 d'intermédiaire
c) ouvrir mon fichier Lola.xla qui ouvre par macro Lola.xls
e) faire copier la cellule R1C1 d'intermédiaire dasn Lola.xls cellule "Z1"
f) fermer intermédiaire

Mais là je suis paumé !!! Merci

Sub TestFichierInter()
'
' TestFichierInter Macro
'

'
'Je lui fais créer un fichier "Intermédiaire"

ActiveWorkbook.SaveAs Filename:="X:\EROLA\Intermédiaire.xlsx", FileFormat:= _
xlOpenXMLWorkbook, CreateBackup:=False
Range("A1").Select
ActiveCell.FormulaR1C1 = "='[Erola-6.xlsm]Prospect'!R1C17"
Range("A2").Select

Workbooks.Open(Filename:="X:\EROLA\LOLA.xla").RunAutoMacros Which:= _
xlAutoOpen
Range("R1:U1").Select
ActiveCell.FormulaR1C1 = "=[Intermédiaire.xlsx]Feuil1!R1C1"
Range("R2").Select



End Sub
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Mais là je suis paumé !!! Merci

Ca ne nous aide pas à savoir ce que tu n'arrives pas à faire.....

Bon, créer un fichier "intermédiaire" ça à l'air d'aller.
Ensuite, pour "aller chercher" des infos dans d'autres classeurs, je te recommande de ne pas utiliser de formule (FormulaR1C1). Par contre, tu utilises des = tout simplement, en faisant attention de bien nommer les fichiers.
Par exemple, si les deux classeurs sont ouverts, :
ActiveCell.FormulaR1C1 = "='[Erola-6.xlsm]Prospect'!R1C17" 
à remplacer par :
WorkBooks("Intermédiaire.xlsx").Sheets("NomDeLaFeuill").Range("A1").Value = WorkBooks("Erola-6.xlsm").Sheets("prospect").Range("Q1").Value

Même chose pour l'autre.

Ou alors, tu peux également passer par des variables...
0
Baloo24
 
Pijaku ! Le code coince ... savez-vous pourquoi ? Ol coince sur la ligne en gras ...

Sub TestFichierInter()
'
' TestFichierInter Macro


ActiveWorkbook.SaveAs Filename:="X:\EROLA\Intermédiaire.xlsx", FileFormat:= _
xlNormalWorkbook, CreateBackup:=False

Range("A1").Select
Workbooks("Intermédiaire.xlsx").Sheets("Feuille1").Range("A1").Value = Workbooks("Erola-6.xlsm").Sheets("Prospect").Range("Q1").Value


Workbooks.Open(Filename:="X:\EROLA\LOLA.xla").RunAutoMacros Which:= _
xlAutoOpen

Workbooks("LOLA.xls").Sheets("LOLA").Range("Z1").Value = Workbooks("Intermédiaire.xlsx").Sheets("Feuille1").Range("A1").Value




End Sub
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Oui, je sais pourquoi...

Tu as une macro dans ce fichier intermédiaire.xlsx.
Donc, par conséquent, tu dois l'enregistrer sous l'extension .xlsm.
De plus, le fileformat d'uin fichier contenant des macros n'est pas xlNormalWorkbook, mais xlOpenXMLWorkbookMacroEnabled
Donc, ton code deviendrait :
ActiveWorkbook.SaveAs Filename:= _
        "X:\EROLA\Intermédiaire.xlsm", FileFormat:= _
        xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
0
Baloo24
 
Franck ! Je n'y comprends plus rien ... J'ai activé le code ci-dessous et le résultat est qu'il m'enregistre le fichier Erola sous le nom d'intermédiaire au lieu de créer un fichier intermédiaire où je veux juste remplir la cellule A1 ... pour m'en resservir dasn lOla ...

Sub TestFichierInter()
'
' TestFichierInter Macro


ActiveWorkbook.SaveAs Filename:="X:\EROLA\Intermédiaire.xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
Range("A1").Select
Workbooks("Intermédiaire.xlsm").Sheets("Feuille1").Range("A1").Value = Workbooks("Erola-6.xlsm").Sheets("Prospect").Range("Q1").Value

Workbooks.Open(Filename:="X:\EROLA\LOLA.xla").RunAutoMacros Which:= _
xlAutoOpen

Workbooks("LOLA.xls").Sheets("LOLA").Range("Z1").Value = Workbooks("Intermédiaire.xlsm").Sheets("Feuille1").Range("A1").Value




End Sub
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Tu créées un fichier juste pour garder une donnée?????
Mets la dans une variable.
Genre :
Dim MaVar As String
MaVar = Workbooks("Erola-6.xlsm").Sheets("Prospect").Range("Q1").Value
Workbooks.Open(Filename:="X:\EROLA\LOLA.xla").RunAutoMacros Which:= _ 
xlAutoOpen 
Workbooks("LOLA.xls").Sheets("LOLA").Range("Z1").Value = MaVar

Ou alors, si tu ne fermes pas ton classeur Erola :
Workbooks.Open(Filename:="X:\EROLA\LOLA.xla").RunAutoMacros Which:= _ 
xlAutoOpen 
Workbooks("LOLA.xls").Sheets("LOLA").Range("Z1").Value = Workbooks("Erola-6.xlsm").Sheets("Prospect").Range("Q1").Value
0
Baloo24
 
Franck ! Il me plante sur l'ouverture de Lola xla je n'ai pourtant rien changé !! Sauriez-vous pourquoi ?

Workbooks.Open(Filename:="X:\EROLA\LOLA.xla").RunAutoMacros Which:=xlAutoOpen
Workbooks("LOLA.xls").Sheets("LOLA").Range("Z1").Value = Workbooks("Erola-6.xlsm").Sheets("Prospect").Range("Q1").Value
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Je ne sais pas.
1- je n'ai jamais ouvert de classeur .xla par macro,
2- je ne sais pas quel est le message d'erreur...
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Mais au fait, Lola c'est un .xla ou .xls........Mmmmm
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
C'est pourquoi, je t'ai proposé, non pas de créer un fichier intermédiaire, mais de passer par une variable:
A ADPATER bien sur, les feuilles machin ça ne va pas fonctionner...
Dim MaVar As String
MaVar = Workbooks("Erola").Sheets("machin").Range("truc").Value
'création du répertoire
'enregistrement sous 123-Lille
Workbooks.Open("Lola")
With Workbooks(lola)
    .Sheets(machin).Range(bidule) = MaVar
End With 

0
Baloo24
 
Franck Merci ! Je sors juste de réunion ... Prends la voiture et me tape les 70kms qui me séparent de mon domicile ! Je vois cela demain matin et vous tiens au courant ! Bonne soirée qd même et merci encore pour votre dévouement !
JPierre
0
Baloo24
 
Bonjour Franck ! Non je ne vous ai pas laissé tomber sans même un merci mais j'ai été un peu débordé et un we de folie ...
Bon pour revenir à nos moutons ...
J'ai une macro ci-dessous qui fonctionnait bien mais qui là ne fonctionne plus (erreur 1004 La méthode 'SaveAs' de l'objet '_workbook' a échoué) que je en comprends pas ... Voici le code :
Sub EnregFichier()


Dim chemin As String
Dim repertoire As String
Dim nom As String
Dim extension As String
chemin = "W:\07 - Espace collaboratif\Programmation\Opérations d'investissement\Opérations Erola\"
repertoire = ActiveSheet.Range("AF1") & "\"
nom = ActiveSheet.Range("AF1")
extension = ".xlsm"
ActiveWorkbook.SaveAs Filename:=chemin & repertoire & nom & extension, FileFormat:=xlOpenXMLWorkbookMacroEnabled

End Sub
Pouvez-vous tenter de m'éclairer un brin ? D'avance merci !
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Bonjour,

Pouvez-vous tenter de m'éclairer un brin ?
Ben pas vraiment. Ce code fonctionne super bien chez moi........

Alors je penche pour une erreur d'utilisateur.
Vérifie bien tout... L'orthographe, la cellule AF1 etc etc...
Remplace peut être ActiveShhet pas Sheets("NomDeLaFeuille")...

Fait des tests en écrivant en "dur" tes variables une par une : [changements en gras]
Sub PremierTest() 
Dim chemin As String 
Dim repertoire As String 
Dim nom As String 
Dim extension As String 

chemin = "W:\07 - Espace collaboratif\Programmation\Opérations d'investissement\Opérations Erola\"
 repertoire = "2013 CCM\" 
nom = ActiveSheet.Range("AF1") 
extension = ".xlsm" 
ActiveWorkbook.SaveAs Filename:=chemin & repertoire & nom & extension, FileFormat:=xlOpenXMLWorkbookMacroEnabled
End Sub

Sub SecondTest() 
Dim chemin As String 
Dim repertoire As String 
Dim nom As String 
Dim extension As String 

chemin = "W:\07 - Espace collaboratif\Programmation\Opérations d'investissement\Opérations Erola\"
 repertoire = "2013 CCM\" 
nom = "2013 CCM"
extension = ".xlsm" 
ActiveWorkbook.SaveAs Filename:=chemin & repertoire & nom & extension, FileFormat:=xlOpenXMLWorkbookMacroEnabled
End Sub

Reviens me dire si ça cloche encore.
Attention également aux caractères interdits par Windows dans les noms de fichier : ", /, \, *, ?, <, >, |, :
0
Baloo24
 
Franck, les 2 tests se plantent toujours sur la même ligne ... Quand je lance la macro depuis le bouton, il me dit que le répertoire ".... \Opérations Erola\" existe déjà ... Je comprends pas je veux qu'il créé un répertoire dans "Opérations Erola \" !!!
0
Baloo24
 
Franck ! Je viens de trouver ... Une erreur de référencement de cellule après modif ... Bon je me penche sur la macro que vous m'avez adressée jeudi am maintenant et je pense que le tour sera joué ... A tout de suite ! Merci encore
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Ben si.....

1 - j'ouvre Erola-6.xlsm,
je créé aussitôt un code pour cette opération ==> J'ai pas compris...
1 bis- je stocke, dans une variable le nom dont j'aurais besoin par la suite.
exemple1 :
Dim MaVar As String  
MaVar = "321-Lille-"

exemple2 :
Dim MaVar As String  
MaVar = Workbooks("Erola-6.xlsm").Sheets("Prospect").Range("AF1").Value

je définis un répertoire (321-Lille) et un nom de fichier pour (321-Lille.xlsm)
j'enregistre le new fichier. Donc je n'ai plus Erola-6.xlsm de dispo. ==> En effet, mais je n'en ai plus besoin, mon nom étant stocké dans une variable
Je continue ma saisie sur (321-Lille.xlsm)
2- j'ouvre Lola.xls
3 - je voudrais enregistrer Lola.xls sous "321-Lille-Lola".
exemple :
Dim chemin As String, repertoire As String, nom As String, extension As String  
Dim MaVar As String  
MaVar = Workbooks("Erola-6.xlsm").Sheets("Prospect").Range("AF1").Value  
'  
'Bla bla bla ton code ICI  
'je définis un répertoire (321-Lille) et un nom de fichier pour (321-Lille.xlsm)  
'j'enregistre le new fichier  
'Je continue ma saisie sur (321-Lille.xlsm)   
'j'ouvre Lola.xls   
'etc...  
'etc....  
'PROCEDURE D'ENREGISTREMENT DE Lola.xls sous 312-lille-Lola  
chemin = "C:\Users\Excel\Travail\"  
repertoire = "blablabla\"  
nom = MaVar & "Lola"  
extension = ".xls"  
With Workbooks("lola.xls")  
    .SaveAs Filename:=chemin & repertoire & nom & extension  
End With


Cordialement,
Franck P
0
Baloo24
 
Bonjour Franck ! Quel temps à Lille ? Ici brumeux mais belle journée annoncée ... On attend !
Bon je reprends pied dans mon fichier .... Alors pour répondre à votre question "je créé aussitôt un code pour cette opération ==> J'ai pas compris... ". Si vous vous rappelez, je rapatrie un code auto qui va me permettre d'identifier mon opération ("321" dans l'exemple 321-Lille ). Vous m'aviez même demandé comment s'attribuait le code auto.
Pour le reste du code macro communiquer, je le mets dans mon fichier et vous dit ! Bien à Vous,
JPierre
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Salut JP,

Pluie, temps maussade pour toute la journée. Une belle journée de printemps qui s'annonce!

Euh JP, depuis le temps (73 messages), il est temps de se tutoyer non?
0
Baloo24
 
Ok Franck ... D'accord pour le tutoiement ! Bon je vois que le Nord demeure le Nord .... Lol !
Bon la macro suivante ne fonctionne pas ... Je ne récupère pas MaVar d'Erola-6.xlsm dans Lola.xlsx cellule Z1, peux-tu jeter un oeil ? D'avance merci :

Sub Ouvrelola()

Dim MaVar As String
MaVar = Workbooks("Erola-6.xlsm").Sheets("Prospect").Range("AF1").Value
'enregistrement sous 123-Lille
Workbooks.Open(Filename:="X:\EROLA\LOLA.xla").RunAutoMacros Which:=xlAutoOpen
With Workbooks("LOLA.xls")
.Sheets("LOLA").Range("Z1") = MaVar
End With

End Sub
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
1- Essaye de placer un MsgBox après l'implémentation de MaVar, pour voir ce qu'elle contient :
Sub Ouvrelola() 
Dim MaVar As String 

MaVar = Workbooks("Erola-6.xlsm").Sheets("Prospect").Range("AF1").Value 
MsgBox MaVar
'enregistrement sous 123-Lille 
Workbooks.Open(Filename:="X:\EROLA\LOLA.xla").RunAutoMacros Which:=xlAutoOpen 
With Workbooks("LOLA.xls") 
     .Sheets("LOLA").Range("Z1") = MaVar 
End With 
End Sub


2- tu as du mal avec les extensions de fichier... Tu parles de .xlsx, dans ton code c'est toujours .xla et hier c'était .xls.... Faudrait savoir.
0
Baloo24
 
Alors MaVar contient bien l'info demandée elle s'affiche dans le MsgBox ...
Par contre comme je te l'ai dit il y a quelques messages, je suis obligé de passer par Lola.xla pour ouvrir Lola.xls ... car il réinitialise entre autres, les calculs de Lola.xls
A te lire,
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
J'en penses : un érola de trop...
Sinon de tes fichiers, je n'en penses rien. J'arrive vraisemblablement en fin de parcours créatif, donc c'est beaucoup trop complexe pour que j'y comprenne quelque chose...

Bon, lors de l'ouverture de lola.xla, il faut cliquer sur un bouton pour ouvrir lola.xls.
Par conséquent notre macro ne peux pas fonctionner.
Je te propose donc cette solution :

Lorsque tu créées ton nouveau fichier (ex : 321-Lille), tu y insères, dans une cellule clairement identifiée (ex : Sheets("Listes").Range("AZ1")) la référence que tu veux transmettre à Lola.xls.
Comme ceci :
Workbooks("Erola-6.xlsm").Sheets("Listes").Range("AZ1").Value  = Workbooks("Erola-6.xlsm").Sheets("Prospect").Range("AF1").Value 
'enregistrement sous 123-Lille


Puis, pour récupérer la valeur stockée dans 312-lille, tu créées une macro, dans lola.xls, qui se déclenche à l'ouverture de lola.xls, et qui va chercher cette valeur :

Dans lola.xls :
Dans le module ThisWorkbook de lola.xls :
Private Sub Workbook_Open()
Dim Wb As Workbook
Dim Ws As Worksheet
    
For Each Wb In Application.Workbooks
    For Each Ws In Wb.Worksheets
        If Ws.Name = "Listes" Then
            ThisWorkbook.Sheets("LOLA").Range("Z1") = Workbooks(Wb.Name).Sheets(Ws.Name).Range("AZ1")
        End If
    Next Ws
Next Wb
End Sub
0