Garder cellule après insertion/suppression lignes colonnes

Fermé
Franck - 25 juil. 2014 à 13:42
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 - 1 août 2014 à 14:12
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 ?
A voir également:

28 réponses

ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
Modifié par ccm81 le 25/07/2014 à 13:53
Bonjour

S'il y a peu de cellules concernées, une solution consiste à les nommer dans la feuille (par exemple C4 sera nommée Cquatre)
Dans le code vba, l'accès se fera alors avec Range("CQuatre")

Cdlmnt
0
D'accord mais j'ai une 80aines de cellules... donc 80aines de macros
0
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
25 juil. 2014 à 14:24
Tu me dis que dans ton code, il y a des références à des cellules (80) de la feuille en "dur" ?
Ce n'est pas une bonne solution, le code de tes procédures ne devrait pas contenir des valeurs, mais uniquement des variables et des constantes. De cette façon la maintenance du code est grandement facilitée (voir ton pb)

Je ne vois pas de solution légère à ton pb
Peut être t'inspirer de cet exemple pour minimiser les risques d'erreur
https://www.cjoint.com/?3Gzos5O0J9l

Histoire d'y voir plus clair, peux tu envoyer ton fichier au format excel 2003 sur cjoint.com et joindre le lien obtenu à ton prochain message

Cdlmnt
0
Mon code est :

Sub Caseàcocher9_Clic()
Columns("E:H").Hidden = IIf([B158] = "non", True, False)
End Sub

Quand je rajoute des lignes il garde la même cellule, en loccurence 158, au lieu de passer à 159.
0

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

Posez votre question
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
25 juil. 2014 à 14:43
Je ne peux pas faire grand chose de plus

Columns("E:H").Hidden = IIf([B158] = "non", True, False)
ici, tu as mis B158 en "dur", donc comme proposé plus haut et pour faciliter la lecture
1. nommer cette cellule "B_158" dans la feuille
2. en début de code
Const B158 = "B_158"
3. puis dans ta procédure
Columns("E:H").Hidden = IIf(Range(B158)= "non", True, False)

RQ1. si tu modifies les colonnes, tu auras bien sûr le même problème
0
Sub Caseàcocher9_Clic()
Const B158 = "B_159"
Columns("E:H").Hidden = IIf(Range(B158) = "non", True, False)
End Sub

Merci ca marche niquel, en faite ca garde le numero de celulle du début car le 158 signifie plus rien après.

Savez vous comment on peut renommer le nom de cette macro Case à cocher 9 ?
0
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
25 juil. 2014 à 15:23
ca garde le numéro de cellule du début car le 158 signifie plus rien après.
ça garde le nom de la cellule dans la feuille et pas le numéro
je t'ai proposé ce nom "B_158" (et tu avais parlé de 80 cellules du même genre) pour te faciliter les modifications, mais comme tu dis, ce nom ne signifiant plus rien, il aurait été préférable de le choisir plus significatif par ex CaC9 pour Case à Cocher 9

Pour ce qui est du nom de la procédure : Caseàcocher9_Clic()
Comment as tu obtenu ce nom là?
Une case à cocher (ActiveX) est un objet de type CheckBox
et si tu ne l'as pas renommé la procédure attachée au clic est
Sub CheckBox1_Click()
0
Merci de votre réponse,

J'ai obtenu via case à cocher formulaire et j'en ai 80 environs donc voilà pourquoi j'ai 80 codes.

Vous avez raison pour les colonnes E à H il faut que je trouve le code pour figer car j'ai renommer les colonnes E à H mais je ne trouve pas le code.

(Je suis d'accord avec vous j'ai renommé de facon à ce que ça soit plus significatif mais le B158 du Const B158 renvoie bien à la cellule d'origine.)
0
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
Modifié par ccm81 le 25/07/2014 à 16:00
1. J'ai obtenu via case à cocher formulaire
Dans ce cas, tu nommes ta procédure comme tu veux
RQ. Il aurait été préférable de prendre tes cases à cocher dans la boite à outils contrôles, ces contrôles sont plus commodes à gérer (mais bon, c'est un peu tard)

2. Vous avez raison pour les colonnes E à H il faut que je trouve le code pour figer car j'ai renommer les colonnes E à H mais je ne trouve pas le code.
même chose
2.1. dans la feuille tu nommes la plage E:H avec le nom E_H par exemple
2.2. dans le code
Const EH = "E_H"
puis
Range(EH).Columns.Hidden= IIf(Range(B158)= "non", True, False)
0
Je n'ai pas trouver cette fameuse barre à outils controle (j'ai vu sur un autre topic)

Il y a un soucis, il me surligne en jaune :
Range(EH).Columns.Hidden= IIf(Range(B158)= "non", True, False)
0
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
25 juil. 2014 à 16:24
as tu bien nommé la plage, et déclaré la constante
sur mon exemple, ça fonctionne
https://www.cjoint.com/?3GzqxItL0WN
0
Vous êtes passé par ActiveX et pas moi donc les codes sont pas les même :

Sub Caseàcocher104_Clic()
Const B158 = "FRANCK"
Const EH = "FRANCK"
Range(EH).Columns.Hidden = IIf(Range(B158) = "non", True, False)
End Sub

Ca devrait fonctionner pourtant.
0
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
25 juil. 2014 à 16:44
Rien à voir avec le type de contrôle
Tu as deux constantes avec le même nom "FRANK" dans la feuille ce n'est pas possible
0
Merci !
0
Du coup pour ma case à cocher qui coche et décoche tout la formule est :

Sub Caseàcocher99_Clic()
Columns("A:Z").Hidden = IIf([B1] = "non", True, False)
[A2:A10] = [A1]
End Sub

Mais si je veux créer des lignes tout en réduit en erreur donc je test en renommant les lignes et colonnes :
Sub Caseàcocher99_Clic()
Const B1 = "TOUT"
Const AZ = "TOUT1"
Range(AZ).Columns.Hidden = IIf(Range(B1) = "non", True, False)
[A2:A10] = [A1]
End Sub


Je fais le test, je créé une ligne puis quand je décoche tout c'est bon mais quand je reclique sur la case pour recocher ca ne fonctionne pas (mes cases reste décochées), cela vient de quelle ligne du code ?
0
Quelqu'un aurait une idée ?
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 212
30 juil. 2014 à 09:25
Bonjour,

Oui, fait comme dit au début : nomme tes cellules. Tout sera plus simple et tu n'auras plus à reprendre le code en cas d'insertion
Pour le reste dépose un fichier en donnant les manips à faire.
eric
0
Voila : http://cjoint.com/?DGEjXXTyM8o

Quel est le code mettre dans la case "coche/décoche TOUT" pour que ça coche et décoche les 2 cases ?

Merci
0
Iama Messages postés 319 Date d'inscription mercredi 13 janvier 2010 Statut Membre Dernière intervention 27 mars 2020 14
30 juil. 2014 à 11:26
Bonjour Franck

Ne résoudrais-tu pas ton problème en utilisant des case à cocher de type Contrôle active X?

cordialement
0
Iama Messages postés 319 Date d'inscription mercredi 13 janvier 2010 Statut Membre Dernière intervention 27 mars 2020 14
30 juil. 2014 à 12:12
Certes c'est un problème de gestion de ton temps.
Et si ti mettais tes cellules A et B sur une autre feuille?
0
J'ai plein de case à cocher en faite et faudrait tout refaire.

Avec ce code ça marche mais après l'insert de lignes ou colonnes il marche plus :

Sub Caseàcocher3_Clic()
Columns("E:H").Hidden = IIf([B8] = "non", True, False)
[A4:A5] = [A8]
End Sub

Je dois pas être très loin.
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 212
30 juil. 2014 à 12:33
Bonjour,

Tu te compliques bien la vie et tu es en train de faire une usine à gaz pour pas grand chose en utilisant les contrôles formulaire.
En plus tu ajoutes une colonne oui/non qui ne sert à rien, et je me demande comment tu fais pour insérer une ligne sans à avoir tout le code à reprendre...

Regarde en feuille 2 un exemple avec les contrôles activeX :
https://www.cjoint.com/?DGEmGMX9acT

eric
0
D'accord je vais repartir de 0 et reprendre avec des cases Active X.

En plus de çà, comment puis-je mettre Oui ou Non dans une cellule si une case est coché avec Active X ?

Par exemple :
Si caseàcoché 1 est coché : A1= OUI sinon = NON
Si caseàcoché 2 est coché : A2 = OUI sinon = NON
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 212
30 juil. 2014 à 13:09
Bien que je doute de l'utilité puisqu'on voit si elle est cochée ou non :
[A1] = IIf(CheckBox1, "oui", "non")
ou bien si tu veux dans la cellule à gauche qq soit l'emplacement de la checkbox :
CheckBox1.TopLeftCell.Offset(, -1) = IIf(CheckBox1, "oui", "non")

eric
0
Oui j'en ai besoin.

Ca marche bien sauf que lorsque que je rajoute une ligne ca suit pas la cellule d'origine, j'ai essayer en mettant [$A$1] mais c'est pareil ..
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 212
30 juil. 2014 à 13:57
C'est pour ça que je t'ai mis une 2ème version : si tu veux dans la cellule à gauche qq soit l'emplacement de la checkbox
eric
0