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:=False

Merci.

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:=False

Inutile 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 Sub

A+

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

12exemple.zip (326.57 Ko)

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 Sub

Je 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

Rechercher des sujets similaires à "aller precedente feuille active"