Insérer des lignes automatiquent

joelpelle

XLDnaute Junior
Bonjour à toutes et tous,

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, :mad: j'ai avancé, je sais insérer une ligne, mais pas trouvé la bonne solution à mon problème (Néophyte je vous dis !).:confused:

Merci pour votre aide précieuse. :)

Cordialement
 

Pièces jointes

  • matrice.xls
    43 KB · Affichages: 73
  • matrice.xls
    43 KB · Affichages: 68
  • matrice.xls
    43 KB · Affichages: 66

joelpelle

XLDnaute Junior
Re : Insérer des lignes automatiquent

Hey Hasco,

En zip le fichier presque terminé.

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 !:rolleyes:

Très cordialement
 

Pièces jointes

  • matrice.zip
    37.1 KB · Affichages: 13
  • matrice.zip
    37.1 KB · Affichages: 14
  • matrice.zip
    37.1 KB · Affichages: 14
G

Guest

Guest
Re : Insérer des lignes automatiquent

Joel,

voici qui est fait pour le nom et prénom.

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 ????:rolleyes:
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).

A+
 

joelpelle

XLDnaute Junior
Re : Insérer des lignes automatiquent

Salut Hasco,

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 !!!

Bonne soirée à toi.

Cordialement
 
G

Guest

Guest
Re : Insérer des lignes automatiquent

hello,

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.

A++ l'ami
 
Dernière modification par un modérateur:
G

Guest

Guest
Re : Insérer des lignes automatiquent

Re hello,

J'ai trouvé l'erreur. Dans la ligne:

Code:
        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:

Code:
Case "OBSERVATION", "MACHIN", "TRUC", "BIDULE"

A+
 
Dernière modification par un modérateur:

joelpelle

XLDnaute Junior
Re : Insérer des lignes automatiquent

Bonsoir Hasco,

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.

La macro fonctionne impec mais ne propose pas de mot de passe.


,

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.:eek:

Après plusieurs essais de protection avec MDP, cela fonctionne, et j'arrive à entrer les données que je veux.bizarre :confused:
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 :D

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.

Je continue à chercher cependant.

Excellente soirée à toi.

Très cordialement

Joël
 

Pièces jointes

  • Rapport Hebdo Matrice.zip
    39.4 KB · Affichages: 19
Dernière édition:
G

Guest

Guest
Re : Insérer des lignes automatiquent

Joël,

'----------------------------------------------------------------------
' 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:

Code:
Sheets("Rapport").UnProtect PassWord:= tonMotDePasse

Et ta feuille est déprotégégée.

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és de VBAProject" 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.

A+
 
Dernière modification par un modérateur:

joelpelle

XLDnaute Junior
Re : Insérer des lignes automatiquent

Bonsoir Hasco,

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. :confused:
Détaillé, compréhensible, professoral (dans le bon sens du terme). :p

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 ! :D

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.

A bientôt Hasco, et encore merci pour tout.