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

XL 2019 Difficulté avec FileDialog

Fipat

XLDnaute Occasionnel
Bonjour,

J'utilise cette macro pour ouvrir un fichier via une boite de dialogue et je copie son contenu pour le mettre sur un autre classeur.
Ce code fonctionnait très bien jusqu'à ce matin.
Peut-être ai-je fait une mauvaise manipulation, mais une erreur que je ne comprends pas sur la ligne :
VB:
On Error Resume Next

Ce que je ne comprends pas ce que je n'ai pas modifié ce code qui fonctionnait très jusqu'à ce matin.
Code:
Sub RecFichier()
  Dim Fichier As String
   Application.CutCopyMode = False
    With Application.FileDialog(3)
        .Show
        On Error Resume Next
        Fichier = .SelectedItems(1)
        If Err.Number <> 0 Then Exit Sub
        Workbooks.Open Fichier
Cells.Select
    Selection.Copy
    Windows("Indicateur.xlsm").Activate
    Sheets("TRI").Select
    Cells.Select
    ActiveSheet.Paste
    End With
       Application.CutCopyMode = True
End Sub

Merci pour vos avis.
 

patricktoulon

XLDnaute Barbatruc
Bonjour si vraiment l'erreur est la gestion d'erreur elleme ça me parait être encore un probleme de latence mémoire
les versions sup à 2007 en sont coutumières
je te propose de gérer le true/false plutôt que de gérer l'erreur
et d'autre part nul besoin de sélecter
VB:
Sub RecFichier()
    Dim Fichier As String, WbK As Workbook, plageàcopier As Range
  'pour eviter de faire des crise
 
  'la gestion du dialog
    With Application.FileDialog(3)
        If .Show = -1 Then 'si le .show retourne true (.1en numerique) alors....
            Fichier = .SelectedItems(1)
        Else: Exit Sub
        End If
    End With


'si on est pas sorti les cells de la feuille"tri" = les celle de la feuille 1 du classeur ouvert
    Set WbK = Workbooks.Open(Fichier)
  
    Set plageàcopier = WbK.Sheets(1).UsedRange ' ca c'est la plage utilisée dans le classeur que tu viens d'ouvrir
  
    'on resize donc A1 a la dimension de la plage et on lui donne la valeur de ta plage
    ThisWorkbook.Sheets("TRI").[A1].Resize(plage.Rows.Count, plage.Columns.Count) = plageàcopier.Value

    WbK.Close
End Sub
cela dit il existe bien un autre moyen de copier une plage d'un fichier fermé
si ça t’intéresse je t'explique
 

Fipat

XLDnaute Occasionnel
Bonjour,

Merci pour cette réponse.
Si je lance ce code j'ai une nouvelle erreur sur cette ligne.
VB:
Fichier = .SelectedItems(1)

Sinon pas sur d'avoir compris, mais la plage à copier devient "plageàcopier." ?
Ce que je devrais faire après Wbc.Close c'est ?

plageàcopier.Copy
Windows("Indicateur.xlsm").Activate
Sheets("TRI").Select
Cells.Select
ActiveSheet.Paste

Oui je suis également intéressé pour voir comment copier le fichier sans l'ouvrir en sachant que le nom de se fichier est aléatoire
 

patricktoulon

XLDnaute Barbatruc
ok
avant de passer par un autre dialog on va essayer un doevents
mais je suppute un problème de librairie
VB:
Sub RecFichier()
    Dim Fichier As String, WbK As Workbook, plageàcopier As Range
  'pour eviter de faire des crise
 
  'la gestion du dialog
    With Application.FileDialog(3)
        If .Show = -1 Then 'si le .show retourne true (.1en numerique) alors....
           doevents
           Fichier = .SelectedItems(1)
        Else: Exit Sub
        End If
    End With


'si on est pas sorti les cells de la feuille"tri" = les celle de la feuille 1 du classeur ouvert
    Set WbK = Workbooks.Open(Fichier)
 
    Set plageàcopier = WbK.Sheets(1).UsedRange ' ca c'est la plage utilisée dans le classeur que tu viens d'ouvrir
 
    'on resize donc A1 a la dimension de la plage et on lui donne la valeur de ta plage
    ThisWorkbook.Sheets("TRI").[A1].Resize(plage.Rows.Count, plage.Columns.Count) = plageàcopier.Value

    WbK.Close
End Sub
et SVP oublier les activate et select et compagnie
 

patricktoulon

XLDnaute Barbatruc
re
sinon on essaie avec un autre dialog
VB:
Sub RecFichier()
    Dim Fichier As String, WbK As Workbook, V As Range
  'pour eviter de faire des crise
 
  'autre  dialog "<<GetOpenFileName>>"
     Fichier = Application.GetOpenFilename("XL* Files (*.xls;*.xlsm;*.xlsx), *.xls;*.xlsm;*.xlsx", 1, "ouvrir un fichier")
    If Fichier = "" Then Exit Sub
      
'si on est pas sorti les cells de la feuille"tri" = les celle de la feuille 1 du classeur ouvert
    Set WbK = Workbooks.Open(Fichier)
    
    Set plageàcopier = WbK.Sheets(1).UsedRange ' ca c'est la plage utilisée dans le classeur que tu viens d'ouvrir
    
    'on resize donc A1 a la dimension de la plage et on lui donne la valeur de ta plage
    ThisWorkbook.Sheets("TRI").[A1].Resize(plage.Rows.Count, plage.Columns.Count) = plage.Value

    WbK.Close
End Sub
 

patricktoulon

XLDnaute Barbatruc
re
j'ai bien peur que ton excel soit en vrac
si tu ne peux plus utiliser les librairies des plus basiques
tu serait pas sur mac par hasard?
ou
tu n'aurais pas eu une mise a jour récente ?
ou
changé de version d'office?

toutes ces chose a vérifier
 

Fipat

XLDnaute Occasionnel
Bonjour patricktoulon,

J'ai testé le fichier sur mon PC Pro et toujours des soucis.

Je suis revenu avec mon code de base et là plus de souci.
Par contre maintenant il bloque sur une autre vba de ce fichier.
Avec une ligne qui ne devrait en rien bloquer.
VB:
 With Worksheets("Traitparts")

Je ne comprends plus rien, c'est du délire.
Je devrais refaire le fichier complétement ?
Si oui les boules car gros travail
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil

@Fipat
[avis personnel et retour d'expérience in real life]
Je devrais refaire le fichier complétement ?
Oui.
Car avec un classeur est vérolé ou à bout de souffle, j'appuie directement sur la touche SUPPR depuis l'explorateur Windows.
Et je récréé un classeur tout neuf
Ce qui ne prend pas trop de temps puisque j'ai exporté au préalable le projet VBA au fur et à mesure de la construction du fichier initial
(sans compter les copies de sauvegarde du classeur que j'ai réalisé de manière régulière)
[/avis personnel]
 

Fipat

XLDnaute Occasionnel
Bonjour,

Effectivement j'ai commencé à le refaire et je n'ai plus de souci.
Mon code ne ne donne plus d'erreur.
Étrange quand même.
Il serait intéressant de savoir pourquoi.
En tout cas, merci à vous
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re

@Fipat
Pour le savoir, il faudrait que tu disposes de sauvegardes de ton classeur
et que tu refasses les modifications récentes que tu as faites jusqu'à ce que le problème réapparaisse.
(Mais cela risque d'être chronophage

Le principal c'est que ton nouveau fichier fonctionne.
 

patricktoulon

XLDnaute Barbatruc
re
ça arrive parfois je n'ai ja mais compris pourquoi
le core.xml fait le clown et c'est fichu
alors j'ai remarqué sur mon portable Off 2016 64 bits ca arrive quand la puissance uc memoire dispo du Pc est trop sollicitée ici et là donc a l’enregistrement du fichier PAF!!! c'est en rade
et c'est pareil d'une version a une autre
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…