Règles Vba pour simplification du code

Darnel

XLDnaute Impliqué
Bonjour à tous

N'étant pas très aguéri en vb, j'ai fais un fichier avec du code, en partie eu par le biai de l'enregistreur de macro que j'ai ensuite simplifier (très peu cependant car j'ai peu de connaissances à ce niveau), , et l'autre partie est composée de morceau que certain d'entre vous m'ont aidé à réaliser ( je remercie pour l'occasion et à la volée José, Jean marie, brigitte, monique, MdF, gislain, porcinet, ETC ... et les autres, qu'ils m'excusent si je les ait oublier)
Le truc maintenant, c'est que j'aimerai réduire le nombre de select, afin d'accelerer l'execution des macros.
J'en vien donc a ma question :

Pour les selects (déjà ça) quels sont les règles à suivre (dans quel cas est il indispensable, quand ne l'est il pas?, comment compiler deux lignes du genre :
Sheets("feuil1").Select
Range("A1").Select
etc etc
Car j'ai essayer différents trucs sans succes, genre

Sheets("feuil1").Range("A1").Select

Donc voila, si quelqu'un peu me faire un petit cours, ou me réorienter, c'est cool.
A+
 

Gorfael

XLDnaute Barbatruc
Re : Règles Vba pour simplification du code

TETRAM à dit:
Merci Procinet82 de repasser par là
Donc comme tu as indiqué dans ton poste j'ai remodifié mon code comme suis:

With Sheets("Business Document")
.Range("J16").Copy Destination:=Sheets("Coordonnées Fournisseur").Range("A3")
.Range("J17").Copy Destination:=Sheets("Coordonnées Fournisseur").Range("B3")
'...
End With

mais je copie toujours les formules et pas les valeurs :(
Désolé de t'ennuyer avec ça, mais je voudrais au moins comprendre.
Salut à tous
Dommage Tetram, faut rajouter du code :p

Sub test()
Sheets("A").Range("A1:B1").Copy
Sheets("B").Range("A1:B1").PasteSpecial xlPasteValues
End Sub

With Sheets("Business Document")
.Range("J16").Copy
Sheets("Coordonnées Fournisseur").Range("A3").PasteSpecial xlPasteValues
.Range("J17").Copy
Sheets("Coordonnées Fournisseur").Range("B3").PasteSpecial xlPasteValues
'...
End With

With : c'est un truc de feignant
Quand tu mets du code derrière with, et que excel rencontre un séparateur qui commence une instruction ("." ou "!") Excel se rend compte que tu lui a refiké le boulot et colle l'instruction qui suit with devant
Mais faut que ce soit rentable : ça rend le code moins clair, et si t'as une seule instruction, bof, quel gain ?
de plus, ça occulte (comme le feu) les aides, le remplissage automatique

A+
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
Re : Règles Vba pour simplification du code

Re

pendant qu'on y est !
la même chose en deux lignes

Sheets("Business Document").Range("J16:J17").Copy
Sheets("Coordonnées Fournisseur").Range("A3").PasteSpecial Paste:=xlPasteValues, Transpose:=True

ou encore

Sheets("Coordonnées Fournisseur").Range("A3").Value = Sheets("Business Document").Range("J16").Value
Sheets("Coordonnées Fournisseur").Range("B3").Value = Sheets("Business Document").Range("J16").Value

A+
 

porcinet82

XLDnaute Barbatruc
Re : Règles Vba pour simplification du code

Bonjour a tous,

Oula, c'est vrai que hier soir j'ai fais le boulet, j'ai du corriger le code quand je l'ai tester et j'ai du faire un copier/coller du code du post precedent sans tout corriger :( . Je me trouve une excuse, partiel de 3h hier matin, donc plus assez de force pour reflechir :p

Donc merci Yeahou d'etre passé par la ;)

Au plaisir,

@+
 

TETRAM

XLDnaute Nouveau
Re : Règles Vba pour simplification du code

Bonjour le fil,

Désolé de ne répondre que maintenant mais je viens d'être informer de vos réponses.

Déjà merci pour votre intérêt.
efait j'ai mixer vos codes pour gagner du temps j'ai trouvé qd utilisant les deux j'allais plus vite.

@Gorfael
Toute cette macro fait du copier/coller donc au niveau clareté j'ai bien noté où j'envoie l'info avant chaque copier/coller. et je n'ai qu'une source, donc je suis bon du moins je le crois.
Mais je ne comprends pas pourquoi cela "occulte les aides, le remplissage auto"??

Pour info voilà les morceaux récurant de mon code,
Celui qui copie les données textes:
With Sheets("Business Document")
.Range("J16").Copy Destination:=Sheets("Coordonnées Fournisseur").Range("A3")
.Range("J17").Copy Destination:=Sheets("Coordonnées Fournisseur").Range("B3")
End With

Celui qui copie les zones de formules:
With Sheets("Contrat Client")
.Range("A2").Value = Range("D3").Value
.Range("B2").Value = Range("K5").Value
.Range("C2").Value = Range("D14").Value
End With

Et maintenant mon code s'exécute en très peu de temps. Et ce grâce à vous.
J'ai encore pas mal de boulot avant de boucler ma nouvelle version ;)
Mais je ne peux m'y remettre avant au moins 2 semaines donc je pense que je referais appel à vos services à ce moment ....

Sur ce à pluche.
 

ChTi160

XLDnaute Barbatruc
Re : Règles Vba pour simplification du code

[FONT=&quot]Darnel
[/FONT]
[FONT=&quot]bonsoir le fil
[/FONT]
[FONT=&quot]arff je vois qu'il y a du monde et pour coroborer ce que tous vous dite , comme beaucoup je cherche à simplifier le code que j'essaye de faire[/FONT]
[FONT=&quot]un exemple que l'on peut toujours enfin!!!! simplifier
[/FONT]
notre ami Gorfael à beaucoup plus haut simplifié la mise en forme des bordures d'une plage

Sub Macro3()
With Selection
.Font.FontStyle = "Italique"
'.Borders(xlEdgeLeft).Weight = xlThick
'.Borders(xlEdgeTop).Weight = xlThick
'.Borders(xlEdgeBottom).Weight = xlThick
'.Borders(xlEdgeRight).Weight = xlThick
'.ColorIndex = xlAutomatic

.BorderAround LineStyle:=xlContinuous,ColorIndex:=xlAutomatic, Weight:=xlThick
End With
End Sub

eh bien on peut encore simplifier par le biais de la méthode [FONT=&quot]BorderAround[/FONT]
[FONT=&quot]
[/FONT]
Pour ajouter une bordure autour d'une plage, aucunes bordures intérieures ne sera mises, utilisez la méthode BorderAround. Cette méthode permet de préciser directement la couleur, le style et la largeur de la bordure. Sa syntaxe est :
MaPlage.BorderAround(LineStyle, Weight, ColorIndex, Color)

arff en espèrant avoir pu efficacement participer à ce fil :p

bonne fin de Soirée
 
Dernière édition:

Gorfael

XLDnaute Barbatruc
Re : Règles Vba pour simplification du code

ChTi160 à dit:
[FONT=&quot]Darnel
[/FONT]
[FONT=&quot]bonsoir le fil
[/FONT]
[FONT=&quot]arff je vois qu'il y a du monde et pour coroborer ce que tous vous dite , comme beaucoup je cherche à simplifier le code que j'essaye de faire[/FONT]
[FONT=&quot]un exemple que l'on peut toujours enfin!!!! simplifier
[/FONT]
notre ami Gorfael à beaucoup plus haut simplifié la mise en forme des bordures d'une plage

Sub Macro3()
With Selection
.Font.FontStyle = "Italique"
'.Borders(xlEdgeLeft).Weight = xlThick
'.Borders(xlEdgeTop).Weight = xlThick
'.Borders(xlEdgeBottom).Weight = xlThick
'.Borders(xlEdgeRight).Weight = xlThick
'.ColorIndex = xlAutomatic

.BorderAround LineStyle:=xlContinuous,ColorIndex:=xlAutomatic, Weight:=xlThick
End With
End Sub

eh bien on peut encore simplifier par le biais de la méthode [FONT=&quot]BorderAround[/FONT]
[FONT=&quot]
[/FONT]


arff en espèrant avoir pu efficacement participer à ce fil :p

bonne fin de Soirée
Salut à tous
merci ChTi160.
ça fait un bout de temps que je cherche une instruction de ce type, mais j'aurais du la voir dans les propriétés automatique de Range.

Est-ce que par hazard quelqu'un connaîtrait un moyen de retrouver une info dans l'aide d'Excel, à partir d'un bout d'instruction ?
Rien ne me fais plus enrager que de savoir que j'ai déjà trouvé la solution dans l'aide, mais je ne me rappelle pas la démarche qui m'y a conduit.

Pour donner un exemple : tester l'existence d'une feuille. Je croyais me souvenir qu'on pouvait avec Is Nothing. Pas moyen de retrouver l'aide qui m'avait donné l'astuce => donc, je cherche de l'aide sur is Nothing ou Nothing ou Sheets ou Add (je crois que c'était en recherchant sur add).
Après avoir épuisé mes 3 jours de vivre et mes rations de survie, j'ai lâchement abandonné :)

Alors, si quelqu'un à une astuce pour aider dans l'aide, je suis preneur.

A+

PS Si je tenais le #censuré# qui a confié la recherche dans l'aide à Gaston Lagaffe....
 

Darnel

XLDnaute Impliqué
Re : Règles Vba pour simplification du code

Bonjour à tous


Bon ben, juste pour dire que je ne pensai pas générer un tel engouement pour ce fil

Chti, excellent ta solution, j'en prend note.

Je me demande si cela ne vaut pas le coup de faire, à l'instar de Staple1600 un fil sur le salon pour tous ces petits trucs de simplification, qui il faut l'admettre peuvent, les uns les autres être modidiés et améliorés à tours de bras.
Le problème en faisant cela serai peut etre que le nombre de posts réponses serait trop important pour un fil et certainement avec beaucoup de propositions pour une seule fonction...
Je pens que c'est à étudier ...
En tout cas, ça fait beaucoup de recherche sur le forum pour trouver la meilleur synthaxe pour chaque bout de code "commun"
A+
 

ChTi160

XLDnaute Barbatruc
Re : Règles Vba pour simplification du code

Salut Darnel
bonjour le fil
arff avant de partir au boulot

tu peux par exemple pour ce qui est du test sur l'existance d'une feuille faire une recherche sur le forum ( ajouter ou créer une feuille etc ) et ensuite regarder le code tu risques de tomber sur une procèdure ou le gars à inclue la vérification (par une fonction ou directement dans le code) de l'existance du nom de la nouvelle feuille créée et ainsi comprendre et archiver lol pour analyse

bonne journée
 

porcinet82

XLDnaute Barbatruc
Re : Règles Vba pour simplification du code

Bonjour le fil,

En plus de la solution de ChTi160, pour mettre un cadre autour d'une cellule, on peut egalement boucler de la manière suivante :
For i = 1 To 4
.Borders(i).Weight = xlThick
Next i


Avec quand i=
1 : bordure vertical gauche
2 : bordure vertical gauche
3 : bordure horizontal haut
4 : bordure horizontal bas
5 : trait diagonal coin haut gauche/coin bas droit
6 : trait diagonal coin bas gauche/coin haut droit

Voili, voilou,

@+
 

Darnel

XLDnaute Impliqué
Re : Règles Vba pour simplification du code

Bonjour à tous

Pour info s'il vous plait,

est il plus interessant d'utiliser :

Range("B14:D14").FormulaR1C1 = "=Fichesynthèse!RC"

Pour que la cellule de la feuille me renvoi la valeur située sur la même cellule d'une autre feuille, ou bien :

Range("B14:D14").Value = "=Fichesynthèse!RC"


Merci d'avance
 

Membres actuellement en ligne

Statistiques des forums

Discussions
312 379
Messages
2 087 765
Membres
103 662
dernier inscrit
rterterert