Créer ou supprimer des lignes avec plusieurs conditions
Bonjour à tous,
Je suis une grande débutante dans le langage VBA. Dans le planning ci-joint, j'avais commencé à créer ou supprimer des lignes en utilisant des macros simples. Le problème est que si je créé trop de lignes en repère B, la création des lignes que je prévois en repère C se crée en zone B.
Je pense qu'il faut que je crée une formule avec des conditions et/ou des variables... mais je ne maîtrise pas du tout.
J'aimerai dire if columns ("A:A") contient le repère "A", insérer ou supprimer une ligne au niveau de la 2ème rangée du repère A.
Idem pour le B : if columns ("A:A") contient le repère "B", insérer une ligne au niveau de la 2ème range du repère B.
Mon but est qu'à partir de la colonne G, les sommes se calculent automatiquement sans oublier une ligne.
Je vous remercie d'avance des différentes solutions que vous pourrez m'apporter.
Bonnes fêtes de fin d'année!
Claire
Salut Claire,
Je te propose de modifier un peu ton fichier. Tu pourrais n’avoir qu’une seule macro pour ajouter des lignes et une seule pour en supprimer et que tous tes boutons y correspondant y soient reliés.
Le rajout ou la suppression de lignes se ferait alors en fonction de la sélection en cours.
Je t’en fais la démonstration dans le ‘’Module_Yvouille’’ du fichier ci-joint et pour l’ajout de lignes seulement. J’ai relié à la macro ‘’Insérer_Ligne’’ qui se trouve dans ce module les deux boutons + de tes cellules C8 et C12 et si tu sélectionnes une ligne sur laquelle ne se trouve pas de données en colonne A (c’est le seul garde-fou mis en place pour l’instant), la nouvelle macro ajoute une ligne en dessous.
Avantage : tu n’as que deux macros à écrire, modifier, etc.
Il resterait tout plein d’autres garde-fous à mettre en place si l’idée t’intéresse, mais rien d’insurmontable.
Cordialement.
Bonjour Yvouille,
Tout d'abord un grand merci de m'avoir répondu si rapidement.
Sauf erreur de ma part, je n'arrive pas à voir le module Yvouille dans ton fichier.
Bref, ce n'est pas grave, je suis partante pour que tu modifies le tableau.
Juste une précision : en fonction des lots A, B ou C, je n'ai pas forcément le même nombre d'homme.
Mais je fais te confiance, j'ai hâte de voir ça.
Merci Yvouille.
Claire
Désolé, j'ai oublié d'enregistrer mon travail
Je l'ai alors refais et te le présente dans le nouveau fichier ci-joint.
En fait, quel que soit la cellule que tu as sélectionnée, le code déclenché par les boutons + des blocs A et B fonctionne.
Ainsi si tu places ton curseur en C20 et que tu cliques sur le bouton en C8, ça fonctionne aussi.
Regarde déjà si ça peut vraiment te convenir - par exemple, si tu sélectionnes une cellule d'une ligne juste en dessous d'une ligne en couleur (8, 13, 18, etc.), ça ajoute une ligne colorée également, mais peut-être que tu ne dois jamais ajouter des lignes qu'en fin de bloc ?
Et explique un peu mieux ton besoin pour la suite. Quand tu dis : "je n'ai pas forcément le même nombre d'homme.", je ne visualise pas vraiment. Pour tes explications, fait référence aux objets Excel tels que Feuille, Plage de cellules, Ligne, etc.
Edit : Fichier 4.xlsm supprimé
Yvouille,
ok, j'ai compris ce que tu m'as écrit au niveau de la création des lignes.
En revanche, je pense ne pas avoir le bon fichier
Pour être plus explicite, j'ai différent lots sur un chantier = peinture, sol, démolition.
Je n'ai pas forcément le même nombre d'homme en fonction de la typologie du chantier.
Exemple, :
je peux avoir 2 hommes sur le lot A démolition dont les prénoms sont Valentin et Luc
Puis en lot B, lot Peinture, j'ai 3 hommes dont les prénoms sont Valentin (le même), puis 2 nouveaux Nicolas et Jean
Donc pour le lot A : j'ai 2 lignes
Pour le lot B : j'ai 3 lignes.
Est ce plus clair?
Merci Yvouille.
Euh, vraiment désolé, j’ai un peu de peine aujourd’hui. Voici le bon fichier (enfin, je l’espère).
Tu as posé une question au sujet de l’ajout de ligne à l’aide de bouton. Je réponds à cette question et ne voit pas vraiment ce que le nombre d’homme a à voir là-dedans.
Il serait alors peut-être bien de liquider le problème de l’ajout de ligne avant de parler de cet autre problème ou m’indiquer plus précisément le lien entre les deux.
Yvouille,
Quand tu appuies sur le bouton +, au niveau du repère A, tu crées des lignes dans lesquelles, j'inscris des noms de compagnons. Jusque là, aucun soucis. C'est facile.
Maintenant, imagine, tu dois créer beaucoup de lignes en A car tu as une grosse équipe. Puis, tu veux créer autant de ligne, voire plus, en lot B car c'est un gros chantier. Quand tu appuies sur le symbole + du repère B, les lignes viennent se créer non pas sous le repère B mais sous le repère A. Je pense que mes formules ne sont pas bonnes.
Est-ce possible pour toi de créer une macro selon mes indications initiales, c'est-à-dire, si
if columns ("A:A") contient le repère "A", insérer ou supprimer une ligne au niveau de la 2ème rangée sous le repère A.
Idem pour le B : if columns ("A:A") contient le repère "B", insérer ou supprimer une ligne au niveau de la 2ème rangée sous le repère B.
Ce n'est pas grave s'il y a plusieurs macros.
Merci encore de ton aide.
Cdt,
Claire
Si je n’arrive toujours pas à te convaincre avec ma nouvelle explication ci-après, je vais chercher une solution dans le sens que tu demandes, mais testes d’abord ce nouveau fichier, s’il-te-plait.
J’ai enlevé tous les boutons au niveau des blocs A, B, C, etc. et les ai remplacés par le bouton en E1.
Si tu sélectionnes par exemple la cellule D10 et que tu appuies sur le bouton ‘’Insérer X lignes’’, tu peux ajouter autant de lignes que tu veux à la fois. Ajoutes-en 10 pour l’exemple.
Après avoir ajouté ces 10 lignes, tu sélectionnes une cellule de la ligne 23 (tu es alors dans le bloc B déplacé vers le bas) et tu ajoutes le nombre de lignes que tu veux, toujours à l’aide du bouton ‘’Insérer X lignes’’.
Pour supprimer les lignes, je te conseille également une autre solution. Si tu sélectionnes un certain nombre de lignes et que tu appuies sur le bouton ‘’Supprimer la sélection’’, ça efface toutes ces lignes d’un seul coup.
A nouveau, il n’y a pas de garde-fou en place afin d’éviter des erreurs ; il faudrait y songer par la suite en fonction de l’utilisation que tu en fais.
Alors, je continue à chercher par rapport à ton ancien fichier ou on continue sur cette nouvelle base ?
Yvouille,
C'est bon, tout fonctionne sauf une toute petite chose. En effet, si tu cliques sur le bouton supprimer, tu supprimes uniquement une cellule.
Désolée pour la version 4, j'avais oublié de regarder en repère A les lignes + et -.
Merci, c'est génial, Je suis ravie.
Peux tu me renvoyer la version finalisée. Je vais regarder ce que tu as écrit en macro pour que ça m'inspire sur d'autres tableau.
Encore merci.
cdt,
Claire
si tu cliques sur le bouton supprimer, tu supprimes uniquement une cellule
Ce n'est pas tout à fait exact. Mon code ne supprime pas une cellule, mais la sélection en cours (voir le code Selection.Delete). Raison pour laquelle j'avais écrit que tu devais sélectionner des lignes entières avant de cliquer sur ce bouton. Si tu penses qu'un garde-fou est nécessaire afin de ne pas pouvoir sélectionner autre chose que des lignes entières, je peux voir cela.
Peux tu me renvoyer la version finalisée.
Euh, pour moi c'est la version finalisée, si ça te convient ainsi, sinon à quoi pensais-tu exactement ?
Tu sais, Yvouille, je me mets à la place de mes collègues.
Est ce possible de supprimer des lignes de la même manière que tu crées des lignes?
je t'en demande beaucoup, n'est-ce pas
Merci Yvouille
Je ne vois pas en quoi le fait de sélectionner un certain nombre de lignes à l’aide des outils en place dans Excel - même si elles ne sont pas contiguës - et d’appuyer sur ce bouton a de compliqué, mais bon.
Pour ajouter des lignes, je te propose de sélectionner une cellule et de placer x lignes en dessous. Tu me demandes de faire la même chose, mais je ne saisis pas bien comment tu vois cela. L’utilisateur sélectionnerait une cellule et indiquerait dans un InputBox le nombre de lignes qu’il veut supprimer en dessous de sa sélection ?
Yvouille,
Ton système d'insertion de lignes me va parfaitement. Il n'y a pas de problème ou d'ambiguïté à avoir par rapport à ça. au contraire, c'est facile.
Et du coup, pour répondre à ta dernière question, en effet, ça serait bien si je pouvais avoir le même système pour supprimer les lignes mais sans demander le nombre de lignes. je clique sur la cellule/ligne désirée, puis je clique simplement sur le bouton supprimer.
Pour le garde fou, comment fais tu pour protéger?
Merci Yvouille.
Ce que j’entends par garde-fou, ce sont des passages qui permettent d’éviter l’une ou l’autre erreur.
Dans le fichier ci-joint, j’en ai placé quelques-uns dans la macro Insérer_X_lignes. Ainsi, si tu sélectionnes une ligne avant la ligne 8 et que tu lances le code, tu es informée que la sélection n’est pas possible (sur le fichier V5, ça ajoute aussi des lignes au-dessus de la ligne 8, si tu lances le code en ayant sélectionné une cellule de ces lignes-là).
Autres exemples, j’ai placé un garde-fou afin que tu ne puisses pas saisir n’importe quoi dans la InputBox (par exemple si tu te trompes et que tu saisis un texte ou un nombre avec des chiffres après la virgule).
Puis j’ai modifié la macro pour supprimer des lignes de manière à ce que ça supprime les lignes en fonction de n’importe quelle sélection. (tu peux donc sélectionner des cellules sur plusieurs lignes).
Là aussi, j’ai placé des garde-fou. Tu ne peux ainsi pas effacer des lignes au-dessus de la ligne 8 et si une ligne plus bas comporte un texte en colonne A, ça bloque aussi.
Ce ne sont que des exemples de ce que l'on peut faire ; à toi de voir ou dire quels sont les autres limites que tu veux placer.
Là, c'est top! Un énorme grand merci.
Je t'ai pris beaucoup de temps et en suis désolée.