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

XL 2016 copier coller un lien avec d'autre fichier excel

yann1983

XLDnaute Nouveau
bonjour,
je vais essayer d'etre le plus clair possible mais pas simple.

je souhaite que le fichier joint aille chercher des données dans d'autre fichier excel en fonction des semaines et du nom des opérateurs.
ca je sais faire mais comment faire pour copier coller rapidement le lien dans les autres cellules.

exemple :
C4 ='\\corp\DI_LOGISTIQUE\22-Suivi_Horaires_Magasin\2017\[Pierre.xlsx]01'!D151
dans ce cas je vais chercher la cellule D151 dans la feuille de Pierre semaine 01, en C5 je vais chercher la cellule D152 ans la feuille de pierre semaine 01, en Q4 la cellule D151 dans la semaine 3 ainsi de suite.
je voudrais un moyen simple est rapide pour étendre les liens sue le reste des semaines de pierre mais aussi Nicolas, etc...
merci pour votre aide.
yann
 

Pièces jointes

  • TABLEAU DE BORD.xlsx
    253.5 KB · Affichages: 19

job75

XLDnaute Barbatruc
Bonsoir yann1983,

Sauf si l'on est un obsédé des macros, la manière la plus simple est de :

- copier la formule dans la barre de formule en C4 et la coller en Q4

- dans la formule en Q4 remplacer bêtement 01 par 03.

A+
 

job75

XLDnaute Barbatruc
Bonjour yann1983,
mais j’esperai Une solution plus simple
Avec une macro ce n'est pas plus simple mais c'est moins fatiguant :
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim sem1$, lien As Boolean, sem2$, col As Variant, f$
With Cells(2, Target.Column).MergeArea(1) 'semaines en ligne 2
  If Not Target(1).HasFormula Or Not .Value Like "SEMAINE*" Then Exit Sub
  Cancel = True
  sem1 = Right(.Value, 2)
  lien = Target(1).Formula Like "*]" & sem1 & "*"
  Do
    sem2 = Format(InputBox("Entrez le numéro de la semaine de destination :", _
      "Copier " & IIf(lien, "le lien", "la formule"), IIf(sem2 = "", Format(Val(sem1) + 1, "00"), sem2)), "00")
    If sem2 = "" Then Exit Sub
    col = Application.Match("*" & sem2, .EntireRow, 0)
  Loop While IsError(col)
  f = Target(1).FormulaR1C1
  If lien Then
    Application.DisplayAlerts = False 'si le lien ne mène nulle part
    With Cells(Target.Row, .Column)
      .FormulaR1C1 = f 'sécurité
      f = Replace(.Formula, "]" & sem1, "]" & sem2)
    End With
  End If
End With
Cells(Target.Row, col).Resize(, 7) = f
End Sub
Fichier joint (casse-pied l'ouverture !!!).

A+
 

Pièces jointes

  • TABLEAU DE BORD(1).xlsm
    274.5 KB · Affichages: 14
Dernière édition:

job75

XLDnaute Barbatruc
Re,

Et avec ceci c'est nettement plus simple et encore moins fatiguant :
Code:
Private Sub Worksheet_Change(ByVal r As Range)
Dim f$, c As Range
Set r = Intersect(r, Range("C4:C" & Rows.Count), UsedRange) 'colonne C adaptable
If r Is Nothing Then Exit Sub
Application.ScreenUpdating = False
Application.DisplayAlerts = False 'si les liens ne mènent nulle part
Application.EnableEvents = False 'désactive les évènements
For Each r In r 'si entrées multiples (copier-coller)
  If r.HasFormula Then
    f = IIf(r.Formula Like "*]01*", r.Formula, r.FormulaR1C1)
    For Each c In Range("C2", Cells(2, Columns.Count).End(xlToLeft))
      If c Like "SEMAINE*" Then Cells(r.Row, c.Column).Resize(, 7) = Replace(f, "]01", "]" & Right(c, 2))
    Next c
  End If
Next r
Application.EnableEvents = True 'réactive les évènements
End Sub
Fichier (2).

En copiant-collant la plage C4:C106 sur elle-même tout le tableau se remplit.

A+
 

Pièces jointes

  • TABLEAU DE BORD(2).xlsm
    122.2 KB · Affichages: 15

job75

XLDnaute Barbatruc
Bonjour yann1983, le forum,

Avec le double-clic en A3 les entrées manuelles se limitent à la plage A4:C15 :
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim deb As Range, pas&, ncol, nom$, tablo(), i&, j%, t
Set deb = [A3] 'adaptable
pas = 13 'adaptable
ncol = 3 'colonnes A:C, adaptable
If Intersect(Target, deb) Is Nothing Then Exit Sub
Cancel = True
If deb = "" Then MsgBox deb.Address(0, 0) & " doit être renseignée...": Exit Sub
If MsgBox("Les lignes " & deb.Row + 1 & ":" & deb.Row + pas - 1 & _
  " vont être collées en A" & deb.Row + pas + 1 & " A" & deb.Row + 2 * pas + 1 & " etc...", 52, "Copier") = 7 Then Exit Sub
Application.DisplayAlerts = False 'si les liens ne mènent nulle part
'---adaptation éventuelle des liens au nom en deb---
nom = Application.Proper(deb)
Application.EnableEvents = False 'désactive les évènements
deb(2).Resize(pas - 1, ncol).Replace "[*.xls", "[" & nom & ".xls", xlPart
Application.EnableEvents = True 'réactive les évènements
'---remplissage du tableau source---
ReDim tablo(1 To pas - 1, 1 To ncol)
For i = 1 To pas - 1
  For j = 1 To ncol
    If j = 1 Or deb(i + 1, j).HasFormula Then _
      tablo(i, j) = IIf(deb(i + 1, j).Formula Like "*]01*", deb(i + 1, j).Formula, deb(i + 1, j).FormulaR1C1)
Next j, i
'---copie vers le bas---
While deb <> "" 'la boucle s'arrête s'il n'y a pas de nom
  t = tablo
  For i = 1 To pas - 1
    t(i, ncol) = Replace(tablo(i, ncol), "[" & nom, "[" & Application.Proper(deb))
  Next i
  deb(2).Resize(pas - 1, ncol) = t 'lance la Worksheet_Change
  Application.ScreenUpdating = True 'pour voir tout de suite le résultat
  DoEvents
  Set deb = deb.Offset(pas) 'incrémentation
Wend
End Sub
Fichier (3).

Bonne journée.
 

Pièces jointes

  • TABLEAU DE BORD(3).xlsm
    122.6 KB · Affichages: 28
Dernière édition:

job75

XLDnaute Barbatruc
Re,

Au post #9 je viens d'ajouter le code pour que les liens s'adaptent en cas de modification du nom en A3.

Une remarque également : les noms en A3 A16 A29 etc... ne doivent pas contenir de caractères interdits dans les noms des fichiers \ / : * ? " < > |

On pourrait bien sûr créer une fonction pour les éliminer mais faut quand même pas pousser !

A+
 

Discussions similaires

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