Probleme formule macro

Bonjour Je débute avec le VBA et voici une partie de mon code je n'arrive pas a faire fonctionner par mes Variables.

Par exemple je voudrais changer Range(O9:O15").Select en Range("Actualsm9:Actualsm15").Select.

Actuals = Sheets("List").Range("N20")

' P

Actualsm = Sheets("List").Range("O20")

'O

'Actuals CTRL C CTRL V

Sheets("Corp").Select

Range("Actualsm9:Actualsm15").Select

Selection.Copy

Range("Actuals9").Select

ActiveSheet.Paste

Range("Actualsm18:Actualsm58").Select

Application.CutCopyMode = False

Selection.Copy

Range("Actuals18").Select

ActiveSheet.Paste

Range("Actualsm61:Actualsm74").Select

Application.CutCopyMode = False

Selection.Copy

Range("Actuals61").Select

ActiveSheet.Paste

Comment je peux faire pour que si ma variable actuals = P et que actualsm = 0

Sheets("Corp").Select

Range("O9:O15").Select

Selection.Copy

Range("P9").Select

ActiveSheet.Paste

Range("O18:O58").Select

Application.CutCopyMode = False

Selection.Copy

Range("Actuals18").Select

ActiveSheet.Paste

Range("O61:O74").Select

Application.CutCopyMode = False

Selection.Copy

Range("P61").Select

ActiveSheet.Paste

Merci beaucoup pour votre aide,

Pas sûr d'avoir bien compris ... mais n'est-ce pas ceci qu'il faut écrire ?

Range(Actualsm & "61:" & Actualsm & "74").Select

si actualsm = O alors la formule deviendra (attention aux 0 et O ...)

Range("O61:O74")

Merci cela fonctionne parfaitement.

Voici mon code.

J'ai une autre question je dois faire cette macro dans plusieurs onglets, au lieu d’écrire cette macro 15 fois comment je peux faire ?

Puis avoir une variable pour le nom de l'onglet et une boucle ???

Sub Copycall()

'

' Macro2 Macro

Dim Actuals As String

Dim Actualsm As String

Dim Prior As String

Dim Priorm As String

Actuals = Sheets("List").Range("N20")

Actualsm = Sheets("List").Range("O20")

Prior = Sheets("List").Range("N21")

Priorm = Sheets("List").Range("O21")

'Actuals CTRL C CTRL V

'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals

'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals

'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals

Sheets("Corp").Select

'Range("P9:P15").Select

Range(Actualsm & "9:" & Actualsm & "15").Select

Application.CutCopyMode = False

Selection.Copy

'Range("P9").Select

Range(Actuals & "9").Select

ActiveSheet.Paste

'Range("P18:P58").Select

Range(Actualsm & "18:" & Actualsm & "58").Select

Application.CutCopyMode = False

Selection.Copy

Range(Actuals & "18").Select

ActiveSheet.Paste

'Range("P61:P74").Select

Range(Actualsm & "61:" & Actualsm & "74").Select

Application.CutCopyMode = False

Selection.Copy

'Range("Q61").Select

Range(Actuals & "61").Select

ActiveSheet.Paste

'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior

'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior

'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior

'Range("AT9:AT15").Select

Range(Priorm & "9:" & Priorm & "15").Select

Application.CutCopyMode = False

Selection.Copy

'Range("AU9").Select

Range(Prior & "9").Select

ActiveSheet.Paste

'Range("AT18:AT58").Select

Range(Priorm & "18:" & Priorm & "58").Select

Application.CutCopyMode = False

Selection.Copy

'Range("AU18").Select

Range(Prior & "18").Select

ActiveSheet.Paste

'Range("AT61:AT74").Select

Range(Priorm & "61:" & Priorm & "74").Select

Application.CutCopyMode = False

Selection.Copy

'Range("AU61").Select

Range(Prior & "61").Select

ActiveSheet.Paste

Application.CutCopyMode = False

End Sub

vessfils a écrit :

J'ai une autre question je dois faire cette macro dans plusieurs onglets, au lieu d’écrire cette macro 15 fois comment je peux faire ?

Puis avoir une variable pour le nom de l'onglet et une boucle ???

Absolument, c'est possible.

Si je comprends bien, ces valeurs seront donc modifiées à chaque itération

Actuals = Sheets("List").Range("N20")
Actualsm = Sheets("List").Range("O20")

Prior = Sheets("List").Range("N21")
Priorm = Sheets("List").Range("O21")

Si c'est Listle nom de ta variable (nom de l'onglet),

  • soit tu boucles sur tous les noms d'onglet si tous doivent être traités,
  • soit tu mets quelque part la liste des onglets à traiter que tu nommes ListOnglets par exemple et ensuite tu fais une boucle
Fot each onglet in range("ListOnglets")
Actuals = Sheets(onglet).Range("N20")
Actualsm = Sheets(onglet).Range("O20")

Prior = Sheets(onglet).Range("N21")
Priorm = Sheets(onglet).Range("O21")

' le reste de ton code qui fonctionne

next onglet

pas testé ...

Petite correction ...

Fot each onglet in range("ListOnglets")

Sheets(onglet).select

Actuals = Sheets(onglet).Range("N20")
Actualsm = Sheets(onglet).Range("O20")

Prior = Sheets(onglet).Range("N21")
Priorm = Sheets(onglet).Range("O21")

' le reste de ton code qui fonctionne

Next onglet

Merci pour ta réponse, juste une autre question par exemple dans mon fichier j'ai beaucoup d'onglets, comme tu peux le voir

2014 Summary / 2015 Summary / Act v Bdgt YTD / Act v Bdgt MTD / Sum-up/ CST / Corp / KavPres ........ CZT BV / CZT LTD / CZT NA / Rates / List

J'aimerais que la macro tourne sur les onglets sélectionnes soient de Corp a ==> CZT NA.

En fait c'est sur cette ligne que je choisis l'onglet Sheets("Corp").Select, car ces deux variables changent en fonction des mois, elles me donnent la colonne ou je vais faire CTRL C(Actualsm) et ou je vais faire CTRL V(Actuals).

Donc il faudrait que Sheets("Corp").Select prennent les valeurs Corp jusqu’à CZT NA.

Actuals = Sheets("List").Range("N20")

Actualsm = Sheets("List").Range("O20")

Sheets("Corp").Select

Range("Actualsm9:Actualsm15").Select

Selection.Copy

Range("Actuals9").Select

Merci vraiment bcp,

Mon code ne marche pas

Sub Copycall()

'

' Macro2 Macro

Dim Actuals As String

Dim Actualsm As String

Dim Prior As String

Dim Priorm As String

Dim onglet As String

Actuals = Sheets("List").Range("N20")

Actualsm = Sheets("List").Range("O20")

Prior = Sheets("List").Range("N21")

Priorm = Sheets("List").Range("O21")

'Actuals CTRL C CTRL V

'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals

'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals

'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals

For Each onglet In Range("ListOnglets")

Sheets("onglet").Select

'Range("P9:P15").Select

Range(Actualsm & "9:" & Actualsm & "15").Select

Application.CutCopyMode = False

Selection.Copy

'Range("P9").Select

Range(Actuals & "9").Select

ActiveSheet.Paste

'Range("P18:P58").Select

Range(Actualsm & "18:" & Actualsm & "58").Select

Application.CutCopyMode = False

Selection.Copy

Range(Actuals & "18").Select

ActiveSheet.Paste

'Range("P61:P74").Select

Range(Actualsm & "61:" & Actualsm & "74").Select

Application.CutCopyMode = False

Selection.Copy

'Range("Q61").Select

Range(Actuals & "61").Select

ActiveSheet.Paste

'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior

'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior

'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior

'Range("AT9:AT15").Select

Range(Priorm & "9:" & Priorm & "15").Select

Application.CutCopyMode = False

Selection.Copy

'Range("AU9").Select

Range(Prior & "9").Select

ActiveSheet.Paste

'Range("AT18:AT58").Select

Range(Priorm & "18:" & Priorm & "58").Select

Application.CutCopyMode = False

Selection.Copy

'Range("AU18").Select

Range(Prior & "18").Select

ActiveSheet.Paste

'Range("AT61:AT74").Select

Range(Priorm & "61:" & Priorm & "74").Select

Application.CutCopyMode = False

Selection.Copy

'Range("AU61").Select

Range(Prior & "61").Select

ActiveSheet.Paste

Application.CutCopyMode = False

Next onglet

End Sub

J'ai cette erreur

Erreur For each control variable must be variant or objet

vessfils a écrit :

Merci pour ta réponse, juste une autre question par exemple dans mon fichier j'ai beaucoup d'onglets, comme tu peux le voir

2014 Summary / 2015 Summary / Act v Bdgt YTD / Act v Bdgt MTD / Sum-up/ CST / Corp / KavPres ........ CZT BV / CZT LTD / CZT NA / Rates / List

il faut donc les lister comme je le proposais dans une zone que j'avais appelée ListOnglet
vessfils a écrit :

Mon code ne marche pas

Sub Copycall()

Actuals = Sheets("List").Range("N20")

Actualsm = Sheets("List").Range("O20")

Prior = Sheets("List").Range("N21")

Priorm = Sheets("List").Range("O21")

'Actuals CTRL C CTRL V

'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals

'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals

'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals

For Each onglet In Range("ListOnglets")

D'abord, ton code n'est pas dans le bon ordre, tel que je l'avais proposé;

tu as aussi ajouté à tort "" autour de onglet

Ensuite il est difficile de "deviner" n'ayant pas ne serait-ce qu'un bout de fichier.

Erreur For each control variable must be variant or objet

en effet, mets au début

Dim onglet As Range

au lieu de

Dim onglet As String

et ensuite fais appel à

Sheets(onglet.value).Select

tout ceci en "aveugle"

Désolé, je ne comprends pas ce que tu veux faire ...

D'abord :

For Each onglet In Range("ListOnglets")
Sheets(onglet.Value).Select

Définis les onglets à traiter dans une liste appelée ListOnglets

Appelle bien onglet.value et non pas "onglet" comme déjà signalé

ceci

je voudrais changer Range(O9:O15").Select en Range("Actualsm9:Actualsm15").Select.

a bien été résolu

est-ce que les valeurs

Actuals = Sheets("List").Range("N20")
Actualsm = Sheets("List").Range("O20")

Prior = Sheets("List").Range("N21")
Priorm = Sheets("List").Range("O21")

sont les mêmes quelque soit l'onglet traité ?

si oui, après avoir fait les 2 modifs demandées (mettre la liste des onglets dans une plage et mettre onglet.value ... le code devrait pouvoir fonctionner ! encore que je n'en suis pas sûr car je ne comprends pas le but du bazar.

Sub Copycall()
'
' Macro2 Macro
Dim Actuals As String
Dim Actualsm As String
Dim Prior As String
Dim Priorm As String
Dim onglet As Range

For Each onglet In Range("ListOnglets")
Sheets(onglet.Value).Select

Actuals = Sheets("List").Range("N20")
Actualsm = Sheets("List").Range("O20")

Prior = Sheets("List").Range("N21")
Priorm = Sheets("List").Range("O21")
'Actuals CTRL C CTRL V
'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals
'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals
'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals
'Range("P9:P15").Select
    Range(Actualsm & "9:" & Actualsm & "15").Select
    Application.CutCopyMode = False
    Selection.Copy
'Range("P9").Select
    Range(Actuals & "9").Select
    ActiveSheet.Paste
'Range("P18:P58").Select
    Range(Actualsm & "18:" & Actualsm & "58").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range(Actuals & "18").Select
    ActiveSheet.Paste
'Range("P61:P74").Select
Range(Actualsm & "61:" & Actualsm & "74").Select
    Application.CutCopyMode = False
    Selection.Copy
'Range("Q61").Select
    Range(Actuals & "61").Select
    ActiveSheet.Paste

'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior
'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior
'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior

'Range("AT9:AT15").Select
    Range(Priorm & "9:" & Priorm & "15").Select
    Application.CutCopyMode = False
    Selection.Copy
'Range("AU9").Select
    Range(Prior & "9").Select
    ActiveSheet.Paste
'Range("AT18:AT58").Select
    Range(Priorm & "18:" & Priorm & "58").Select
    Application.CutCopyMode = False
    Selection.Copy
'Range("AU18").Select
    Range(Prior & "18").Select
    ActiveSheet.Paste
'Range("AT61:AT74").Select
    Range(Priorm & "61:" & Priorm & "74").Select
    Application.CutCopyMode = False
    Selection.Copy
'Range("AU61").Select
    Range(Prior & "61").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
Next onglet
End Sub
Steelson a écrit :

Désolé, je ne comprends pas ce que tu veux faire ...

D'abord :

For Each onglet In Range("ListOnglets")
Sheets(onglet.Value).Select

Définis les onglets à traiter dans une liste appelée ListOnglets

Appelle bien onglet.value et non pas "onglet" comme déjà signalé

ceci

je voudrais changer Range(O9:O15").Select en Range("Actualsm9:Actualsm15").Select.

a bien été résolu

est-ce que les valeurs

Actuals = Sheets("List").Range("N20")
Actualsm = Sheets("List").Range("O20")

Prior = Sheets("List").Range("N21")
Priorm = Sheets("List").Range("O21")

sont les mêmes quelque soit l'onglet traité ?

Oui se sont les mêmes.

si oui, après avoir fait les 2 modifs demandées (mettre la liste des onglets dans une plage et mettre onglet.value ... le code devrait pouvoir fonctionner ! encore que je n'en suis pas sûr car je ne comprends pas le but du bazar.

Sub Copycall()
'
' Macro2 Macro
Dim Actuals As String
Dim Actualsm As String
Dim Prior As String
Dim Priorm As String
Dim onglet As Range

For Each onglet In Range("ListOnglets")
Sheets(onglet.Value).Select

Actuals = Sheets("List").Range("N20")
Actualsm = Sheets("List").Range("O20")

Prior = Sheets("List").Range("N21")
Priorm = Sheets("List").Range("O21")
'Actuals CTRL C CTRL V
'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals
'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals
'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals
'Range("P9:P15").Select
    Range(Actualsm & "9:" & Actualsm & "15").Select
    Application.CutCopyMode = False
    Selection.Copy
'Range("P9").Select
    Range(Actuals & "9").Select
    ActiveSheet.Paste
'Range("P18:P58").Select
    Range(Actualsm & "18:" & Actualsm & "58").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range(Actuals & "18").Select
    ActiveSheet.Paste
'Range("P61:P74").Select
Range(Actualsm & "61:" & Actualsm & "74").Select
    Application.CutCopyMode = False
    Selection.Copy
'Range("Q61").Select
    Range(Actuals & "61").Select
    ActiveSheet.Paste

'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior
'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior
'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior

'Range("AT9:AT15").Select
    Range(Priorm & "9:" & Priorm & "15").Select
    Application.CutCopyMode = False
    Selection.Copy
'Range("AU9").Select
    Range(Prior & "9").Select
    ActiveSheet.Paste
'Range("AT18:AT58").Select
    Range(Priorm & "18:" & Priorm & "58").Select
    Application.CutCopyMode = False
    Selection.Copy
'Range("AU18").Select
    Range(Prior & "18").Select
    ActiveSheet.Paste
'Range("AT61:AT74").Select
    Range(Priorm & "61:" & Priorm & "74").Select
    Application.CutCopyMode = False
    Selection.Copy
'Range("AU61").Select
    Range(Prior & "61").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
Next onglet
End Sub

En fait c'est vrai que c'est mieux si tu comprends, chaque mois je dois mettre a jour une tonne de fichiers, Donc cette macro a pour but de faire des copier coller dans chaque onglet a la même place. Donc je dois copier le mois précédent sur la colonne du mois actuel et cela pour les Actuals et Prior.

This is the final code and this is working THANKS A LOT

Sub Copycall()

'

' Macro2 Macro

Dim Actuals As String

Dim Actualsm As String

Dim Prior As String

Dim Priorm As String

Dim onglet As Range

Actuals = Sheets("List").Range("N20")

Actualsm = Sheets("List").Range("O20")

Prior = Sheets("List").Range("N21")

Priorm = Sheets("List").Range("O21")

'Actuals CTRL C CTRL V

'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals

'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals

'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals'Actuals

For Each onglet In Range("ListOnglets")

Sheets(onglet.Value).Select

'Range("P9:P15").Select

Range(Actualsm & "9:" & Actualsm & "15").Select

Application.CutCopyMode = False

Selection.Copy

'Range("P9").Select

Range(Actuals & "9").Select

ActiveSheet.Paste

'Range("P18:P58").Select

Range(Actualsm & "18:" & Actualsm & "58").Select

Application.CutCopyMode = False

Selection.Copy

Range(Actuals & "18").Select

ActiveSheet.Paste

'Range("P61:P74").Select

Range(Actualsm & "61:" & Actualsm & "74").Select

Application.CutCopyMode = False

Selection.Copy

'Range("Q61").Select

Range(Actuals & "61").Select

ActiveSheet.Paste

'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior

'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior

'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior'Prior

'Range("AT9:AT15").Select

Range(Priorm & "9:" & Priorm & "15").Select

Application.CutCopyMode = False

Selection.Copy

'Range("AU9").Select

Range(Prior & "9").Select

ActiveSheet.Paste

'Range("AT18:AT58").Select

Range(Priorm & "18:" & Priorm & "58").Select

Application.CutCopyMode = False

Selection.Copy

'Range("AU18").Select

Range(Prior & "18").Select

ActiveSheet.Paste

'Range("AT61:AT74").Select

Range(Priorm & "61:" & Priorm & "74").Select

Application.CutCopyMode = False

Selection.Copy

'Range("AU61").Select

Range(Prior & "61").Select

ActiveSheet.Paste

Application.CutCopyMode = False

Next onglet

End Sub

Rechercher des sujets similaires à "probleme formule macro"