Ouvrir un fichier et creer une plage dynamique

kenavo

XLDnaute Junior
Bonsoir le forum

J'ai un pb que je n'arrive pas à resoudre : je souhaite utiliser une macro qui demande l'ouverture d'un fichier puis dans ce fichie que je choisis d' ouvrir je veux qu'il me créee une plage dynamique
Code:
Sub PlageCAT6()
Dim Fichier As String
Fichier = Application.GetOpenFilename("Fichier XLS (*.xls),*.xls")
Workbooks.Open Filename:=Fichier
' création plage dynamique
    ActiveWorkbook.Names.Add Name:="MaPlage1", RefersToR1C1:= _
        "=OFFSET([Fichier]Feuil1!R1C13,,,COUNTA([Fichier]Feuil1!C6),10)"
End Sub

Est possible ? mon programme marche bien si le nom du fichier est ecrit en dur
Code:
Sub PlageCAT5()
' création plage dynamique
ActiveWorkbook.Names.Add Name:="MaPlage", RefersToR1C1:= _
        "=OFFSET([toto.xls]Feuil1!R1C6,,,COUNTA([toto.xls]Feuil1!C6),9)"

Merci de votre aide
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Ouvrir un fichier et creer une plage dynamique

Bonsoir Kenavo, bonsoir le forum,

Essaie comme ça :
Code:
Sub PlageCAT6()
Dim Fichier As String
Dim nf As String
 
Fichier = Application.GetOpenFilename("Fichier XLS (*.xls),*.xls")
Workbooks.Open Filename:=Fichier
nf = ActiveWorkbook.Name
' création plage dynamique
    ActiveWorkbook.Names.Add Name:="MaPlage1", RefersToR1C1:= _
        "=OFFSET([nf]Feuil1!R1C13,,,COUNTA([nf]Feuil1!C6),10)"
End Sub
car Fichier renvoie le chemin complet suivi du nom du fichier...
 

job75

XLDnaute Barbatruc
Re : Ouvrir un fichier et creer une plage dynamique

Bonsoir kenavo, salut Robert :)

Plusieurs choses ne vont pas je pense.

1) Utiliser la boîte de dialogue GetOpenFilename me paraît étrange, car on peut choisir ainsi n'importe quel fichier Excel.

Ou alors il faut un test pour savoir si le fichier est "acceptable".

2) Si l'on clique sur "Annuler", Fichier=False. Il faut donc un test pour sortir...

3) Dans la formule de la plage dynamique, [Fichier] ne sert à rien. Et de toute façon ça inscrirait toujours "[Fichier]"...

A+
 

kenavo

XLDnaute Junior
Re : Ouvrir un fichier et creer une plage dynamique

Merci pour les réponses

Pour Robert : ça ne marche pas il ne me créer pas ma plage dans le fichier ouvert
Pour Job75 : en fait il s'agit d'une partie d'un code, on sait quel fichier devra être ouvert

Bonne journée
 
C

Compte Supprimé 979

Guest
Re : Ouvrir un fichier et creer une plage dynamique

Salut Kenavo,

Dans ton code, tu n'utilise pas le terme 'Fichier' en tant que variable, mais comme texte

Essaye
Code:
[FONT=monospace]Sub PlageCAT6()
  Dim Fichier As String, NomFic As String
  Fichier = Application.GetOpenFilename("Fichier XLS (*.xls),*.xls")
  Workbooks.Open Filename:=Fichier
  NomFic = Mid(Fichier, InStrRev(Fichier, "\") + 1)
  ' création plage dynamique
  ActiveWorkbook.Names.Add Name:="MaPlage1", RefersToR1C1:= _
                           "=OFFSET([" & NomFic & "]Feuil1!R1C13,,,COUNTA([" & NomFic & "]Feuil1!C6),10)"
End Sub
[/FONT]

A+
 

kenavo

XLDnaute Junior
Re : Ouvrir un fichier et creer une plage dynamique

Merci Bruno mais ça bloque là

Code:
 ActiveWorkbook.Names.Add Name:="MaPlage1", RefersToR1C1:= _
  "=OFFSET([" & NomFic & "]Feuil1!R1C13,,,COUNTA([" & NomFic & "]Feuil1!C6),10)"
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Ouvrir un fichier et creer une plage dynamique

Bonjour le fil, bonjour le forum,

Kenavo il est rare que je réponde sans tester et d'ailleurs c'est souvent dans ces cas là que ça ne marche pas... La proposition que je t'ai faite hier je l'ai testée avant et je peux te garantir quelle fontionne. Mais la plage dynmique Maplage1 n'est pas accessible par la barre d'adresse car elle est cachée. Tu peux la voir en faisant menu Insertion / Nom / Définir... dans le fichier ouvert.
 

job75

XLDnaute Barbatruc
Re : Ouvrir un fichier et creer une plage dynamique

Bonjour le fil, le forum

Bon je répète :

3) Dans la formule de la plage dynamique, [Fichier] ne sert à rien.

La moindre des choses était de tester... Alors pour s'en convaincre, exécuter :

Code:
Sub PlageCAT6()
Dim Fichier As Variant
Fichier = Application.GetOpenFilename("Fichier XLS (*.xls),*.xls")
If Fichier = False Then Exit Sub
Workbooks.Open Filename:=Fichier
Fichier = ActiveWorkbook.Name
' création plage dynamique
    ActiveWorkbook.Names.Add Name:="MaPlage1", RefersToR1C1:= _
        "=OFFSET('[" & Fichier & "]Feuil1'!R1C13,,,COUNTA('[" & Fichier & "]Feuil1'!C6),10)"
End Sub
Les guillemets anglais sont nécessaires si le nom du fichier comporte des espaces.

Puis regarder la définition du nom MaPlage1 : le nom du fichier a disparu :rolleyes:

Donc il suffit d'écrire :

Code:
Sub PlageCAT6()
Dim Fichier As Variant
Fichier = Application.GetOpenFilename("Fichier XLS (*.xls),*.xls")
If Fichier = False Then Exit Sub
Workbooks.Open Filename:=Fichier
' création plage dynamique
    ActiveWorkbook.Names.Add Name:="MaPlage1", RefersToR1C1:= _
        "=OFFSET(Feuil1!R1C13,,,COUNTA(Feuil1!C6),10)"
End Sub
A+
 

job75

XLDnaute Barbatruc
Re : Ouvrir un fichier et creer une plage dynamique

Re,

Si le fichier choisi est déjà ouvert, et/ou s'il est masqué, utiliser :

Code:
Sub PlageCAT6()
Dim Fichier As Variant
Fichier = Application.GetOpenFilename("Fichier XLS (*.xls),*.xls")
If Fichier = False Then Exit Sub
Application.DisplayAlerts = False 'si le fichier est déja ouvert
Workbooks.Open Filename:=Fichier
' création plage dynamique
    Workbooks(Workbooks.Count).Names.Add Name:="MaPlage1", RefersToR1C1:= _
        "=OFFSET(Feuil1!R1C13,,,COUNTA(Feuil1!C6),10)"
End Sub
A+
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Ouvrir un fichier et creer une plage dynamique

Bonjour le fil, bonjour le forum,

Oui Job tu as tout à fait raison, mais, et cela m'a paru aussi incongru, le code que j'avais fourni :
Code:
Sub PlageCAT6()
Dim Fichier As String
Dim nf As String
 
Fichier = Application.GetOpenFilename("Fichier XLS (*.xls),*.xls")
Workbooks.Open Filename:=Fichier
nf = ActiveWorkbook.Name
' création plage dynamique
    ActiveWorkbook.Names.Add Name:="MaPlage1", RefersToR1C1:= _
        "=OFFSET([nf]Feuil1!R1C13,,,COUNTA([nf]Feuil1!C6),10)"
End Sub
fonctionne alors que la variable nf n'est pas mise en dehors des guillements... Aurais-tu une explication à ça ?
 

job75

XLDnaute Barbatruc
Re : Ouvrir un fichier et creer une plage dynamique

Salut Robert,

Ton code n'est pas bon ! Même s'il n'y a pas de bug...

Le nom MaPlage1 créé est défini par cette formule :

Code:
=DECALER([nf]Feuil1!$M$1;;;NBVAL([nf]Feuil1!$F:$F);10)
C'est quoi nf à ton avis :confused:

A+
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Ouvrir un fichier et creer une plage dynamique

Bonjour le fil, bonjour le forum,

Merci Job pour ton explication. Ça me rassure car je trouvais très étrange d'obtenir le même résultat avec nf dans et hors des guilements. Mais comme je suis nul en formule, je navets (=négation du verbe avoir quand on est un vrai navet comme moi sur ce coup là...) même pas vu qu'il y avais nf dans la formule de Maplage1...
En plus, je pestais contre ce pauvre Kenavo... Toutes mes excuses mon cher !
 

kenavo

XLDnaute Junior
Re : Ouvrir un fichier et creer une plage dynamique

Merci à tous

JOB75 : super ça fonctionne, mais ensuite :(

Je voulais à partir de ce fichier ouvert et de la plage créer faire une recherchev à partit d'un autre fichier
Un fichier Fusion ouvert ( et sera toujours nomme Fusion) , lance l'ouverture du fichier et creer la plage dyn puis fait la recherchev : ( le resultat est dans le fichier Fusion)

Code:
Sub RechCAT6()
Workbooks("Fusion.xls").Activate
Range("O1").Select
ActiveCell.FormulaR1C1 = "Pointage"
    Range("O2").Select
    ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-9],PlageCAT5,10,FALSE)"
    Range("O2").Select
    Selection.AutoFill Destination:=Range("O2:O" & Range("C65536").End(xlUp).Row), Type:=xlFillDefault
    'Enleve les formules
    Range("O2:O" & Range("C65536").End(xlUp).Row).Value = Range("O2:O" & Range("C65536").End(xlUp).Row).Value
       Range("O1").Select
End Sub

Ca marchait bien à partir du moment où les 2 fichiers avait des noms fixes mais le pb c'est que le fichier que j ouvre peux avoir des noms differents

Bonne soirée
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 229
Messages
2 086 426
Membres
103 206
dernier inscrit
diambote