Simplification et explication VBA

  • Initiateur de la discussion Initiateur de la discussion Jean Marc
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

J

Jean Marc

Guest
Bonjourle forum,

je vous sollicite une nouvelle fois concernant ce morceau de code

' Copie des données dans Infos

Sheets('Infos').Select
Columns('V:W').Select
Application.CutCopyMode = False
Selection.ClearContents
Columns('AA:AB').Select
Application.CutCopyMode = False
Selection.ClearContents

Sheets(saison).Select
Range('j7:k' & Range('k65536').End(xlUp).Row).Select
Selection.Copy
Sheets('Infos').Select
Range('V2:V4').Select
ActiveSheet.Paste

Sheets(saison).Select
Range('V7:W' & Range('W65536').End(xlUp).Row).Select
Selection.Copy
Sheets('Infos').Select
Range('AA2:AA4').Select
ActiveSheet.Paste

Range('X2:Y12').Select
Selection.Copy
Sheets('Synt').Select
Range('B17').Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

Sheets(saison).Select
Range('AC2:AB12').Select
Selection.Copy
Sheets('Synt').Select
Range('G17').Select
Selection.PasteSpecial Paste:=xlPasteValues,
**Operation:=xlNone, SkipBlanks:=False, Transpose:=False**

Application.Goto Reference:='Macro10'

Serait possible de le simplifier?
L'avant dernière ligne entre les '**' me colle une erreur alors que la 8ème ligne au dessus passe !!

je souhaiterais des explications sur ce code

Application.Goto Reference:='Macro10'

ai cherché mais rien trouvé dans l'aide
Peut on s'en passer? si oui comment ?

Grand merci a vous

JM
 
Bonjour Jean Marc,

Simplification du code, avec j'espère les mêmes actions ?

Sub Traitementransfert()
Application.ScreenUpdating = False
'Utilisation de With ... End With
With Sheets('Infos')
.Columns('V:W').ClearContents
.Columns('AA:AB').ClearContents
End With
'Copie de toutes les données valeurs, formats, etc.
With Sheets('saison')
.Range('j7:k' & Range('k65536').End(xlUp).Row).Copy Sheets('Infos').Range('V2')
.Range('V7:W' & Range('W65536').End(xlUp).Row).Copy Sheets('Infos').Range('AA2')
' Copie des valeur uniquement
.Range('X2:Y12').Copy
Sheets('Synt').Range('B17').PasteSpecial Paste:=xlPasteValues
.Range('AC2:AB12').Copy
Sheets('Synt').Range('G17').PasteSpecial Paste:=xlPasteValues
End With
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub

Cordialement

CBernardT
 
Bonjour Jean-Marc, bonjour Bernard, et bonjour le Forum,

Merci Bernard, c'est un exercice intéressant que j'ai refait pour arriver à ton code.

Pour ce qui est de la fin :
Application.Goto Reference:='Macro10'

Il ne faut pas confondre Goto (ci-dessus) et GoTo :
- Le GoTo est une instruction qui sert à renvoyer à un ligne de la procédure dans laquelle il est lui-même inclus ;
- alors que le Goto est une méthode pour sélectionner un plage ou une procédure.

Dans ton cas, la ligne sert à lancer la procédure qui s'appelle 'Macro10'.
 
Bonjour JCA06, CBernardT, re le forum

je vous remercie tous les deux

il y a qques bug dans le code simplifié que je vé essayer de résoudre seul

quant a : Application.Goto Reference:='Macro10'
je n'y comprends rien cette ligne s'est installée 'seule'
je viens de l'enlever et tou a l'air de vouloir fonctionner

un grand merci

JM
 
re tout le monde

Je sollicite (une fois de plus) votre aide
avec ce code

Sub Pagegarde()


'Demande d'édition
saison = InputBox('Quelle saison voulez vous éditer ?', 'Edition page de garde + Impression')
If saison = '' Then Menu

Application.ScreenUpdating = False

If isWs(saison) Then
' Appel macro de traitement
Call transfert_données
' Appel USF
Call IMPRESSION.Show

Application.ScreenUpdating = True

Else: MsgBox 'la feuille n'existe pas !'
Call Menu
End If
End Sub


Quand je le lance la fen^tre VBA s'ouvre

pouvez vous me dire pouquoi alors que je n'ai pas de bug dans ma macro

Merci bcp

JM
 
Bonsoir Jean-Marc, Jean-Charles, le Forum

A mon avis quand tu dis 'je n'ai pas de bug dans ma macro' c'est sans compter sur cette ligne :

If isWs(saison) Then

En effet isWs n'est pas une instruction valide.

Je n'ai pas trop de temps, mais tu peux simplement boucler sur tes feuilles :

Option Explicit
Option Compare Text

Sub Pagegarde()
Dim Saison As String
Dim WS As Worksheet
Dim Bad As Byte

Application.ScreenUpdating =
False


Saison = InputBox('Quelle saison voulez vous éditer ?', 'Edition page de garde + Impression')
If Saison = '' Then Menu

For Each WS In Worksheets
       
If WS.Name = Saison Then
           
Call transfert_données
           
Call IMPRESSION.Show
           
Exit For
       
Else
            Bad = Bad + 1
       
End If
Next WS

If Bad = Worksheets.Count Then
    MsgBox 'Lafeuille ' & Saison & ' n
'existe pas'
   
Call Menu
End If

Application.ScreenUpdating =
True
End Sub



Bonne Soirée
@+Thierry
 
Bonjour,
Pour mémoire isWs vient de moi et de ton précédent fil.

La structure générale de ta macro doit être :

Sub Pagegarde()
saison = InputBox('Quelle saison voulez vous éditer ?', 'Edition page de garde + Impression')

If isWs(saison) Then
MsgBox 'Ok'
Instruction1
Instruction2
...
Else
MsgBox 'la feuille n'existe pas !'
Instruction3
End If
End Sub

Inutile de compliquer les choses avec
If saison = '' Then Menu
car de toute façon isWs traitera cette situation dans
Else...

Evite cette syntaxe
Else: MsgBox 'la feuille n'existe pas !'
Call Menu

A+
 
Bonjour Jean Marc, Roger, Pascal, Jean-Charles, Bernard, le Forum

Tu vois Jean Marc, c'est l'exemple type d'erreur d'un intervenant qui résulte d'une perte de temps pour les contributeurs de ce Forum.

En effet si tu étais resté dans le Fil d'origine -(ou au moins y faire référence), d'abord on aurait pu comprendre cette histoire de 'IsWs' et par ailleurs, 'le galopin' aurait pu terminer ses explications sur le même Fil si il avait vu que tu rencontrais un problème avec l'utilisation de sa Function Personnalizée.


Enfin c'est pas grave, bonne Journée
@+Thierry
 
Bonjour le Forum
Quelqu'un pourrait il m'expliquer pourquoi ce code marche très bien : a noter que saison est une variable

Sheets(saison).Select
Range('j7:k' & Range('k65536').End(xlUp).Row).Select
Selection.Copy
Sheets('Infos').Select
Range('V2:V4').Select
ActiveSheet.Paste

Sheets(saison).Select
Range('V7:W' & Range('W65536').End(xlUp).Row).Select
Selection.Copy
Sheets('Infos').Select
Range('AA2:AA4').Select
ActiveSheet.Paste

et pas celui ci qui a été simplifié par CbernardT (merci encore pour l'aide)


With Sheets(saison)
'.Range('j7:k' & Range('k65536').End(xlUp).Row).Copy Sheets('Infos').Range('V2:V4') '
'.Range('V7:W' & Range('W65536').End(xlUp).Row).Copy Sheets('Infos').Range('AA2:AA4') '
' Copie des valeur uniquement

Merci a vous

JM
 
Bonjour

essaies ceci et lis bien la remarque de Thierry par la même occasion


With Sheets(saison)
.Range('j7:k' & Range('k65536').End(xlUp).Row).Copy Sheets('Infos').Range('V2:V4')
.Range('V7:W' & Range('W65536').End(xlUp).Row).Copy Sheets('Infos').Range('AA2:AA4')
End With

Bon courage
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
10
Affichages
787
Réponses
18
Affichages
583
Réponses
2
Affichages
395
Réponses
17
Affichages
1 K
Retour