Case à cocher et macro
Bonjour,
J'ai récupéré sur ce forum une macro intéressante pour compiler sur un seul onglet les informations de tous les onglets présents. Je la mets ci-dessous :
Sub RECAP()
Dim dlgR As Integer, dlgi As Integer
Dim i As Byte
With Sheets("RECAP")
dlgR = .Range("A" & Rows.Count).End(xlUp).Row
.Range("A2:M" & dlgR).ClearContents
End With
For i = 1 To Worksheets.Count
If UCase(Sheets(i).Name) <> "RECAP" And (Sheets(i).Name) <> "Paramètre" Then
dlgR = Sheets("RECAP").Range("A" & Rows.Count).End(xlUp).Row
With Sheets(i)
dlgi = .Range("A" & Rows.Count).End(xlUp).Row
.Range("A2:M" & dlgi).Copy Sheets("RECAP").Range("A" & dlgR + 1)
End With
End If
Next
End Sub
J'aimerai ajouter sur l'onglet récapitulant les autres onglets, une colonne dans laquelle il y aurait une case à cocher et qui permettrait de rendre la ligne verte.
J'ai utilisé le développeur en insérant la case à cocher mais lorsque je relance la macro la mise en page qui fait que la ligne devient verte disparait.
Est-ce que vous auriez une solution pour que la macro ne supprime pas la mise en page ?
Merci d'avance,
Bonjour,
faire un copier valeur :
'remplacer :
.Range("A2:M" & dlgi).Copy Sheets("RECAP").Range("A" & dlgR + 1)
' par :
Sheets("RECAP").Range("A" & dlgR + 1).value = .Range("A2:M" & dlgi).value
eric
Bonjour
ça ne fonctionne pas malheureusement
Je vous envoie le fichier pour que vous puissiez voir mais cela supprime beaucoup d'info
Merci de votre aide
Peut-être même vous avez une solution plus adaptée.
En clair je veux qu'à chaque ligne s'affiche une case à cocher qui permettrait une fois cochée de passer la ligne en vert. Et j'aimerai que la feuille RECAP soit figée une fois que la case est cochée.
Merci de votre aide précieuse
Bonjour,
il manquait un .Resize() : Sheets("RECAP").Range("A" & dlgR + 1).Resize(dlgi - 1, 13).Value = .Range("A2:M" & dlgi).Value
c'est le pb quand il n'y a pas de fichier de travail pour tester
Pour le reste qq chose m'échappe.
Qu'est-ce que tu entends par "j'aimerai que la feuille RECAP soit figée une fois que la case est cochée." ?
Tu ne t'autorises à cocher qu'une seule ligne et ensuite que plus aucune action soit possible sur la feuille ?
Et on est d'accord que si tu relances la macro, l'état de la case à cocher doit être réinitialisé ?
Rien à voir mais une MFC sur une colonne complète c'est non. Beaucoup trop chronophage ces trucs là.
Il faudrait les supprimer avant une copie et les recréer après chaque collé sur le nombre de lignes nécessaire.
Enfin... si tu sais que tu n'auras jamais plus que qq centaines de lignes tu peux les laisser crées, mais réduites à la plage nécessaire
Je te joins le fichier pour que tu comprennes peut-être mieux.
En clair, les onglets en vert sont remplis par la main de l'homme. Et aucune information n'est supprimée de ces onglets normalement.
En rouge, dans l'onglet RECAP je souhaite que la totalité des onglets en vert soit récapitulée. Ce qui est le cas avec la Macro actuelle.
Cependant, sur l'onglet RECAP, encore une fois la main de l'homme doit intervenir au niveau de la colonne "Règlement" afin d'indiquer 'Oui' ou de cocher une case pour que la ligne soit mise en verte.
Ce que je veux c'est qu'une fois cette ligne est passée en règlement et donc en vert, qu'elle ne puisse plus être modifiée lorsque la macro est relancée. Aujourd'hui, avec la Macro actuelle, je coche la case et la ligne passe en vert, mais lorsque la macro est relancée la ligne redevient sans couleur et la coche est décochée.
Merci de ton aide
Es-tu sure que la position de ligne ne changera jamais ou il faut ajouter une mémorisation ?
Sans clé unique de l'enregistrement ça sera plus compliqué..
En attendant, sans mémo.
Ni de cases à cocher, les objets sur feuille sont trop mal gérés, surtout s'ils deviennent nombreux (des fois plus de 10 et il commence à merdouilller)
Un double-clic en H fait une bascule. Ajout/retrait couleur et "oui"
J'ai modifié ta macro avec un .Clear au lieu du .ClearContents
Tu auras à reconstruire les MFC à chaque ajout
eric
bonsoir Eriiic, Lirane13,
Tu auras à reconstruire les MFC à chaque ajout
Sub Modifier_MFCs_Plages()
Dim c, cLast, CF, cAr, cAr2, UN As Range
With Sheets("recap")
.Range("3:" & Rows.Count).FormatConditions.Delete 'supprimer toutes les MFC à partir de la ligne 3
.Range("I1:I2").Resize(, Columns.Count - .Range("I1").Column + 1).FormatConditions.Delete 'supprimer toutes les MFCs à droite de I1:I2
Set c = .Cells 'la feuille complète
Set cLast = .Range("A" & Rows.Count).End(xlUp).Offset(100) 'on va appliquer les MFCs jusqu'à la dernière ligne + 100 lignes supplémentaire
For Each CF In c.FormatConditions 'boucler les MFCs
On Error Resume Next
s = "": s = CF.Formula1 'verifier la formule de la MFC, est-elle correcte ?
On Error GoTo 0
If Len(s) > 0 Then
Set UN = Nothing 'reset UN
For Each cAr In CF.AppliesTo.Areas 'boucles les areas de cette MFC
Set cAr2 = cAr.Resize(cLast.Row - cAr.Row + 1) 'agrandir l'area
If UN Is Nothing Then Set UN = cAr2 Else Set UN = Union(UN, cAr2) 'ajouter à l'UN
'MsgBox cAr.Address & vbLf & cAr2.Address & vbLf & UN.Address
Next
If Not UN Is Nothing Then CF.ModifyAppliesToRange UN 'si UN existe modifier la plage de la MFC
End If
Next
End With
End Sub
Comme çà, vous avez vos MFC pour les lignes actuelles + 100 lignes supplémentaires
ça ne marche pas :(
Merci de votre aide en tout cas je vais réfléchir à une autre manière de faire
Bon courage
ça ne marche pas eriiic ou ça ne marche pas bart ?
Et ça marche pas ne veut rien dire....
Pour ma part j'ai testé avant de déposer le fichier et il fonctionne très bien