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

Microsoft 365 Liaisons externes par macro

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour à toutes et à tous,
Je vous souhaite une belle journée

Me voilà avec un nouveau souci que je ne parviens pas à résoudre Grrr !!!
J'ai cherché sur le net et dans le Forum, sauf mauvaises recherches, je n'ai pas trouvé.

J'ai dans mon classeur beaucoup de formules qui sont des liaisons externes.
Mes formules fonctionnent bien.

Pour alléger mes fichiers, je préfère toujours coder mes formules et ne copier que les valeurs.
J'ai ce code :
VB:
Sub MaJ_Clients() 'Fichier Facturation
Application.EnableEvents = False
Application.ScreenUpdating = False
'Application.Calculation = xlCalculationManual
'ActiveSheet.Unprotect Password:=""
    [A2] = "=IF(RC[1]<>0,TEXTBEFORE('C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Charlotte.xlsm]Données'!R1C1,"" "",1,1,1),"""")"
    [B2] = "='C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Charlotte.xlsm]Données'!RC2"
    [C2] = "='C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Charlotte.xlsm]Données'!RC3"
    [D2] = "='C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Charlotte.xlsm]Données'!RC4"
    [E2] = "='C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Charlotte.xlsm]Données'!RC5"
    [F2] = "='C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Charlotte.xlsm]Données'!RC17"
    [G2] = "=IF(RC[-3]="""","""",IF('C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Charlotte.xlsm]Données'!RC10=""Vendeur préparé au mandat sans garantie de signature"",""Prépa"",""NP""))"
    [H2] = "='C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Charlotte.xlsm]Données'!RC25"
    [I2] = "='C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Charlotte.xlsm]Données'!RC12"
    [J2] = "='C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Charlotte.xlsm]Données'!RC13"
    [L2] = "=IF(RC[-3]<>0,'C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Charlotte.xlsm]Données'!RC6-RC[-1],0)"
    Rows("2:2").Copy
    Rows("3:101").Select
    ActiveSheet.Paste
    Rows("2:101").Select
    Application.CutCopyMode = False
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    end sub
Mon code ne fonctionne pas, je n'ai pas mes valeurs de liaisons.
Pourtant, j'ai bien vérifié et le code correspond bien à mes formules d'origine.

Je n'y comprends rien !
Auriez-vous une idée ?

Il m'est difficile et long de préparer un fichier test. Mais si c'est nécessaire, je le ferai.
Je vous remercie,
Amicalement,
lionel
 
Solution
Mon nouveau code avec les bons fichiers et la nouvelle formule en colonne L :
VB:
Sub MaJ_Clients() 'Fichier Facturation
Dim f$
Application.ScreenUpdating = False
Application.EnableEvents = False

f = "'C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Charlotte.xlsm]Données'!"
    [A2:A101] = "=IF(B2<>0,TEXTBEFORE(" & f & "A$1,"" "",1,1,1),"""")"
    [B2:E101] = "=" & f & "B2"
    [F2:F101] = "=" & f & "Q2"
    [G2:G101] = "=IF(D2="""","""",IF(" & f & "J2=""Vendeur préparé au mandat sans garantie de signature"",""Prépa"",""NP""))"
    [H2:H101] = "=" & f & "Y2"
    [I2:J101] = "=" & f & "L2"
    [L2:L101] = "=IF(M2=""fini"",0,IF(I2<>0," & f & "F2-K2,0))"
    [M2:M101] = "=IF(I2<>0," & f & "N2,"""")"
    [A2:M101]...

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Lionel,
En l'absence de fichier test, on ne peut que supputer.
Mais il semble que dans les cellules vous insériez des chaines de caractères non des formules.
Essayez avec ça :
VB:
[A2].formulaR1C1 = "=IF(RC[1]<>0,TEXTBEFORE('C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Charlotte.xlsm]Données'!R1C1,"" "",1,1,1),"""")"
Dans votre cellule A2 vous devriez récupérer, si votre XL est en français :
Code:
=SI(B2<>0;TEXTBEFORE('C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Charlotte.xlsm]Feuil1'!$A$1;" ";1;1;1);"")
A noter que si vous utilisez [A2].FormulaLocal alors la formule peut être en français, donc peut être plus lisible.
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour sylvanu
Merci pour ce retour ...
[A2] = "=IF(RC[1]<>0,TEXTBEFORE('C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Charlotte.xlsm]Données'!R1C1,"" "",1,1,1),"""")"
serait ?
[A2].FormulaLocal = "=IF(RC[1]<>0,TEXTBEFORE('C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Charlotte.xlsm]Données'!R1C1,"" "",1,1,1),"""")"

Je vais tenter,
lionel
 

job75

XLDnaute Barbatruc
Bonjour Lionel, sylvanu,

Il y a un problème de notation R1C1 ou A1.

Pour [A2] et [L2] il y a RC[1] et RC[-1] donc VBA sait qu'il s'agit de formules en notation R1C1.

Par contre pour [B2] ou [C2] etc... VBA considère que RC2 ou RC3... sont des références en notation A1.

Il faut donc préciser [B2].FormulaR1C1 ou [C2].FormulaaR1C1 etc...

A+
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Non, c'est soit [A2].FormulaR1C1 = avec la formule en anglais,
soit [A2].FormulaLocal = avec la formule en français. ( si votre XL est en français )
mais pas [A2].FormulaLocal = avec la formule en anglais ( sauf si votre XL est en anglais )
Voir PJ avec :
VB:
Sub ert()
    [A2].FormulaR1C1 = "=IF(RC[1]<>0,TEXTBEFORE('C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Charlotte.xlsm]Données'!R1C1,"" "",1,1,1),"""")"
End Sub
Bonjour Job.
 

Pièces jointes

  • Lionel.xlsm
    14.1 KB · Affichages: 3

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
En PJ le double exemple avec :
VB:
Sub TypeFormulaR1C1()
    [A2].FormulaR1C1 = "=IF(RC[1]<>0,TEXTBEFORE('C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Charlotte.xlsm]Données'!R1C1,"" "",1,1,1),"""")"
End Sub
Sub TypeFormulaLocal()
    [A2].FormulaLocal = "=SI(B2<>0;TEXTBEFORE('C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Charlotte.xlsm]Données'!$A$1;"" "";1;1;1);"""")"
End Sub
En mettant Local et en omettant R1C1 on peut mettre la formule en français et en notation A1 au lieu de L1C1.
 

Pièces jointes

  • Lionel2.xlsm
    14.1 KB · Affichages: 1

dysorthographie

XLDnaute Accro
Bonjour,
Quel drôle de façon !
Code:
Range("A2:A101").formulaR1C1 = "=IF(RC[1]<>0,TEXTBEFORE('C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Charlotte.xlsm]Données'!R1C1,"" "",1,1,1),""""

'Faire pareil pour les autres plages

Range("A2:L101").Value=Range("A2:L101").Value
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Re-Bonjour Gérard
Re-Bonjour sylvanu
Bonjour dysorthographie

Merci à vous pour vos aides précieuses

Voilà où j'en suis :
VB:
Sub MaJ_Clients() 'Fichier Facturation
Application.EnableEvents = False
Application.ScreenUpdating = False
'Application.Calculation = xlCalculationManual
'ActiveSheet.Unprotect Password:=""
    [A2].FormulaR1C1 = "=IF(RC[1]<>0,TEXTBEFORE('C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Charlotte.xlsm]Données'!R1C1,"" "",1,1,1),"""")"
    [B2].FormulaR1C1 = "='C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Charlotte.xlsm]Données'!RC2"
    [C2].FormulaR1C1 = "='C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Charlotte.xlsm]Données'!RC3"
    [D2].FormulaR1C1 = "='C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Charlotte.xlsm]Données'!RC4"
    [E2].FormulaR1C1 = "='C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Charlotte.xlsm]Données'!RC5"
    [F2].FormulaR1C1 = "='C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Charlotte.xlsm]Données'!RC17"
    [G2].FormulaR1C1 = "=IF(RC[-3]="""","""",IF('C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Charlotte.xlsm]Données'!RC10=""Vendeur préparé au mandat sans garantie de signature"",""Prépa"",""NP""))"
    [H2].FormulaR1C1 = "='C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Charlotte.xlsm]Données'!RC25"
    [I2].FormulaR1C1 = "='C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Charlotte.xlsm]Données'!RC12"
    [J2].FormulaR1C1 = "='C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Charlotte.xlsm]Données'!RC13"
    [L2].FormulaR1C1 = "=IF(RC[1]=""fini"",0,IF(RC[-3]<>0,'C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Charlotte.xlsm]Données'!RC6-RC[-1],0))"
    [M2].FormulaR1C1 = "=IF(RC[-4]<>0,'C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Charlotte.xlsm]Données'!RC14,"""")"
    Rows("2:2").Copy
    Rows("3:101").Select
    ActiveSheet.Paste
    Rows("2:101").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    
    [A102].Select
    [A102].FormulaR1C1 = "=IF(RC[1]<>0,TEXTBEFORE('C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Imen.xlsm]Données'!R1C1,"" "",1,1,1),"""")"
    [B102].FormulaR1C1 = "='C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Imen.xlsm]Données'!R[-100]C2"
    [C102].FormulaR1C1 = "='C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Imen.xlsm]Données'!R[-100]C3"
    [D102].FormulaR1C1 = "='C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Imen.xlsm]Données'!R[-100]C4"
    [E102].FormulaR1C1 = "='C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Imen.xlsm]Données'!R[-100]C5"
    [F102].FormulaR1C1 = "='C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Imen.xlsm]Données'!R[-100]C17"
    [G102].FormulaR1C1 = "=IF(RC[-3]="""","""",IF('C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Imen.xlsm]Données'!R[-100]C10=""Vendeur préparé au mandat sans garantie de signature"",""Prépa"",""NP""))"
    [H102].FormulaR1C1 = "='C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Imen.xlsm]Données'!R[-100]C25"
    [I102].FormulaR1C1 = "='C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Imen.xlsm]Données'!R[-100]C12"
    [J102].FormulaR1C1 = "='C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Imen.xlsm]Données'!R[-100]C13"
    [L102].FormulaR1C1 = "=IF(RC[1]=""fini"",0,IF(RC[-3]<>0,'C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Imen.xlsm]Données'!RC6-RC[-1],0))"
    [M102].FormulaR1C1 = "=IF(RC[-4]<>0,'C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Imen.xlsm]Données'!R[-100]C14,"""")"
    Rows("102:102").Copy
    Rows("103:201").Select
    ActiveSheet.Paste
    Rows("102:201").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    
    [A202].Select
    [A202].FormulaR1C1 = "=IF(RC[1]<>0,TEXTBEFORE('C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Sonda.xlsm]Données'!R1C1,"" "",1,1,1),"""")"
    [B202].FormulaR1C1 = "='C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Sonda.xlsm]Données'!R[-200]C2"
    [C202].FormulaR1C1 = "='C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Sonda.xlsm]Données'!R[-200]C3"
    [D202].FormulaR1C1 = "='C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Sonda.xlsm]Données'!R[-200]C4"
    [E202].FormulaR1C1 = "='C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Sonda.xlsm]Données'!R[-200]C5"
    [F202].FormulaR1C1 = "='C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Sonda.xlsm]Données'!R[-200]C17"
    [G202].FormulaR1C1 = "=IF(RC[-3]="""","""",IF('C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Sonda.xlsm]Données'!R[-100]C10=""Vendeur préparé au mandat sans garantie de signature"",""Prépa"",""NP""))"
    [H202].FormulaR1C1 = "='C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Sonda.xlsm]Données'!R[-200]C25"
    [I202].FormulaR1C1 = "='C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Sonda.xlsm]Données'!R[-200]C12"
    [J202].FormulaR1C1 = "='C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Sonda.xlsm]Données'!R[-200]C13"
    [L202].FormulaR1C1 = "=IF(RC[1]=""fini"",0,IF(RC[-3]<>0,'C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Sonda.xlsm]Données'!RC6-RC[-1],0))"
    [M202].FormulaR1C1 = "=IF(RC[-4]<>0,'C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Sonda.xlsm]Données'!R[-200]C14,"""")"
    Rows("202:202").Copy
    Rows("203:301").Select
    ActiveSheet.Paste
    Rows("202:301").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

    [A302].Select
    [A302].FormulaR1C1 = "=IF(RC[1]<>0,TEXTBEFORE('C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Stephanie.xlsm]Données'!R1C1,"" "",1,1,1),"""")"
    [B302].FormulaR1C1 = "='C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Stephanie.xlsm]Données'!R[-300]C2"
    [C302].FormulaR1C1 = "='C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Stephanie.xlsm]Données'!R[-300]C3"
    [D302].FormulaR1C1 = "='C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Stephanie.xlsm]Données'!R[-300]C4"
    [E302].FormulaR1C1 = "='C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Stephanie.xlsm]Données'!R[-300]C5"
    [F302].FormulaR1C1 = "='C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Stephanie.xlsm]Données'!R[-300]C17"
    [G302].FormulaR1C1 = "=IF(RC[-3]="""","""",IF('C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Stephanie.xlsm]Données'!R[-100]C10=""Vendeur préparé au mandat sans garantie de signature"",""Prépa"",""NP""))"
    [H302].FormulaR1C1 = "='C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Stephanie.xlsm]Données'!R[-300]C25"
    [I302].FormulaR1C1 = "='C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Stephanie.xlsm]Données'!R[-300]C12"
    [J302].FormulaR1C1 = "='C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Stephanie.xlsm]Données'!R[-300]C13"
    [L302].FormulaR1C1 = "=IF(RC[1]=""fini"",0,IF(RC[-3]<>0,'C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Stephanie.xlsm]Données'!RC6-RC[-1],0))"
    [M302].FormulaR1C1 = "=IF(RC[-4]<>0,'C:\Users\lionel\Desktop\Dossier isiTel\01 ImmobRdV NF\[isitelFacturation Stephanie.xlsm]Données'!R[-300]C14,"""")"
    Rows("302:302").Copy
    Rows("303:401").Select
    ActiveSheet.Paste
    Rows("302:401").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    [A1].Select
    Application.CutCopyMode = False
'ActiveSheet.Protect Password:="", DrawingObjects:=True, Contents:=True, Scenarios:=True
Application.EnableEvents = True
Application.ScreenUpdating = True
'Application.Calculation = xlCalculationAutomatic
End Sub
Youpy ça fonctionne grâce à vous

Peut-être est-il possible de simplifier le code ?
Mais déjà, ça marche comme ça,
Amicalement,
lionel
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re Lionel, Job, dysorthographie,
Vous pouvez remplacer
VB:
Rows("2:2").Copy
    Rows("3:101").Select
    ActiveSheet.Paste
    Rows("2:101").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
par
Code:
[A2:M2].Copy Destination:=[A3:M101]
[A2:M101] = [A2:M101].Value
 

Discussions similaires

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