Calcul dans une cellule VBA [excel]

Résolu
Bonjour,

j'ai fais une macro avec copie de cellule, tout marche sauf une formule de calcul.
Voici ma macro

Sub Macro4()
'
' Macro4 Macro
'
' Touche de raccourci du clavier: Ctrl+o

Ligne = ActiveCell.Row
L = Ligne


Selection.Copy
Workbooks.Open "C:\Documents and Settings\JeanMarie\Bureau\essai n1kjh"
Windows("essai n1kjh.xls").Activate
' Selectionne la première cellule du tableau
Range("B7").Select

' Boucle tant que pas vide
Do While Not (IsEmpty(ActiveCell))
NbLigne = NbLigne + 1
Selection.Offset(1, 0).Select
Loop

ActiveSheet.Paste

MsgBox "Ligne " & ActiveCell.Row
Range("B7").Select

' Boucle tant que pas vide
Do While Not (IsEmpty(ActiveCell))
NbLigne = NbLigne + 1
Selection.Offset(1, 0).Select
Loop

Windows("BUFFET4P Missi.xls").Activate
Range("I1").Select
Selection.Copy
Windows("essai n1kjh.xls").Activate
Selection.Offset(-1, -1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Selection.Offset(0, 4).Select
Selection.ClearContents

Num = "D" & L
Nyu = "I" & L
ActiveCell.formla(


Windows("essai n1kjh.xls").Activate
ActiveWorkbook.Save
Workbooks("essai n1kjh.xls").Close
Windows("BUFFET4P Missi.xls").Activate

Le problème est aux endroits souligné.
Au début je récupère de numéro de ligne et le réutilise pour ma formule en bas. je ne dois passavoir utiliser les variable.

Merci d'avance

A+
olympikyon =)

9 réponses

  1. sub Macro4()
    '
    ' Macro4 Macro
    '
    ' Touche de raccourci du clavier: Ctrl+o

    Ligne = ActiveCell.Row
    L = Ligne

    Selection.Copy
    Workbooks.Open "C:\Documents and Settings\JeanMarie\Bureau\essai n1kjh"
    Windows("essai n1kjh.xls").Activate
    ' Selectionne la première cellule du tableau
    Range("B7").Select

    ' Boucle tant que pas vide
    Do While Not (IsEmpty(ActiveCell))
    NbLigne = NbLigne + 1
    Selection.Offset(1, 0).Select
    Loop

    ActiveSheet.Paste

    MsgBox "Ligne " & ActiveCell.Row
    Range("B7").Select

    ' Boucle tant que pas vide
    Do While Not (IsEmpty(ActiveCell))
    NbLigne = NbLigne + 1
    Selection.Offset(1, 0).Select
    Loop

    Windows("BUFFET4P Missi.xls").Activate
    Range("I1").Select
    Selection.Copy
    Windows("essai n1kjh.xls").Activate
    Selection.Offset(-1, -1).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    Selection.Offset(0, 4).Select
    Selection.ClearContents

    Windows("BUFFET4P Missi.xls").Activate
    cells(ligne,5).select
    ActiveCell.FormulaR1C1 = "=R" & ligne & "C8-R" & ligne & "C9"
    0
    1. merci
      0
  2. re,

    donc je vois ou est le pb :

    ub Macro4()
    '
    ' Macro4 Macro
    '
    ' Touche de raccourci du clavier: Ctrl+o

    Ligne = ActiveCell.Row
    L = Ligne

    Selection.Copy
    Workbooks.Open "C:\Documents and Settings\JeanMarie\Bureau\essai n1kjh"
    Windows("essai n1kjh.xls").Activate
    ' Selectionne la première cellule du tableau
    Range("B7").Select

    ' Boucle tant que pas vide
    Do While Not (IsEmpty(ActiveCell))
    NbLigne = NbLigne + 1
    Selection.Offset(1, 0).Select
    Loop

    ActiveSheet.Paste

    MsgBox "Ligne " & ActiveCell.Row
    Range("B7").Select

    ' Boucle tant que pas vide
    Do While Not (IsEmpty(ActiveCell))
    NbLigne = NbLigne + 1
    Selection.Offset(1, 0).Select
    Loop

    Windows("BUFFET4P Missi.xls").Activate
    Range("I1").Select
    Selection.Copy
    Windows("essai n1kjh.xls").Activate
    Selection.Offset(-1, -1).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    Selection.Offset(0, 4).Select
    Selection.ClearContents

    Windows("BUFFET4P Missi.xls").Activate
    ActiveCell.FormulaR1C1 = "=R" & ligne & "C8-R" & ligne & "C9"
    0
    1. pardon, je me suis trompée, remplaces :
      ActiveCell.FormulaR1C1 = "=R" & ligne & "C8-R" & ligne & "C9"

      par :
      ActiveCell.FormulaR1C1 = "=R" & ligne & "C4-R" & ligne & "C9"
      0
    2. Ah si le calcul se fait mais en I1 de "Buffet"
      Très étrange
      0
    3. tu avais oublié de sélectionner la bonne feuille
      0
    4. Windows("BUFFET4P Missi.xls").Activate 'sélectionnes ta feuille
      Selection.Offset(0, 4).Select
      Selection.ClearContents
      ActiveCell.FormulaR1C1 = "=R" & ligne & "C4-R" & ligne & "C9"
      0
    5. Selection.Offset(0, 4).Select
      Selection.ClearContents

      ça me sert à sélectionner la cellule où je souhaite y placer la formule dans "essai".
      0
  3. question bête, il y a tout ton code dans ton message?
    Et quel est le message d'erreur quand tu veux le lancer?
    0
    1. non mais après ActiveCell.formula faut rajouter R1C1 = "=R" & l & "C8-R" & l & "C9"

      Il marche mais prend pas les bonnes cellules voir réponse précédente.
      0
  4. ça doit faire ce que tu dit. Mais ça fait H11-I11 de "Essai" et pas le D27-I27 de "Buffet"
    0
    1. Je n'ai pas tout suivi.

      dis moi en français ce que cette macro est censée faire car pour moi techniquement, elle fonctionne.

      Voici ce qu'elle fait :
      tu sélectionnes une plage de cellule du classeur Buffet. (et tu enregistres le numéro de ligne de la première cellule par exemple 27)

      Tu demandes de copier cette plage dans le fichier essai dès qu'une ligne est vide

      Tu copies la cellule I1 pour la coller à un endroit de ton nouveau fichier (par exemple, sur la 11ème ligne)

      en suite, tu lui demandes de faire dans le classeur essai d - i du numéro de lignes de ta plage copiée soit d27-i27.

      Tu sauvegardes et tu fermes le fichier essai.

      Dis moi ce qui ne vas pas??
      0
      1. Re,

        ça ne sélectionne pas les colonnes du bon fichier. Je mets la formule dans "essai n1kjh.xls" et les cellules sélectionnées dans "BUFFET4P Missi.xls"

        Merci
        0
        1. Bonjour,

          si tu es sur une plage de cellule normalement
          Ligne = ActiveCell.Row 'te récupères le numéro de ligne de ta première cellule de sélectionnée mais normalement ca marche.

          maintenant remplace :
          ActiveCell.formla(

          par
          ActiveCell.FormulaR1C1 = "=R" & l & "C8-R" & l & "C9"

          Ca devrait marcher
          0
          1. Au début, Je suis sur une plage de cellule dont je veux mémoriser le numéro de la ligne (par exemple 23).
            Après ActiveCell.formla j'aimerais faire =D23 - I23. mais le 23 peut changer.
            0
            1. Bonjour,

              tout dépend ou tu es positionné au moment ou tu lances ta macro :
              es tu sur une plage de cellule, es-tu sur une cellule???
              Si tu es sur une cellule, les codes suivants fonctionnent :
              Ligne = ActiveCell.Row
              L = Ligne
              Num = "D" & L
              Nyu = "I" & L

              Par contre, il doit te manquer un bout de code car celui la ne fonctionne pas, c'est sur :
              ActiveCell.formla(

              que voulais-tu faire à ce moment la de ton code?
              0