Macro

zozo

XLDnaute Occasionnel
Bonjour,
Je souhaite créer une macro qui :

1-Ouvre le classeur X, qui contient de 1 à N lignes sur la feuille X.

2-Exécuter (sur le nombre de lignes qui existe sur la feuille X du classeur X) la commande suivante que j'ai testé qui donne un bon résultat :

=CONCATENER(B2;C2;D2;" ";STXT(F2;1;NBCAR(F2));REPT("*";50-NBCAR(F2));G2;REPT("*";64);REPT("0";15-NBCAR(I2));SUBSTITUE(I2;",";)*1;"PAIE ";MAJUSCULE(TEXTE(AUJOURDHUI();"mmm "));ANNEE(AUJOURDHUI());REPT("*";135))

3-Ecrire le résultat obtenu sur la feuille Y du classeur Y.

Je vous suis reconnaissant pour toute intervention de votre part.

Pour infos, chez-mois j'utilise excel 2003 et au boulot 2007
 

zozo

XLDnaute Occasionnel
Bonsoir zozo, Bruno,

=CONCATENER(... ce n'est pas une commande mais une formule à entrer dans des cellules.

Question à 100 sous : quelles cellules ???

A+
Merci Bruno pour la réponse,
Merci pour Formule, sur les cellule B, C, D, F, G et I de la feuille X.
Je l'ai exécuté manuellement, et j'ai obtenu le résultat souhaité.
Ce qui me manque, c'est la macro avec une boucle de 1 à N lignes, pour le faire automatique, et non manuel.
 

Dranreb

XLDnaute Barbatruc
Bonsoir
… suivante que j'ai testé qui donne un bon résultat :
Tout de même STXT(F2;1;NBCAR(F2)) c'est F2 tout simplement.
SUBSTITUE(I2;",";)*1 me paraît suspect car donne un résultat très variable selon le nombre de décimales <> 0 en fin. J'aurais mieux admis TEXTE(I2*100;REPT("0";15)) par exemple.
L'avant dernier terme peut se simplifier en MAJUSCULE(TEXTE(AUJOURDHUI();"mmm aaaa"))
Cette formule peut elle bien être écrite en colonne A du fichier X avant d'en importer les valeurs dans le fichier Y ?
 

Dranreb

XLDnaute Barbatruc
Notez que ça peut peut être se faire par une instruction
VB:
ActiveSheet.[A2].Resize(Workbooks("ClasseurX").Worksheets("Feuilx").UsedRange.Rows.Count - 1).FormulaR1C1 = Replace( _
"=CONCATENATE(RC[1],RC[2],RC[3],"" "",MID(RC[5],1,LEN(RC[5])),REPT(""*"",50-LEN(RC[5])),RC[6],REPT(""*"",64),REPT(""0"",15-LEN(RC[8])),SUBSTITUTE(RC[8],"","",)*1,""PAIE "",UPPER(TEXT(TODAY(),""mmm aaaa"")),REPT(""*"",135))", _
   "RC[", "[ClasseurX]FeuilX!RC[")
 

zozo

XLDnaute Occasionnel
Notez que ça peut peut être se faire par une instruction
VB:
ActiveSheet.[A2].Resize(Workbooks("ClasseurX").Worksheets("Feuilx").UsedRange.Rows.Count - 1).FormulaR1C1 = Replace( _
"=CONCATENATE(RC[1],RC[2],RC[3],"" "",MID(RC[5],1,LEN(RC[5])),REPT(""*"",50-LEN(RC[5])),RC[6],REPT(""*"",64),REPT(""0"",15-LEN(RC[8])),SUBSTITUTE(RC[8],"","",)*1,""PAIE "",UPPER(TEXT(TODAY(),""mmm aaaa"")),REPT(""*"",135))", _
   "RC[", "[ClasseurX]FeuilX!RC[")
 

Dranreb

XLDnaute Barbatruc
La macro étant supposée dans le classeur Y:
VB:
Sub test()
Dim RngSrc As Range
With Workbooks.Open(ThisWorkbook.Path & "\ClasseurX.xlsx")
   Set RngSrc = .Worksheets(1).UsedRange
   End With
Set RngSrc = RngSrc.Rows(2).Resize(RngSrc.Rows.Count - 1)
ThisWorkbook.Activate
ActiveSheet.[A2].FormulaR1C1 = "=" & RngSrc(1, 1).Address(True, True, xlR1C1, True)
ActiveSheet.[A2].Resize(RngSrc.Rows.Count).FormulaR1C1 = Replace( _
"=CONCATENATE(RC[1],RC[2],RC[3],"" "",MID(RC[5],1,LEN(RC[5])),REPT(""*"",50-LEN(RC[5])),RC[6],REPT(""*"",64),REPT(""0"",15-LEN(RC[8])),SUBSTITUTE(RC[8],"","",)*1,""PAIE "",UPPER(TEXT(TODAY(),""mmm aaaa"")),REPT(""*"",135))", _
   "RC[", Mid$([A2].FormulaR1C1, 2, Len([A2].FormulaR1C1) - 5) & "RC[")
End Sub
 

job75

XLDnaute Barbatruc
Bonjour zozo, Nernard,

J'ai placé cette macro dans le classeur X.xls :
Code:
Sub RemplirColonneA()
'le fichier Y.xls doit être ouvert
On Error Resume Next
With ThisWorkbook.Sheets("X")
    If .FilterMode Then .ShowAllData 'si la feuille est filtrée
    With .Range("A2", .Range("I" & .Rows.Count).End(xlUp)(2)).Columns(1)
        .Formula = "=CONCATENATE(B2,C2,D2,"" "",F2,REPT(""*"",50-LEN(F2)),G2,REPT(""*"",64),REPT(""0"",15-LEN(I2)),SUBSTITUTE(I2,"","",)*1,""PAIE "",UPPER(TEXT(TODAY(),""mmm "")),YEAR(TODAY()),REPT(""*"",135))"
        .SpecialCells(xlCellTypeFormulas, 16) = ""
    End With
    .UsedRange.EntireColumn.Copy Workbooks("Y.xls").Sheets("Y").[A1] 'pour copier les formats
    Workbooks("Y.xls").Sheets("Y").UsedRange = Workbooks("Y.xls").Sheets("Y").UsedRange.Value 'supprime les formules
End With
End Sub
Ouvrez les 2 classeurs et lancez-la.

Bonne journée.
 

Pièces jointes

  • X.xls
    82.5 KB · Affichages: 24
  • Y.xls
    64.5 KB · Affichages: 23

zozo

XLDnaute Occasionnel
Bonjour zozo, Nernard,

J'ai placé cette macro dans le classeur X.xls :
Code:
Sub RemplirColonneA()
'le fichier Y.xls doit être ouvert
On Error Resume Next
With ThisWorkbook.Sheets("X")
    If .FilterMode Then .ShowAllData 'si la feuille est filtrée
    With .Range("A2", .Range("I" & .Rows.Count).End(xlUp)(2)).Columns(1)
        .Formula = "=CONCATENATE(B2,C2,D2,"" "",F2,REPT(""*"",50-LEN(F2)),G2,REPT(""*"",64),REPT(""0"",15-LEN(I2)),SUBSTITUTE(I2,"","",)*1,""PAIE "",UPPER(TEXT(TODAY(),""mmm "")),YEAR(TODAY()),REPT(""*"",135))"
        .SpecialCells(xlCellTypeFormulas, 16) = ""
    End With
    .UsedRange.EntireColumn.Copy Workbooks("Y.xls").Sheets("Y").[A1] 'pour copier les formats
    Workbooks("Y.xls").Sheets("Y").UsedRange = Workbooks("Y.xls").Sheets("Y").UsedRange.Value 'supprime les formules
End With
End Sub
Ouvrez les 2 classeurs et lancez-la.

Bonne journée.
Bonjour,
Merci pour l'effort, ça marche bien, reste qlqs retouches à faire.

Encore Merci et bonne journée.
 

Discussions similaires

Réponses
7
Affichages
685

Statistiques des forums

Discussions
314 094
Messages
2 105 816
Membres
109 431
dernier inscrit
jalilox25