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

Salut à tous
Darnel un peu ardu ton code : je comprends pas tout
Code:
ActiveSheet.Unprotect
Range("B18:D18").FormulaR1C1 = "=Fichesynthèse!RC"
Range("E18").FormulaR1C1 = "=Fichesynthèse!RC"
Range("F18:H18").FormulaR1C1 = "=Fichesynthèse!RC"
ActiveSheet.Protect
ce que je comprends :
tu enlèves la protection de la feuille active
tu veux définir des règles de validation sur 3 plages "B18 : D18", "E18" et "F18 : H18" (cellules fusionnées)

- le contenu est une formule => tu ne peux pas faire une règle de validation sur une formule : c'est un non-sens
Le but d'une règle de validation est de ne pas pouvoir entrer une valeur différente de celles autorisées et de te prévenir
Là, avec ton cas, tu entres une valeur erronée en E8 de la feuille "Fichesynthèse" et tu n'as pas d'alerte
Tu dois faire ta règle sur la cellule où tu entres les données, pas sur les dépendants

Mais, j'avoue un manque de connaissances sur la validation et l'aide Excel ne permet pas de s'en sortir. Donc, je suis peut-être à coté de la plaque

Dans tous les cas, le .Delete supprime la règle de validation précédente => tu peux en supprimer une sur 2

Après, il faut faire des essais

A+
 
Dernière édition:

porcinet82

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

Bonjour ou re,

Pour Darnel, je suis d'accord avec Gorfael, je ne saisis pas tout non plus.

Pour Tetram, si tu fais un copier/coller sur 5 onglet et qu'il s'agit de les coller au meme endroit sur les 5 onglet, tu peux faire une boucle. Mets ton code, je pense pouvoir te faire maintenant.

@+
 

Gorfael

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

TETRAM à dit:
RE:
Pour ma part j'utilise énormément le code suivant car j'intégre des données d'un formulaire.

Sheets("Business Document").Select
Range("J5").Select
Selection.Copy
Sheets("Tarification").Select
Range("D3").Select
ActiveSheet.Paste
Selection.UnMerge

Pensez-vous qu'il soit possible de le simplifier??
Salut à tous
Salut le Troll Tëtram (comme disait Louis Jouvet)

Sheets("Business Document").Range("J5").Copy destination := _
Sheets("Tarification").Range("D3")

A+

PS Si t'as compris le jeu de mot du sage Ryska Fuquatou, ça m'interesse, c'est le seul que je ne trouve pas
 

TETRAM

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

Salut à tous,

Désolé de ne répondre que maintenant mais j'étais en WE et pas d'ordi.

Merci pour votre aide j'essaye ton code dès demain Gorfael...
Et pour le leu de mot il est assez simple Il s'agit du mage Rista (T et non K) Fuquatou donc cella donne Fuqua (les dragées libératoire) Tourista (la célèbre délivrance...).

Allez à plus et merci
 

Darnel

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

Merci à vous pour toutes vos réponses.

Pour mon code, je vous explique rapidement le principe :

J'ai une Fiche de synthèse qui reprend des données que j'ai déjà saisi. Uniquement là pour visionner les info saisies, et imprimer

Ensuite,j'ai une fiche de modification qui est identique à la feuille "fiche de synthèse", sauf que je rempli les champs de saisie de cette feuille par le biais d'une macro (cf, extrait mis dans post précédant), pour qu'ils me renvoient les valeurs de la fiche de synthèse.

Enfin je peux modifier n'importe quelle cellule en tapant ce que je veux, je valid et les anciennes données sont écrasées par les nouvelles saisies.


Mon code a donc pour but de remplir, à chaque fois que je veux modifier une fiche, les champs de la feuille modif par la formule suivante :ActiveCell.FormulaR1C1 = "=Fichesynthèse!RC"
Or dans le cas que je vous ai envoyer, le problème, c'est que normalement, les cellules sont validées pour faire référence à une liste nommée "clauses", mais qui n'est pas restrictive. Autrement dit, je peu selectionner un élément de la liste pour remplir la fiche, comme je peux tapper ce que je veux dans la cellule.

Voilà j'espère que vous avez compris, car je ne peu malheureusement pas vraiment vous envoyer d'exemple, le fichier total, dénuer d'infos important faisant plus de 4 Mo
 

TETRAM

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

Bonjour le fil,

@Porcinet voilà mon code jette un oeil si tu peux y faire qqchose mais je doute. merci d'avance.


@Darnel je comprend mieux ton envie d'alléger ton code. moi je ne peux rien pour toi et j'en suis désolé car j'essaye de monter un classeur avec les mêmes fonctionnalités que toi mais pas avec le même succès... ;)

Merci de votre aide.
 

Pièces jointes

  • Base_Test V1.1.3.zip
    35.8 KB · Affichages: 30
  • Base_Test V1.1.3.zip
    35.8 KB · Affichages: 38
  • Base_Test V1.1.3.zip
    35.8 KB · Affichages: 33

Darnel

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

Re

Pour ma part, je suis parvenu à réduire mon code. J'ai gagner un peu en temps d'execution ainsi qu'un petit peu (après avoir revu tout mes codes) en taille de fichier ( -40 Ko environ )
voilà

TETRAM, courage pour ton fichier,
si t'as des problèmes au niveau de la conception de ton fichier n'hésite pas.
 

TETRAM

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

Merci Darnel pour tes encouragements,

Moi aussi j'ais réduit un peu mon code ce qui fais gagner en vitesse d'execution ce qui est agréable.

Pour le reste, je vais faire de mon possible....
à Pluche
 

porcinet82

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

Salut,

Comme j'ai 5 min, je viens de regarder le code de Tetram. Tu peux facilement le réduire en evitant tout les copier/coller, en utilisant un truc de ce genre (a condition que tu ne veuille garder que la valeur et pas la valeur + la mise en forme) :
Public Sub alim_Businesslist()
'du code

If Range("X1") <> "ok" Then
Sheets("Coordonnées Client").Select
Rows("3:3").Insert shift:=xlDown

Sheets("Business Document").Select
With Sheets("Coordonnées Client").Select
.Range("A3").Value = Range("D13").Value
.Range("A3").UnMerge
.Range("B3").Value = Range("D14").Select
.Range("A3").UnMerge
'...
End With

Range("R3").FormulaR1C1 = "= ""C"" &LEFT(RC[-9],5)"
For Each element In Selection
element.Value = UCase(element.Value)
Next element

'Mise en forme

'du code
End Sub

@+
 

TETRAM

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

Salut Porcinet82

Je savais que je n'étais pas très fort mais à ce point je suis bluffé... :)
Je ne sais pas utiliser les with mais là il va falloir que je creuse vraiment car je crois que tu viens d'alléger mon code d'un bon morceau...

Je vais tester cela Merci mille fois..
 

TETRAM

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

Salut à tous,

@Porcinet82
chez moi ton bout de code ne marchait pas tel quel donc voici celui que j'ai utilisé
If Range("X1") <> "OK" Then
Sheets("Coordonnées Client").Select
Rows("3:3").Insert shift:=xlDown
With Sheets("Business Document").Select
Range("D13").Copy Destination:=Sheets("Coordonnées Client").Range("A3")
Range("D14").Copy Destination:=Sheets("Coordonnées Client").Range("B3")
End With

Bon je te remercie car j'ai gagner pas mal de temps et de ligne.
Mais je ne comprends pas encore bien comment marche les with

Encore merci ca marche...
 

porcinet82

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

re, Salut Yeahou,

Effectivement, mon code merdouille quelque peut, mais tu aurais pu le modifier pour qu'il focntionne Yeahou, tu ne crois pas ??? Ca m'aurais evité un peu de travail supplémentaire :p
D'autant que j'avais fait la modif lorsque j'ai testé le code et j'ai oublié de modifier dans le post.

Donc pour que ce la fonctionne (et ca n'a pas l'air de copier les formules), il faut simplement enlever le .Select a la fon de la ligne du With, ce qui donne :
Public Sub alim_Businesslist()
'du code


If Range("X1") <> "ok" Then
Sheets("Coordonnées Client")
Rows("3:3").Insert shift:=xlDown

Sheets("Business Document").Select
With Sheets("Coordonnées Client").Select
.Range("A3").Value = Range("D13").Value
.Range("A3").UnMerge
.Range("B3").Value = Range("D14").Select
.Range("A3").UnMerge
'...
End With

Range("R3").FormulaR1C1 = "= ""C"" &LEFT(RC[-9],5)"
For Each element In Selection
element.Value = UCase(element.Value)
Next element

'Mise en forme

'du code
End Sub

Voili, voilou,

@+
 

TETRAM

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

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.
 

Statistiques des forums

Discussions
312 387
Messages
2 087 856
Membres
103 671
dernier inscrit
rachid1983