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 !!! :mad:
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 :)
 

Discussions similaires

Statistiques des forums

Discussions
312 207
Messages
2 086 246
Membres
103 163
dernier inscrit
Pelaez