Garder cellule après insertion/suppression lignes colonnes
Fermé
Franck
-
25 juil. 2014 à 13:42
ccm81 Messages postés 10855 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 29 avril 2024 - 1 août 2014 à 14:12
ccm81 Messages postés 10855 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 29 avril 2024 - 1 août 2014 à 14:12
A voir également:
- Garder cellule après insertion/suppression lignes colonnes
- Forcer suppression fichier - Guide
- Aller à la ligne dans une cellule excel - Guide
- Insertion liste déroulante excel - Guide
- Verrouiller cellule excel - Guide
- Insertion sommaire word - Guide
28 réponses
ccm81
Messages postés
10855
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
29 avril 2024
2 404
Modifié par ccm81 le 25/07/2014 à 13:53
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
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
ccm81
Messages postés
10855
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
29 avril 2024
2 404
25 juil. 2014 à 14:24
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
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
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.
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
ccm81
Messages postés
10855
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
29 avril 2024
2 404
25 juil. 2014 à 14:43
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
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
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 ?
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 ?
ccm81
Messages postés
10855
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
29 avril 2024
2 404
25 juil. 2014 à 15:23
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()
ç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()
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.)
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.)
ccm81
Messages postés
10855
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
29 avril 2024
2 404
Modifié par ccm81 le 25/07/2014 à 16:00
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)
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)
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)
Il y a un soucis, il me surligne en jaune :
Range(EH).Columns.Hidden= IIf(Range(B158)= "non", True, False)
ccm81
Messages postés
10855
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
29 avril 2024
2 404
25 juil. 2014 à 16:24
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
sur mon exemple, ça fonctionne
https://www.cjoint.com/?3GzqxItL0WN
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.
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.
ccm81
Messages postés
10855
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
29 avril 2024
2 404
25 juil. 2014 à 16:44
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
Tu as deux constantes avec le même nom "FRANK" dans la feuille ce n'est pas possible
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 ?
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 ?
Quelqu'un aurait une idée ?
eriiic
Messages postés
24570
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
23 avril 2024
7 215
30 juil. 2014 à 09:25
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
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
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
Quel est le code mettre dans la case "coche/décoche TOUT" pour que ça coche et décoche les 2 cases ?
Merci
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
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
Ne résoudrais-tu pas ton problème en utilisant des case à cocher de type Contrôle active X?
cordialement
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
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?
Et si ti mettais tes cellules A et B sur une autre feuille?
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.
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.
eriiic
Messages postés
24570
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
23 avril 2024
7 215
30 juil. 2014 à 12:33
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
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
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
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
eriiic
Messages postés
24570
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
23 avril 2024
7 215
30 juil. 2014 à 13:09
30 juil. 2014 à 13:09
Bien que je doute de l'utilité puisqu'on voit si elle est cochée ou non :
eric
[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
eriiic
Messages postés
24570
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
23 avril 2024
7 215
30 juil. 2014 à 13:57
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
eric