Aller à la précédente feuille active
Bonjour à toutes et tous.
J'aimerais savoir si dans un code VBA existant il est possible de remplacer "ActiveSheet.Previous.Select" et "ActiveSheet.Next.Select" par une commande qui active la précédente feuille qui était active.
Merci.
legreffier
Bonjour legreffier, il faudra faire attention à vos demandes saisies au kilomètre c'est toujours plus compliqué à lire n'est-ce pas. sinon il n'existe pas de previous ou next je ne sais pas ou vous allez chercher ça. il faut utiliser l'évènement Desactivate ou Activate pour mémoriser la feuille dans une variable.
Je vous invite à lire la charte du forum [A LIRE AVANT DE POSTER] concernant la lisibilité des demandes
Bonjour Bruno M45, Merci pour ton message. Je viens de lire la charte. Peux-tu me dire ce que veut dire les demandes saisies au kilomètre ? Je n'ai pas trouvé la réponse. Merci. legreffier
Re,
La saisie au kilomètre (également appelée « frappe au kilomètre ») est une méthode de travail qui consiste à rédiger son texte sans se soucier de la mise en forme.
Alors plutôt que de saisir :
Bonjour Bruno M45, Merci pour ton message. Je viens de lire la charte. Peux-tu me dire ce que veut dire les demandes saisies au kilomètre ? Je n'ai pas trouvé la réponse. Merci. legreffier
Il serait bien de le faire ainsi (plus lisible)
Bonjour Bruno M45,
Merci pour ton message.
Je viens de lire la charte, peux-tu me dire ce que veut dire les demandes saisies au kilomètre ?
Je n'ai pas trouvé la réponse.
Merci. legreffier
Ok, j'ai compris.
Merci.
legreffier
Bonjour à toutes et tous.
Je reviens sur ma demande.
Pour "previous" et "next" j'ai suivi les conseils que j'ai trouvés sur le forum et qui reviennent assez souvent. C'est à dire enregistrer une macro de ce qu'on souhaite faire puis récupérer le code et le modifier si besoin.
Dans mon cas j'ai une feuille source sur laquelle sont attachées 6 feuilles de résultats et il y a donc une interaction entre ces feuilles.
Dans mon code je passe d'une feuille à l'autre en permanence.
Ce que je souhaite est d'intégrer dans mon code, lorsque je fais appel à une feuille, que ce soit toujours la dernière utilisée. Je ne sais pas si c'est clair.
il faut utiliser l'évènement Desactivate ou Activate pour mémoriser la feuille dans une variable.
Je suis débutant et ce langage est inaudible pour moi.
Je joins un bout de code où il y a "ActiveSheet.Previous.Select" et "ActiveSheet.Next.Select" que je souhaiterais remplacer :
Range("A147:A174").Select
ActiveSheet.Previous.Select
Range("H13").Select
ActiveSheet.Next.Select
Selection.Copy
Sheets("ACCOMPAGNEMENT").Select
ActiveSheet.Paste
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("P13:P40").Select
Selection.Copy
Sheets("Feuil1").Select
Range("H147").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("B147:B174").Select
ActiveSheet.Previous.Select
Range("I13").Select
ActiveSheet.Next.Select
Selection.Copy
Sheets("ACCOMPAGNEMENT").Select
ActiveSheet.Paste
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("P13:P40").Select
Selection.Copy
Sheets("Feuil1").Select
Range("H147").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=FalseMerci.
legreffier
Re,
Merci pour la mise en forme de la demande
VBA est un langage orienté objets, il suffit de les utiliser pour lui appliquer des instructions
Donc au lieu d'utiliser "Previous.Select" ou "Select", utilisez
Sheets("FeuilleSource").range("PlageACopier").Copy Destination:=Sheets("FeuilleDestination").Range("PlageOuColler")ou
Sheets("FeuilleSource").range("PlageACopier").Copy
Sheets("FeuilleDestination").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=FalseInutile donc de sélectionner la feuille pour copier ou coller quelque chose
J'espère que ce sera plus clair
Un exemple d'après le code posté que je n'ai pas très bien compris du coup
Sub exemple()
Dim ShtD As Worksheet
' Définir la feuille de destination
Set ShtD = Sheets("ACCOMPAGNEMENT")
With Sheets("Source")
.Range("A147:A174").Copy
ShtD.Range("H13").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
.Range("P13:P40").Copy
ShtD.Range("H147").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
.Range("B147:B174").Copy
ShtD.Range("I13").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
.Range("P13:P40").Copy
Sheets("Feuil1").Range("H147").PasteSpecial Paste:=xlPasteValues, _
Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End With
End SubA+
Merci pour le retour. J'ai compris l'idée avec Sheets et je vais revoir tous mes codes car je me dis que cela va les alléger.
En fait cette solution ça ne va pas avec ce que je veux faire pour ce code car il sert pour les 6 feuilles et ça veut dire qu'il faudrait que je le crée pour chaque feuille et il est très long, il fait 5 modules complets).
Merci.
legreffier
Re,
Nom, un seul module suffit, il suffit de variabiliser les noms des feuilles
Maintenant sans fichier
A+
Mon fichier en entier est trop lourd pour le forum. Je l'ai allégé et j'ai dû supprimer des lignes de codes.
L'idée est que la macro "Ventiler" s'applique sur chaque feuille "LAIT", "ACCOMPAGNEMENT", "PROTEINE", etc.
Merci.
legreffier
Re,
Voici un exemple de code pour la sub "Ventiler11"
Mais j'ai l'impression qu'il y a des répétitions avec Ventiler12... etc
Vous verrez qu'avec les variables objet à aucun moment je passe d'une feuille à l'autre, c'est inutile
Sub Ventiler11()
Dim ShtA As Worksheet ' Objet feuille ACCOMPAGNEMENT
Dim ShtD As Worksheet ' Objet feuille destination
' Désactiver le rafraichissement écran
'Application.ScreenUpdating = False
' Désactiver les évènements
Application.EnableEvents = False
' Définir la feuille ACCOMPAGNEMENT
Set ShtA = ThisWorkbook.Sheets("ACCOMPAGNEMENT")
' Définir la feuille de destination
Set ShtD = ThisWorkbook.Sheets("Feuil1")
ShtD.Visible = xlSheetVisible
' Copier la plage de la feuille active
ActiveSheet.Range("P13:P40").Copy
ShtD.Range("H118").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ShtA.Range("H13:N40").Copy
ShtD.Range("K2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Sheets("Feuil1").Range("A118:A145").Copy
ShtA.Range("H13").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ShtA.Range("P13:P40").Copy
ShtD.Range("H118").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ShtD.Range("B118:B145").Copy
ShtA.Range("I13").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ShtA.Range("P13:P40").Copy
ShtD.Range("H118").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ShtD.Range("C118:C145").Copy
ShtA.Range("J13").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ShtA.Range("P13:P40").Copy
ShtD.Range("H118").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ShtD.Range("D118:D145").Copy
ShtA.Range("K13").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ShtA.Range("P13:P40").Copy
ShtD.Range("H118").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ShtD.Range("E118:E145").Copy
ShtA.Range("L13").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ShtA.Range("P13:P40").Copy
ShtD.Range("H118").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ShtD.Range("F118:F145").Copy
ShtA.Range("M13").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ShtA.Range("P13:P40").Copy
ShtD.Range("H118").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ShtD.Range("G118:G145").Copy
ShtA.Range("N13").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ActiveSheet.Range("H13").Select
Worksheets("Feuil1").Visible = False
' Réactiver le rafraichissement écran
'Application.ScreenUpdating = False
' Réactiver les évènements
Application.EnableEvents = False
' Effacer les varaibles objet
Set ShtD = Nothing: Set ShtA = Nothing
End SubJe vous laisse faire le reste, mais pour moi on doit pouvoir faire ça avec 1 seule sub et une boucle
Mais comme je n'ai absolument pas compris le fonctionnement et pas trop de temps à ça
A+
Merci beaucoup, c'est parfait pour moi.
Je vais aussi de mon côté continuer à me former avec les cours VBA.
Bonne soirée.
legreffier