Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
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 !).
Je dis presque, car je suis confronté à un dernier problème.
Comme j'attache de l'importance à la présentation des infos et à leur mise en page, je voudrais forcer tous les champs 'Nom' en Majuscule, et les 'Prénoms' avec une majuscule en première lettre.
La validation des données d'Excel 2007 met une message d'alerte, et je voudrais pouvoir le faire automatiquement.
Je pense qu'il faut donc créer une macro.
J'en ai trouvé une qui fonctionne très bien sur un tableau vierge, mais qui plante quand j'essaie de l'insérer dans le notre.
J'ai essayé à différents endroits mais pffffff...
Private sub Worksheet_Change(ByVal zz As Range)
If Intersect(zz, [MAJ]) Is Nothing Then exit sub
Application.EnableEvents = False
zz = UCase(zz)
Application.EnableEvents = True
end sub
Vu le travail que tu as fourni, il est évident que je posterai la version définitive expurgée du nom de ma société, et même si j'ai ton adresse en MP, comme j'ai rangé ma cave hier, une jolie bouteille peut partir vers Challans.
D'autant plus que je joue encore au basket, et Challans, y'a une belle équipe !
Je me suis autorisé à inclure dans le code une vérification à minima des contenu de cellules.
Nom et Prénom -> valeur textuelle. L'utilisateur peut toujours entrer un chiffre en plein milieu mais pour ne pas alourdir le temps d'execution, je me suis contenté de vérifier que le contenu total soit reconnu comme texte.
Date, Début, Fin -> toute Valeur qui puisse être reconnue comme Date et qui comporte au moins 2 '/' et fasse une longueur de 10 caractères.
En effet, il existe bien une fonction VBA (isDate(laValeur)) qui indique que vba peut interpréter 'laValeur' comme une date. Sauf que si l'utilisateur rentre 12.45 il l'intérprète comme une date antérieure à 1900 ????
On peut pousser plus loin la vérification, mais c'est toujours au risque d'alourdir le programme et la vitesse d'éxecution. On peut imaginer autoriser une plage de dates valides. (cela ne coûte rien).
Vraiment super, j'ai passé une partie de la journée à chercher en tournant autour mais sans trouver.
Quel talent.
J'ai un petit soucis pour les lignes Départ , c'est du texte et pas une date, et Observation, idem, mais en regardant le code, je devrais pouvoir trouver la solution.
Par contre, last but not least, quand tu me renvoies le fichier, les couleurs du tableau ne sont plus celles que j'ai déterminé (gris clair) Quel serait le moyen de figer les couleurs ?
Après je ne te harcèle plus !!!
Et pour la bouteille, c'est pas une promesse de Gascon !!!
Pour les couleurs, j'ai travaillé avec la palette défaut de xl2002. J'ai pas vérifier sous Excel 2007 si la palette par défaut était la même. Par contre il se peut que ta palette ait été modifiée. Et excel attribue les couleurs suivant un index de palette.
Si une cellule a fond de couleur 45 (colorindex) par exemple et que le 45 chez toi et chez moi n'a pas la même couleur et ben voilà... C'est pourquoi, je travaille habituellement avec les palettes par défaut.
Pour le reste, j'ai pas pigé,je ne me suis pas occupé de 'Observation.' Ce que j'ai fait n'est qu'un exemple. Si tu as du mal à adapter, dis le.
Pour la bouteille, on attendra ta venue à Challans lors d'un match de notre fameuse équipe.
Case "DATE", "DEBUT", [SIZE=3][COLOR=red]"DÉBUT"[/COLOR][/SIZE], "FIN"
J'avais oublié de mettre les guillemets autour de Début. Mets les.
Si tu veux vérifier 'Observation': if faut que tu mettes "Observation" en couleur grise sur fond gris pour que cela ne se voit pas dans chaque cellule de la ligne 101.
Pour savoir dans quelle colonne on se trouve, l'appli vérifie l'entête de plage et ton Entête pour Observation est en Ligne 100 et non 101. De plus il faut une entête pour chaque colonne à vérifier.
une fois que tu auras mis 'Observation' dans chacune de tes cellules de la ligne 101 rajoute les lignes suivantes:
Code:
Case "OBSERVATION"
If Not VerifierContenu(Cellule, "Texte") Then
MsgBox "Seul le texte est autorisé dans ce champ", vbExclamation, "Saisie texte"
Cellule.Activate
End If
Juste avant le 'End Select'. Et si tu as d'autre colonnes texte à vérifier rajoute leur titre après "OBSERVATION" séparé pas une virgule. Ex:
J'ai retravaillé notre tableau en lui apportant quelques lignes supplémentaires, complété quelque petit bout de code, (je commence à comprendre !!! ) refait une mise en page avec xl2003, et j'ai obtenu ce que je souhaitais.
Il me reste un problème avec la protection de la feuille, je t'explique.
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.
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.
Quand je lance cette macro, elle tourne pendant 20 secondes avant de me rendre la main, puis plante quand j'entre un nom dans une ligne.
Après plusieurs essais de protection avec MDP, cela fonctionne, et j'arrive à entrer les données que je veux.bizarre
Mais si je quitte Excel en enregistrant le document protégé par MDP, quand je ré-ouvre ce document après avoir relancé Excel, ça bloque de nouveau
Arg.... Je n'arrive pas à comprendre la bonne manip, et à comprendre où ça coince.
Je pense que c'est la macro DeVerrouillerLesCellulesBlanches qui rencontre un problème avec le reste du code, mais je vois pas quoi.
'----------------------------------------------------------------------
' Roman fleuve du soir
' Chapitre 1
'----------------------------------------------------------------------
Concernant la protection:
La feuille "Rapport" du fichier joint est protégée par mot de pass à l'ouverture du classeur, avec le mot de pass "hasco".
Commence par déprotéger la feuille.
Puis ALT+F11 pour ouvrir l'éditeur de macro (VBE)
Dans la liste des projets à gauche. Tu cliques sur la petite croix à côté du VBAProjet(nom du classeur).
Comme j'ai protégé aussi le projetVBA de ce classeur, il te sera demandé un mot de passe: "hasco".
Une fois développé le projet, tu développes le sous-élément: "Microsoft Excel Objects".
Tu doubles click sur le sous-sous-élément "ThisWorkbook" et tu verras apparaître le code suivant.
Code:
Private Sub Workbook_Open()
Sheets("Rapport").Protect Password:="hasco", DrawingObjects:=True, Contents:=True, Scenarios:=True, UserInterfaceOnly:=True
End Sub
Change le mot de pass "hasco" pour le tiens Je te conseille d'en mettre un plus long et compliqué et de le garder précieusement.
La macro "ProtegerLaFeuille" a disparue. Elle n'était là que pour les tests et ne doit pas être accessible aux utilisateur.
En cours de test si tu veux déprotéger par VBA, fais CTRL+G pour ouvrir la fenêtre d'exécution (en bas de l'éditeur) si elle n'est pas déjà ouverte.
dans cette fenêtre tu tapes puis valide:
Pour la protéger, mets ton curseur dans la Macro ThisWorkBook_Open() vue plus haut et tape F5. ce qui lancera la macro évènementielle qui se déclenche normalement à l'ouverture du classeur.
Ne protèges pas la feuille par l'interface utilisateur. Sinon les macros ne marcherons pas: L'option UserInterfaceOnly n'est utilisable que par VBA.
Pour protéger le ProjetVBA (le code) : (c'est important qu'il ne soit pas accessible à l'utilisateur)
Fais un click-droit sur VBAProject(nom du classeur) puis "propriétésdeVBAProject" dans le menu contextuel.
Dans l'onglet "Protection" qui s'ouvre tu coches 'Verouiller le projet pour l'affichage' et tu rentres un mot de passe (le même ou un autre que pour la feuille)
A la prochaine ouverture tu ne pourras plus développer le projet sans entrer ton mot de passe.
'---------------------------------------------------------------------
' Fin du chapitre 1
'---------------------------------------------------------------------
Chapitre 2
Concernant :
Code:
DeVerrouillerLesCellulesBlanches
C'était une macro de tests. Je l'ai modifié en réduisant la plage des cellules à parcourir. C'est normal qu'elle ait été longue à l'éxécution car tu utilsais toutes les cellules du classeur 65535 ligne par 256 colonnes (Le simple fait de mettre une couleur de fond utilise les cellules)
La macro utilisait "UsedRange" qui représente la plage utilisée gardée en mémoire par Excel .Elle avait du boulot!!!!!
Cette macro existe toujours mais avec un paramètre bidon pour qu'elle ne soit pas visible dans la liste des macros disponible. (ALT+F8) de l'interface utilisateur.
C'est pour cela également que j'ai supprimer le contenu des colonnes allant de P à IV et que je les ai masquées.
J'ai également masqué les lignes 250 à 65536.
Pour lancer cette macro au besoin tapes dans la fenêtre exécution:
Code:
deverouillerCellulesBlanches ""
avec les guillemets "" de fin
'----------------------------------------------------------------------
' Fin du chapitre 2
'----------------------------------------------------------------------
Je crois qu'on arrive au bout, non?
si tu as des questions n'hésite pas.
Et bien oui, nous sommes arrivés au bout de ce que je souhaitais exactement.
Le dernier fichier zip renvoyé, que je conseille à beaucoup d'ouvrir, vu les réponses fantaisistes que l'on peut trouver ailleurs sur la toile, ainsi que tes explications , vont surement en aider plus d'un.
Détaillé, compréhensible, professoral (dans le bon sens du terme).
Un grand merci pour ta disponibilité, ta gentillesse et ton savoir. Sincèrement je suis enchanté de cette rencontre 'webienne' (Hé ho lisez bien tous, j'ai pas dit lesbiennes !
Un coucou et un merci également à Excel Lent pour ses réponses, en espérant se revoir sur la toile.
Te tracasse pas, j'ai mis le nez dans le VBA, et je sais où il y a un super prof.
Ce site utilise des cookies pour personnaliser le contenu, adapter votre expérience et vous garder connecté si vous vous enregistrez.
En continuant à utiliser ce site, vous consentez à notre utilisation de cookies.