Simplification de procèdures

  • Initiateur de la discussion Initiateur de la discussion br44
  • 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 !

br44

XLDnaute Impliqué
Bonjour le forum


voilà après avoir enregistré ma procèdure je me suis apperçu qu'elle ètait peut-être un lourde (168ko) .

je voudrais savoir si l'on peut allerger des procèdures en faisant en sorte que l'on joue sur des plages au lieu de cellules .

Exemple :
procèdure 1
If Range("A1").Value=Sheets("Feuil1).Range("A1")+Sheets("Feuil2").Range("C5").value
End If

Cette formule ètant valable pour les cellules consernées allant de "A1:A6"

Procèdure 2

je doit séparer mes clients en deux groupes mais pour ce faire j'ai une mis condition IF presque pour chaqu'un deux en fonction de leur code .Est-il possible d'alleger car dans l'exmple je n'est que 15clients (pour essais) ,mais le fichier final en aurrais une centaines ?

Espèrant avoir été claire dans ma demande je dis à bientôt sur ce fil et vous remercie par avance .Ci-joint les procèdures : BR44
 

Pièces jointes

Re : Simplification de procèdures

br44 à dit:
re: Salutations à Gorfael ,le forum

En rèponse a ton dernier message et aprés avoir tester t'as solution :

Donc ton instruction devra sans doute avoir un style du genre :
Y=iif(.name = "Facture",30,50)
For I = 2 To .Range("A1:G29").Rows.Count
.Rows(I).RowHeight = Sheets("Détail").Rows(I+Y).RowHeight
ou
.Rows(I).RowHeight = Sheets("Détail").Rows(I*Y).RowHeight


j'ai le regret de t'informer que cela ne fonctionne pas .

la hauteur de mes lignes ne se modifient pes (toujours 12.75 ,sur la deuxièmes copies au lieu de 24.75 hauteur des lignes pour la plage consernée ("A1:G29").

Moi au départ j'avais mis un "UsedRange " à la place du"Range("A1:G29")",qui fonctionne mais cela mets une hauteur de lignes de 24,75 sur toute la page ,ce qui et logique puisque cet la première hauteur enregistrée lors de la copie .

Moi je ne vois pas d'autres solutions à moins quand s'èparants la varibles lignes de la variable colonnes ,mais je ne voie pas du tout comment faire ?

En tout les cas merçi de t'on aide et des explications qui les accompagnes .
A bientôt Br44

A P.S: j'ai bien noter pour le réponses à la 2 ème question . Je ferais des recherches plus tard . Merçi BR44
Salut
Pour avoir une chance que ça fonctionne, il faudrait que je sache exactement ce que tu veux faire avec ton code => c'est pour ça que j'ai mis "du style", parce que comme je ne sais pas ce que dois faire la macro, je ne sais pas la construire.
Dans ton 1er code, I évoluait et pas Y => autant remplacer Y par sa valeur.
Mais si tu as mis une variable, c'est donc que tu veux la voir évoluer d'une manière différente de I
Tu peux soit la redéfinir en fonction de I
soit mettre ta formule à l'intérieur de la boucle
Code:
y = 1 
For I = 2 To .Range("A1:G29").Rows.Count le Problème est là 
.Rows(I).RowHeight = Sheets("Détail").Rows(y).RowHeight 
Next 
y = IIf(y > 15 / 2, 1, y + 1)
serait remplacé par
Code:
y = 1 
For I = 2 To .Range("A1:G29").Rows.Count le Problème est là 
.Rows(I).RowHeight = Sheets("Détail").Rows(y).RowHeight 
y = IIf(y > 15 / 2, 1, y + 1) 
Next
=> mais comme tu as parlé de pas de 30 ou 50, je ne sais pas où tu veux en venir. Donc explique le problème et on t'aidera à le résoudre
A+
 
Re : Simplification de procèdures

Rebonjour Gorfael ,le forum

Je viens de lire t'on dernier message et je vais tenté de t'expliquer . Dans la macros qui suis :

With Sheets("Récap2")
For I = 1 To .Range("A1:G29").Columns.Count
.Columns(I).ColumnWidth = Sheets("Détail").Columns(I).ColumnWidth
Next

y = 1
For I = 2 To .Range("A1:G29").Rows.Count
Rows(I).RowHeight = Sheets("Détail").Rows(y).RowHeight
Next
y = IIf(y > 15 / 2, 1, y + 1)
End With

Le premier "For i" détermine la largueur des colonnes allant de "A:G" sur la feuille "Récap2" (idem pour la "récap1") qui est de taille indentique à ma feuille "Détail" . Là il n'y à aucun problème puisque celà ne change pas .

Mais le deuxième "For y" lui déterminie la hauteur des lignes allant de"1:29" sur la "Récap2"(idem pour la "récap1") qui lui est indentique à la hauteur des lignes "1:29" de la feuille "Détail" .Là ou cela bloc c'est que ma hauteur de lignes elle change puisque la plage de copier se décale de 30 lignes en "Récap2" puisqu'elles se place en dessous de la première copie de la feuille"Détail" et de 50 lignes en "Récap1" puisqu'elle se place en dessous de la copie de la feuilles "Facture" .

Ce que je voudrais et que le "For y" s'applique à chaques fois que la feuille "Détail" est copiée .

Tu trouveras ci-joint un petit ficher contenant mes deux feuilles "Récap"
avec des explications pour te donner une idée .

Sur ce je vous dis à plus sur se fil et vous remercie d'avance du coup de main . Br44
 

Pièces jointes

Re : Simplification de procèdures

Bonsoir Lacorse33,Gorfael ,le forum


Lacorse 33 : En réponse à ton message que je viens de regarder .Je tien te remercier d'avoir répondu sur ce fil .

en ce qui conserne le fichier que tu ma envoyer je viens de le tester et malheureusement cela ne vas pas convenir .

Oui je connaisait cet possibiliter mais elle ne me convient pas pour la raison suivantes :

la procédure par "UsedRange" formates toutes les lignes de la pages hors j'ai deux formats différants ,donc la deuxième copies est modifiée aussi .

Je le signalais dans mon message d' hier poster à 14h21

Je suis vraiment désoler que cela ne conviennent pas .

je reflechit à une autres possibilitée mais je ne sais pas encore comment je pourrait tourner ça ?

Hypothése de travail : Au lieu de prendre "y" comme variable de boucle pourquoi ne dèclarer la plage comme une variable à part entière et ensuite la mettres en boucle ce qui donnerais un truc du style :

'Déclare la variable Y
Dim y as Range
'Définit la variable Y
Set y = Range"(A1:G29")
'Définit la hauteur de lignes
Y= row:24.75

With "Récap2"

For i = 1 To .Y Step 30.Rows.Count
.rows(i).Rowheight= Sheets("Détail").Rows(i).RowHeight
Next
End With
End Sub

je ne sais pas si s'est réalisable où si l'écriture est correct mais bon c'est une idée ?
Si vous pouvez m'aider à creuser serais bien .En vous remerciant par avances je vous dis à plus sur ce fil . Br44
 
Re : Simplification de procèdures

salut à tous

Bon on va poser les valises et reprendre le problème en français
Si j'ai bien compris :
Feuille "Détails"
Les lignes de 1 à 29 te servent de référence hauteurs

Feuille "Récap 1"
Les lignes de 1 à 29 doivent avoir la même hauteur que celles de référence
Les lignes de 79 à 107 doivent avoir la même hauteur que celles de référence

Feuille "Récap 2"
Les lignes de 1 à 29 doivent avoir la même hauteur que celles de référence
Les lignes de 30 à 58 doivent avoir la même hauteur que celles de référence

C'est plus clair
Je ne m'occupe que de la partie problèmatique

With "Récap2"
y=0
Do
For i = 1 To 29
.rows(i+y).Rowheight= Sheets("Détail").Rows(i).RowHeight
Next i
y=iff(.name="Récap1",Y=Y+79;Y=y+30)
Loop until (.name="Récap2" and Y>30) or Y>79
End With
End Sub

Désolé du retard, le forum me renvoi des notification d'Août, mais pas celles actuelles

=>le Y=Y+valeur, pourrait être remplacé en fixant directement la valeur, mais il faudrait faire attention aux conditions de sortie de boucles. Comme ça, c'est plus simple.

Normes allemandes.. euh normalement, ça devrait être plus mieux bien comme résultat
A+
 
Re : Simplification de procèdures

Bonjour Gorfael ,LaCorse33 et tout le forum

Gorfael
Juste ces quelques mots pour accuser récption de ton dernier message .Le temps de tester et je te tient au courant du résultat . Merci pour tout à plus
BR44
 
Re : Simplification de procèdures

Rebonjour à toutes et à tous

Bon je viens d'essayer t'as dernière procédure ,mais j'ai un petit souci à ce niveau de :

y=iff(.name="Récap1",Y=Y+79;Y=y+30)

J'ai un message qui me dit :Sub ou Fonction non définit pour le "iff" peut -tu me donnée la bonne varible à déclarer s.v.p merci d'avance .

En te remerciant par avance et milles excuses pour le dérangement à Bientôt Br44
 
Re : Simplification de procèdures

br44 à dit:
Rebonjour à toutes et à tous

Bon je viens d'essayer t'as dernière procédure ,mais j'ai un petit souci à ce niveau de :

y=iff(.name="Récap1",Y=Y+79;Y=y+30)

J'ai un message qui me dit :Sub ou Fonction non définit pour le "iff" peut -tu me donnée la bonne varible à déclarer s.v.p merci d'avance .

En te remerciant par avance et milles excuses pour le dérangement à Bientôt Br44
Salut à tous
Y a mon clavier y fait rien que m'embêter

Il met iff au lieu de iif

désolé, quoique comme je dis souvent :
ça servirait à quoi que je soit bête si je vous le montrais pas, hein ?

donc remplacer
y=iff(.name="Récap1",Y=Y+79;Y=y+30)
par
y=Iif(.name="Récap1",Y=Y+79;Y=y+30)
 
- 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

Discussions similaires

Réponses
2
Affichages
823
Réponses
1
Affichages
1 K
J
Réponses
22
Affichages
3 K
jui42
J
R
Réponses
3
Affichages
4 K
R
M
  • Question Question
Réponses
4
Affichages
1 K
Makovitch
M
N
Réponses
6
Affichages
2 K
D
Réponses
49
Affichages
9 K
D
Réponses
1
Affichages
1 K
J
  • Question Question
Réponses
6
Affichages
936
J
J
Réponses
9
Affichages
3 K
joaoratao
J
Retour