Simplification et explication VBA

  • Initiateur de la discussion Jean Marc
  • Date de début
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
 

CBernardT

XLDnaute Barbatruc
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
 

JCA06

XLDnaute Occasionnel
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'.
 
J

Jean Marc

Guest
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
 
J

Jean Marc

Guest
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
 

_Thierry

XLDnaute Barbatruc
Repose en paix
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
 

galopin01

XLDnaute Occasionnel
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+
 

_Thierry

XLDnaute Barbatruc
Repose en paix
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
 
J

Jean Marc

Guest
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
 

PascalXLD

XLDnaute Barbatruc
Modérateur
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
 

Discussions similaires

Réponses
2
Affichages
183

Statistiques des forums

Discussions
312 846
Messages
2 092 774
Membres
105 532
dernier inscrit
nasen31