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 List
le 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
il faut donc les lister comme je le proposais dans une zone que j'avais appelée ListOngletvessfils 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
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"
Voici mon fichier
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
a bien été résoluje voudrais changer Range(O9:O15").Select en Range("Actualsm9:Actualsm15").Select.
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
a bien été résoluje voudrais changer Range(O9:O15").Select en Range("Actualsm9:Actualsm15").Select.
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