Garder cellule après insertion/suppression lignes colonnes

Franck -  
ccm81 Messages postés 11033 Statut Membre -
Bonjour,

J'ai créé des VBA avec des codes qui reprennent des cellules par exemple [C4]
Mais si j'ajoute une ligne avec ma cellule devient C5 et le VBA garde le C4.
Même chose pour les suppressions.

Quelle est la soluce ?

28 réponses

Franck
 
Certes, mais je ne veux pas que ce soit la celulle de gauche de ma checkbox.
On peut choisir une cellule sans que ce soit celle de gauche ?

Si je rajoutes des colonnes, les colonnes à cacher changent aussi, il s'agit du même soucis ça décale tout ... (pour l'exemple de la feuille, les couleur jaune et verte sont toujours présente si on rajoute une colonne ).

Pas si facile..
0
eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 282
 
Pas si facile..
Si, si tu expliques précisément ce que tu veux.
Quelle colonne en fonction ou non de la position de la checkbox ?
Quelle ligne en fonction ou non de la position de la checkbox ?

.offset(ligne,colonne) te permet de calculer un décalage.
Et cells() d'adresser directement une cellule.
Par exemple la cellule même ligne colonne A :
Cells(CheckBox2.TopLeftCell.Row, "A") = IIf(CheckBox2, "oui", "non")

eric
0
Franck
 
Merci Eric.

En fait dans notre exemple si la checkbox1 est cochée, ca affiche oui (sinon non ) et ca me masque les colonnes E:F. Jusque là, ca fonctionne.

Cependant si je rajoute une ligne et une colonne avant ces arguments c-a-d :
- ajout d'une ligne avant la ligne1 et une colonne avant colonneA

Donc ma cellule où mon résultat doit affiché oui doit être B2 et non A1 et les colonnes a masquer sont F:G et plus E:F

En faite les vba ne prennent pas en compte ces changements.

J'espere avoir été plus clair ;-)
0
eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 282
 
Bonjour,

A tester :
Private Sub CheckBox1_Click()
    Const offsetColMasquée As Long = 3 'masquer les colonnes à partir de x colonnes à droite (si positif, à gauche si négatif) de la checkbox
    Const nbColMasquée As Long = 2 ' nombre de colonnes à masquer
    Const offsetColMarque As Long = -1 ' -1 = oui/non 1 colonne à gauche
    Dim pl As Range, Obj As OLEObject
    Set Obj = ActiveSheet.OLEObjects("CheckBox1")
    
    Set pl = Obj.TopLeftCell.Offset(, offsetColMasquée).Resize(, nbColMasquée).EntireColumn
    Obj.Object.Caption = "Datas1 (" & pl.Address(False, False) & ")"
    pl.EntireColumn.Hidden = Not Obj.Object
    Obj.TopLeftCell.Offset(, offsetColMarque) = IIf(Obj.Object, "oui", "non")
    If Not noEvents Then CheckBox3 = Null
End Sub

Modifier les valeurs des constantes selon les checkbox, ainsi que son nom dans set Obj
https://www.cjoint.com/?DGFmxvij5vq

eric

PS: j'ai ajouté dans le libellé les colonnes concernées si ça t'intéresse. Si insertion il se met à jour après un clic dessus
0
Franck
 
Ok merci bien !!
0
ccm81 Messages postés 11033 Statut Membre 2 434
 
Salut Eric

De retour sur le sujet, je viens de passer un moment à décrypter ton code.
Je viens d'apprendre pas mal de choses sur la manipulation des "OLEobjects". Comme Franck à une ribambelle de checkbox à gérer, à partir de ton code, je me suis permis et lancé dans un essai histoire de lui simplifier l'adaptation à son problème
Sans garantie bien sûr
https://www.cjoint.com/?3GFqIUYsKPZ

Cordialement
0
eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 282
 
Tu as bien fait, bonne idée :-)
Je pensais aussi à des module de classe mais c'est au-dessus de mes possibilités.

eric
0
Franck
 
C'est exactement ce principe la cc81, mais les cellules avec OUI/NON je voudrais pouvoir choisir la cellule et non pas systematiquement la gauche de la case.

Les cases ActiveX vont peut etre me simplifier la vie en faite..
0
eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 282
 
non pas systematiquement la gauche de la case.
Pas assez précis
0
ccm81 Messages postés 11033 Statut Membre 2 434
 
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Franck
 
Oui Parfait!
C'est une usine à gaz, merci de votre aide précieuse ;)

Bonne journée !
0
ccm81 Messages postés 11033 Statut Membre 2 434
 
C'est une usine à gaz
Peut être, mais les tuyaux sont tout petits et pas emmêlés, c'est déjà quelque chose, mais aussi, 80 chekcbox dans une feuille, tu t'attendais à quoi ?
Si ça répond à ton problème, merci de mettre le sujet à Résolu (en haut à droite de ton premier message)
RQ. On peut faire l'économie du paramètre cel dans la procédure cbclick, en calculant le nom de la cellule oui/non à partir du nom du checkbox passé (ça suppose que tes cb sont bien nommés cb01, ... et que les cellules soient nommées CB_01, ...), tu n'auras plus alors besoin de donner le nom de la cellule lors de l'appel à cbclick dans les Sub cbxx_Click()

Cdlmnt
0
Franck
 
Encore merci .
0
ccm81 Messages postés 11033 Statut Membre 2 434
 
De rien

pour revenir à ma remarque
Private Sub cbClick(cb As Object, ocm As Long, ncm As Long)
Dim pl As Range, cel As String
Set pl = cb.TopLeftCell.Offset(0, ocm).Resize(1, ncm).EntireColumn
cel = Replace(cb.Name, "cb", "CB_")
cb.Caption = "Datas" & Right(cb.Name, 2) & " ( " & pl.Address(False, False) & " )"
pl.EntireColumn.Hidden = Not cb.Value
Range(cel).Value = IIf(cb, "oui", "non")
If Not noEvents Then cbT = Null
End Sub

Private Sub cb01_Click()
Call cbClick(cb01, 3, 2)
End Sub
0