Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
Je me suis inscrit sur ce forum, car on y retrouve des membres super calés, et ça m'impressionne !
Un peu aussi en désespoir de cause, car totalement néophyte en VBA, je vous explique :
J'ai créé un tableau excel cf document joint, dans lequel je souhaite rajouter automatiquement une ligne quand la dernière cellule d'un endroit précis est remplie, et ce à plusieurs endroits précis du tableau.
Ca fait deux jours que je cherche, 😡 j'ai avancé, je sais insérer une ligne, mais pas trouvé la bonne solution à mon problème (Néophyte je vous dis !).😕
JoellePelle, lorsque tu parles de copier/coller la macro ...
Je suppose que tu as copié la macro sur l'un de nos fichier (qui fonctionne très bien dans son élément naturel), pour le coller dans ton fichier de travail (où ça fonctionne beaucoup moins bien)?
Si oui, as-tu pensé, dans ton fichier de travail, à nommer les zones de cellules?
Si oui, as-tu bien mis EXACTEMENT le même nom pour chaque zone, et délimité les zones correctement???
Sinon, peux-être as-tu copié les macro au mauvaise endroit?
La macro "Private Sub Worksheet_Change(ByVal Target As Range) ..." doit ABSOLUMENT être mis sur la(les) feuilles où tu veux rajouter les fameuses lignes.
La macro "Private Sub Worksheet_Change(ByVal Target As Range) ..." doit ABSOLUMENT être mis sur la(les) feuilles où tu veux rajouter les fameuses lignes.
J'ai terminé mon tableau en comprenant ce qu'il fallait faire, et tout fonctionne nickel.
Un grand merci à ceux qui m'ont aidé. (j'ai démarré hier matin le VBA...)
Je fais maintenant face à un problème que je cerne bien, mais sans trouver la solution.
En effet, comme le disait HASCO, je peux me retrouver avec pas mal de lignes vides dans mes plages de données, c'est pourquoi j'aimerais les supprimer si elles sont réellement vides quand je passe à la plage suivante.
J'ai rajouté un champ 0 dans la première ligne d'une plage afin de ne pas l'effacer, je cacherai ensuite cette colonne.
Et enfin, mais là je sèche grave, je voudrais protéger ce formulaire, en laissant bien sur la possibilité de renseigner les champs en blanc, Si je protège la feuille, ça bloque les macros, normal, mais comment faire pour l'autoriser ???😡
Pour ce qui est de la protection de la feuille il n'y a rien d'incontournable pour insérer des lignes. Suivant ta version Excel les choses peuvent se passer différement. Aussi je t'encourage à renseigner ton profile avec ta version Excel. Ce qui simplifiera les choses.
Tu as sûrement vu qu'il y avait une Aide Spécifique à VBA dans l'éditeur des macros qui s'ouvre quand tu fais ALT-F11. Essaie de rechercher dans cette aide le mot clef Protect qui s'applique à Worksheet(feuille de calcul) et dans les différentes options possibles dis moi si tu trouve l'option:UserInterfaceOnly .
Si oui, cela nous permettra de protéger la feuille des actions de l'utilisateur sans invalider la macro.
Si non, et c'est toujours un choix possible on peut protéger la feuille avec mot de passe et demander à VBA de la déprotéger quand nécessaire puis rétablir la protection.
Dans ce dernier cas, si tu mets un mot de passe, il apparaitra dans la macro au moment de la déprotection/protection. Auquel cas tu pourras aussi protéger ton Projet VBA par mot de passe, ce qui empêchera les utilisateurs de l'ouvrir et d'aller voir le mot de passe de la feuille.
Explicite un peu: "un champ 0 dans la première ligne d'une plage afin de ne pas l'effacer"
comment tu comptes t'y prendre?
Ce qu'on peut imaginer:
mettre une première ligne (masquée et protégée) avec des formules indiquant s'il y a ligne(s) vide(s) ou non. Si oui, on peut intercepter un évènement de feuille (Worksheet_Calculate) qui se produit quand la feuille est calculée et qui nous diras s'il faut effacer des ligne(s) vides pour n'en laisser qu'une en fin de plage.
Je pense que c'est mieux d'en laisser une en fin sinon il va falloir imaginer autre chose si l'utilisateur décide de revenir dans la plage pour rajouter une ligne(oubli?!). Mais cela risquerait d'alourdir encore ton application qui finirait en usine à gaz.
Avec VBA il vaut mieux, éviter les choses trop compliquées qui entrainent des réactions en chaines auquelles il faut répondre par des solutions qui à leur tour....etc.
Merci pour tes encouragements.
Je pensais mettre dans la colonne "B" de mon tableau, (que je cache ensuite) des 0 sur chaque ligne.
Si une ligne se crée automatiquement, quand on clique sur celle du dessus, il n'y a pas de 0 dans la colonne "B" en regard de cette ligne.
Ma déduction est que si aucun enregistrement n'est créé, donc la ligne est vide, on met une formule quand on passe à la plage suivante pour supprimer les lignes vides.
C'est pas un bon plan ? 😱
J'ai essayé un code pour cela (fichier joint) mais ça coince pour l'instant.
Je ne me suis pas attaqué encore à la protection (faut bien bosser un peu !) mais le plus simple sera le mieux.
Ma version est EXCEL 2007, mais je l'enregistre au format xls pour que cela soit compatible avec les versions 2003. (soucis ?)
J'ai une macro (fichier joint) qui me supprime les lignes vides qui fonctionne très bien, et je voudrais la déclencher quand je change de plage, et là, je sais pas faire 😀
Ca m'énerve, je tourne autour, sans encore trouver.😱
Je n'ose même pas penser à la protection de la feuille !!!
Une nuit de sommeil, si elle ne me porte pas conseil, me reposera toujours les yeux !
Sur ce, je vais faire comme Hasco, dodo, et on verra ça demain. 😎
J'écoute mon prof, alors j'ai trouvé ça, qui est la traduction de UserInterfaceOnly, mais est-ce bien la même chose ? Sont tellement retors ces programmeurs ! 😛
InterfaceUtilisateurUniquement Facultatif Variante True pour protéger l'interface utilisateur, mais pas les macros. Si cet argument est omis, la protection s'applique à la fois aux macros et à l'interface utilisateur
La où je butte, c'est pour déclencher les macros (que je bidouille et qui fonctionnent quand je les lance manuellement), après avoir renseigné un champ, ou être arrivé sur une plage nommée. Je ne souhaite pas mettre des boutons (ce qui serait plus simple je pense)
Je ne sais pas trop ou enregistrer ma macro et quelle méthode utiliser.😀
Voilà,je crois que je nous sommes arrivés à ce que tu voulais dans le fichier joint.
1-Pour la protection.
Telle que la feuille est protégée tu ne peux pas rajouter ou supprimer de ligne. Alors appelle la Macro ProtegerFeuille qui elle protège la feuille avec UserInterFaceOnly=True. Tu verras la différence avec la protection classique. (quand tu aurra tout tester, pense à faire un double non protégé puis mettre un mot de passe pour la protection feuille et à protéger ton projetVBA)
2-J'ai creer une Macro 'DeVerrouillerLesCellulesBlanches'.
Cette macro deverouille toutes les cellules dont le fond est blanc (colorindex=2) et verrouille les grises, cela permettra au final des déplacements plus aisés d'une zone à l'autre pour l'utilisateur final.
3 -La façon de traiter les plages par macro a changée.
J'ai créer une Constante avec tous leurs noms et c'est à partir de cette constante qu'est déterminé dans quelle plage la cellule active se trouve.
Maintenant la procédure évènementielle "Worksheet_Change" se résume à une ligne:
Code:
If Not Intersect(Target, Range(NOMS_PLAGES)) Is Nothing Then DoAction Target
4 - Tu peux comme avant ajouter des lignes.
les lignes entièrement vides sont supprimées automatiquement. Il reste au moins la première ligne..
5- Regardes tout ceci, test, met tout ça à l'épreuve avant de le communiquer à tes utilisateurs et s'il y a un problème quelconque ou quelque chose que tu ne comprends pas, reviens
ta façon de protéger la feuille est vraiment parfaite , car si je veux protéger des cellules, il me faut juste changer sa couleur.
L'ajout de lignes se fait impec, mais, car il y a un mais (oui je suis pénible !) un petit soucis sur la commande : 😕
If Application.CountA(CellulesLigne) = 0 Then
If Cellule.Row <> Plage.Row Then
On Error Resume Next
Application.DisplayAlerts = False
Application.EnableEvents = False
CellulesLigne.EntireRow.Delete xlShiftUp
Application.EnableEvents = True
Application.DisplayAlerts = True
On Error GoTo 0
En effet, la ligne ne se supprime pas automatiquement si on passe à une autre plage. Par contre, si on supprime les données de la première ligne, la deuxième s'efface, ce qui oblige, dans le cas présent à faire cette manip.
Ce qu'il y a de génial, c'est que tu as mis le didacticiel en regard des différentes macros, ce qui m'aide à comprendre comme cela fonctionne, (mais pas à résoudre ce soucis ! 😀 )
En effet, la ligne ne se supprime pas automatiquement si on passe à une autre plage. Par contre, si on supprime les données de la première ligne, la deuxième s'efface, ce qui oblige, dans le cas présent à faire cette manip.
Je ne comprends pas. De quelle ligne tu parles? De la dernière ligne qui reste vide?
Si oui, c'est fait exprès pour que l'utilisateur puisse revenir sur cette ligne ajouter une valeur et ainsi recréer une nouvelle ligne vierge et disponible. C'est un peu le même principe que les tables Access (si tu connais) où la dernière ligne est toujours disponible et vierge pour ajouter de nouveaux enregistrements. Dans Access, le premier champ de cette ligne contient généralement une étoile '*'.
Si on supprime cette ligne vide aussi, cela obligera l'utilisateur à modifier une cellule de la dernière ligne non vide qui restera pour en créer une nouvelle, ce qui pour le moins, n'est pas du tout évident,ni intuitif.
A ce sujet, on peut imaginer un texte d'aide à la saisie ou une feuille d'aide.
C'est exactement ce à quoi je pensais. C'est vrai que j'ai fait du code avec Paradox de Borland, il y a quelques années, et c'était la même chose qu'avec Access. 😱
C'est ce que je vais faire en insérant un commentaire. 😉
J'ai rajouté également des fonctions pour les champs calculés positif à 100% ou négatif, ainsi que des majuscules automatiques dans les champs Nom.
Ca prend bien forme grâce à toi.
Mille mercis encore une fois, de m'avoir si gentiment et talentueusement aidé.
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.