Hola absolument pas de soucis!!!
J'ai besoin d'aide je ne vais pas imposer de délais!!! merci encore à toi
Version imprimable
Hola absolument pas de soucis!!!
J'ai besoin d'aide je ne vais pas imposer de délais!!! merci encore à toi
Bonjour,
Voilà, en version modulable et plus rapide
Avec le fichierCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 Sub MFC_Chutes() Dim Couleur As Long Dim DerLig As Long, DerCol As Long, Col As Long, Compteur As Long Dim NbGaines As Long Dim NbEtages As Byte Dim Plage As Range Dim Rng As Excel.Range, Fc As Excel.FormatCondition Application.ScreenUpdating = False 'On détermine le nombre d'étages, donné dans la cellule A12 NbEtages = Replace([A12], "R+", "", 1, 2) 'On détermine le nombre de gaines, donné dans la cellule A12 DerCol = [Xfd2].End(xlToLeft).Column NbGaines = Application.WorksheetFunction.Max(Rows(2)) 'Range("C5:GO134").FormatConditions.Delete 'on efface les MFC précédentes DerLig = [A1000].End(xlUp).Row Range(Cells(5, "C"), Cells(DerLig, DerCol + 6)).FormatConditions.Delete 'on efface les MFC précédentes For C = 4 To 8 'N° de la colonne traitée 'préparation des paramètres en fonction de la colonne traitée Select Case C Case Is = 4 'MFC EU Couleur = RGB(255, 128, 255) 'Couleur à appliquer Case Is = 5 'MFC EV Couleur = RGB(0, 128, 0) Case Is = 6 'MFC EP Couleur = RGB(0, 128, 224) Case Is = 7 'MFC ECS Couleur = RGB(192, 32, 64) Case Is = 8 'MFC VMC Couleur = RGB(160, 64, 255) End Select '******************** Application des MFC *************************** Col = C For Compteur = 1 To NbGaines Set Rng = Range(Cells(5, Col), Cells(DerLig - 9, Col)) 'Plage sur laquelle sera recopier la MFC Set Fc = Rng.FormatConditions.Add(Type:=xlExpression, Formula1:="=" & Cells(5, Col).Address & "=1") 'Formule de la MFC With Fc.Interior .PatternColorIndex = xlAutomatic .ThemeColor = xlThemeColorAccent2 .Color = Couleur End With Col = Col + 7 Next Compteur, C End Sub
Pièce jointe 432009
Cdlt
Bonjour Arturo,
Je suis désolé je ne sais pas si le problème vient de chez moi mais je n'ai pas l'impression que ça ai fonctionné...
Je ne comprends pas ce qui se passe en A12... Et les MFC ne fonctionne plus...
Encore merci du temps que tu passe sur mon fichier
Bonsoir,
Voilà avec le petit correctif
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 Sub MFC_Chutes() Dim Couleur As Long Dim DerLig As Long, DerCol As Long, Col As Long, Compteur As Long Dim NbGaines As Long Dim NbEtages As Byte Dim Plage As Range Dim Rng As Excel.Range, Fc As Excel.FormatCondition Application.ScreenUpdating = False 'On détermine le nombre d'étages, donné dans la cellule A12 NbEtages = Replace([A12], "R+", "", 1, 2) 'On détermine le nombre de gaines, donné dans la cellule A12 DerCol = [Xfd2].End(xlToLeft).Column NbGaines = Application.WorksheetFunction.Max(Rows(2)) 'Range("C5:GO134").FormatConditions.Delete 'on efface les MFC précédentes DerLig = [A1000].End(xlUp).Row Range(Cells(5, "C"), Cells(DerLig, DerCol + 6)).FormatConditions.Delete 'on efface les MFC précédentes For C = 4 To 8 'N° de la colonne traitée 'préparation des paramètres en fonction de la colonne traitée Select Case C Case Is = 4 'MFC EU Couleur = RGB(255, 128, 255) 'Couleur à appliquer Case Is = 5 'MFC EV Couleur = RGB(0, 128, 0) Case Is = 6 'MFC EP Couleur = RGB(0, 128, 224) Case Is = 7 'MFC ECS Couleur = RGB(192, 32, 64) Case Is = 8 'MFC VMC Couleur = RGB(160, 64, 255) End Select '******************** Application des MFC *************************** Col = C For Compteur = 1 To NbGaines Set Rng = Range(Cells(5, Col), Cells(DerLig - 9, Col)) 'Plage sur laquelle sera recopier la MFC Cells(5, Col).Select Cel = Split(ActiveCell.Address, "$")(1) & "5" Set Fc = Rng.FormatConditions.Add(Type:=xlExpression, Formula1:="=" & Cel & "=1") 'Formule de la MFC With Fc.Interior .PatternColorIndex = xlAutomatic .ThemeColor = xlThemeColorAccent2 .Color = Couleur End With Col = Col + 7 Next Compteur, C End Sub
Attention pour détecter les étages, je lis la cellule A12, dont je retire les 2 premiers caractères "R+". il est donc impératif que le N° de l'étage soit écrit toujours sous cette forme "R+XX", pas d'espace entre le + et le N°.
Cdlt
Bonjour,
je suis têtu... :-)
Encore une fois pourquoi cette boucle compteur qui ne sert à rien ?
eric
Bonsoir Eriiic,
Dans le raisonnement, sur 7 colonnes que constitue une gaine, on applique une MFC différente sur 5 colonnes, la première et la dernière ne sont pas concernées, donc pas de MFC. On répète ce cycle autant de fois qu'il y a de gaine.
D'accord pour améliorer le code, mais je ne vois pas.
Cdlt
Dans une bouclesi on ne se sert pas de Compteur on fait x fois la même chose.Code:For Compteur = 1 To NbGaines
Une MFC s'applique sur la plage choisie quelque soit le nombre de lignes ou de colonnes.
Le tout est que les références absolues/relatives soient correctes pour le résultat voulu.
eric
Bonjour Eriiic,
Le raisonnement suivi:
Je boucle 5 fois sur la première gaine, une pour chaque couleur (MFC avec formule unique pour les 5 colonnes, mais couleur différente).
J'applique la MFC sur la 1ère colonne entière en 1 seule fois( pas de boucle sur les lignes), puis via la boucle interne "Compteur", sur les autres gaines, soit toutes les 7 colonnes.
Je recommence le cycle pour la couleur suivante.
Une MFC s'applique sur la plage choisie quelque soit le nombre de lignes ou de colonnes. C'est bien ce que je fais, j'applique la MFC sur la totalité de la colonne en 1 seule fois, je ne boucle pas sur chaque ligne, ceci est donné par:
Par contre, je ne vois toujours pas comment je peux me passer de la boucle interne "Compteur" pour reproduire chaque MFC sur les autres colonnes non contiguës et autant de fois qu'il y a de gaines. Mais je suis ouvert à toutes propositions pour améliorer le code.Code:Set Rng = Range(Cells(5, Col), Cells(DerLig - 9, Col)) 'Plage sur laquelle sera recopier la MFC
Cdlt
Bonjour vous deux!
Merci encore pour votre aide!
Je vous lis tout les deux et j’essaye de suivre!
Arturo, pour le nombre d'étage en A12 c'est bien ce que j'avais compris mais je ne comprends pas ce que cela change sur la feuille... Peut importe le nombre d'étage que je rentre je ne vois pas de modification...
Eric je suis toujours preneur de conseil mais je suis désolé je ne comprend toujours pas...
Avec ma version barbare de VBA j'essayais d’insérer un niveau avec:
Et du coup mon problème était qu'il n'y avais pas de dissociation de la MFC entre l'étage copié et l'étage insérer... De plus je n'arrivais pas à incrémenter le nombre de niveau proprement. Je m'explique j'y arrive avec une fonction décaler mais ça demande une liste quelque part sur la feuille.Code:
1
2
3
4
5
6 Sub Inserer_niveau() Rows("115:125").Select Selection.Copy Selection.Insert Shift:=xlDown Application.CutCopyMode = False End Sub
Le deuxième problème de ce fonctionnement de copier/coller, est que (et c'est logique) cela n’agrandit pas la plage de travail de la macro...
Bonjour,
Qu'entendez vous par "je ne vois pas de modification". Je rappelle que les dernières lignes à partir de "TOTAUX" ne sont pas incluses dans la MFC. Si elles doivent l'être, il suffit de supprimer le "-9" dans la ligne ci-dessous.Citation:
Peut importe le nombre d'étage que je rentre je ne vois pas de modification...
A la relecture de votre message, je crois comprendre que vous voulez une zone sans MFC entre chaque étage. est-ce bien cela?Code:Set Rng = Range(Cells(5, Col), Cells(DerLig - 9, Col)) 'Plage sur laquelle sera recopier la MFC
Pour insérer un étage
Code:
1
2
3
4
5
6
7 Sub Inserer_un_niveau() Application.ScreenUpdating = False Rows("5:15").Select ' sélection de la ligne 5 à 15 Selection.Copy Selection.Insert Shift:=xlDown ' insertion au même emplacement, ce qui décale la précédente sélection vers le bas [A12] = "R+" & Replace([A23], "R+", "", 1, 2) + 1 'on numérote le nouvel étage End Sub
Re bonjour,
Je me suis permis de reprendre votre message pour répondre de façon plus clair et plus efficace.
Peut importe le nombre d'étage que je rentre je ne vois pas de modification... Qu'entendez vous par "je ne vois pas de modification"--> Quand je rentre par exemple R+6 en A12 ou R+2 ou R+10 je ne vois pas de modification de traitement dans le tableau. C'est à dire que le tableau réagit de la même façon: les formules et les MFC s'applique à tout les étages. Ne serait-il pas plus simple d'ajouter et supprimer des étages/gaines en fonction des besoin?.. Je rappelle que les dernières lignes à partir de "TOTAUX" ne sont pas incluses dans la MFC. Si elles doivent l'être, il suffit de supprimer le "-9" dans la ligne ci-dessous.Non en effet les MFC ne doivent pas s'appliquer sur ces lignes.
"A la relecture de votre message, je crois comprendre que vous voulez une zone sans MFC entre chaque étage. est-ce bien cela?"Non je ne souhaiterais pas de zone sans MFC entre chaque étage. Je ne sais pas si c'est du a cela mais les MFC ne s'applique plus qu'au cellule contenant les 1 et non plus au plage comme avant?
Dans le code il y a également cette ligne :
Code:
1
2
3 'On détermine le nombre de gaines, donné dans la cellule A12 --> Je suppose que ce n'est pas dans la cellule A12 mais dans la dernière cellule remplis de la ligne 2? DerCol = [Xfd2].End(xlToLeft).Column NbGaines = Application.WorksheetFunction.Max(Rows(2))
Bonjour,
Je répète donc ma question.Citation:
via la boucle interne "Compteur", sur les autres gaines
A quel endroit dans la boucle te sers-tu de Compteur pour qu'elle serve à quelque chose ???
Je dois avoir du caca dans les yeux car je ne le vois pas.
eric
Re bonjour Eric,
Sauriez-vous écrire le code sans le compteur? Pour moi il permet de répéter la MFC sur les groupes de 5 colonnes non contigu.
Si je comprends bien votre remarque, il n'y à rien à dénombrer en soit alors pourquoi utiliser la fonction compteur?
Vous voulez dire que le tableau se reconstruise suivant la valeur que vous avez saisi en A12, par exemple si en A12 il y a R+10 et qu'à la place vous saisissez R+2 , tous les étages au delà de 2 doivent disparaître, ou inversement, si en A12 il y a R+2 et que vous saisissiez R+10, il faut recréer le tableau avec 8 étages supplémentaires? est-ce bien cela?Citation:
Quand je rentre par exemple R+6 en A12 ou R+2 ou R+10 je ne vois pas de modification de traitement dans le tableau
d'après le fichier d'origine, la MFC ne s'applique que si la cellule =1, Aurai-je loupé quelque chose?Citation:
Je ne sais pas si c'est du a cela mais les MFC ne s'applique plus qu'au cellule contenant les 1 et non plus au plage comme avant?
ça serai l'idéale mais j'avoue que j'ai supposé ça trop compliqué à faire (surtout complétement en dehors de ma portée...). Du coup je pensais plus supprimer ou ajouter niveau par niveau et gaine par gaine...
Bon, j'ai dû mal à comprendre qu'en vous dîtes rien ne se passe quand vous modifiez la cellule A12, Redéposez le fichier et expliquez clairement ce que vous voulez faire et ce que vous devez obtenir, sinon on tourne en rond et on avance pas.
Je suis désolé si je ne suis pas assez clair... Je vais essayer de combler les trous:
L’idéal serai d'avoir un tableau qui avec deux messages box : nb d'étages et nombre de gaine créer le tableau. Sauf que je ne sais pas du tout faire ça, du coup j'ai voulu créer le tableau et l'adapter en chemin.
Voici la V2 du fichier.
Sur ce fichier les MFC fonctionne parfaitement bien (Déjà un énorme merci pour ça!!)
J'y ai rajouté des boutons de commande : Ajouter un niveau / Supprimer un niveau + Ajouter une gaine / Supprimer une gaine.
Pièce jointe 432266
Si le principe de message box n'est pas possible mon souhait serai de pouvoir rajouter un niveau ou d'en supprimer un (car sinon les formules s’applique à tout les niveaux). Tout en faisant en sorte que le numéro de chaque étage se mettent à jour en fonction de l'ajout ou de la suppression. En sachant que les formules du premier et dernier niveau (ici R+10 et RDC) sont différentes des niveaux "courant".
Et de même pour les gaines.
J'espère avoir été plus clair qu’auparavant...
Déjà, en ouvrant votre nouveau fichier, je m'aperçois que vous n'avez pas recopié la dernière macro MFC_Chutes en remplacement de la précédente .
Je vous retourne votre fichier avec la dernière macro.
Pièce jointe 432279
Pour le reste, je regarde
Je n'avais pas repris le nouveau fichier car les MFC ne s'appliquait plus qu'au cellule contenant les "1" et non plus a toute plage autour.
exemple: B8 =1 sur le fichier précédent la MFC s’appliquait sur la plage E5 à E15 alors qu'ici elle ne s'applique que sur E8.
Encore une fois merci