Garder cellule après insertion/suppression lignes colonnes
Franck
-
ccm81 Messages postés 10909 Date d'inscription Statut Membre Dernière intervention -
ccm81 Messages postés 10909 Date d'inscription Statut Membre Dernière intervention -
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 ?
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:
- Garder cellule après insertion/suppression lignes colonnes
- Forcer suppression fichier - Guide
- Comment faire des colonnes sur word - Guide
- Classer par ordre alphabétique excel plusieurs colonnes - Guide
- Aller à la ligne dans une cellule excel - Guide
- Insertion sommaire word - Guide
28 réponses
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
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
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 ?
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.)
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)
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.
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 ?
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
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
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.
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