Ajouter une ligne dans un tableau sur une autre feuille

Bonjour à tous,

Je ne parviens pas à trouver les solutions à mes attentes en Excel VBA, alors je me permets de m'inscrire ici pour solliciter vos lumières

Je précise que ne n'ai pas apris à programmer en VBA (c'est jusque là de la débrouille), cependant, j'ai une idée bien précise de ce que je veux et je ne trouve rien qui semble y répondre dans les forums.

Alors, aux bonnes volontés voici ce que je voudrais:

j'ai un classeur (EMPLOYEES_INFORMATION) qui comprend 4 feuilles (Employees, Ex-employees,Checklist et InformationManagement).

La feuille InformationManagement comporte 4 boutons qui ouvrent les autres feuilles.

Il y a deux boutons simples qui ouvrent chacun une feuille :

  • 1 qui ouvre Employees
  • 1 qui ouvre Ex-employees
(jusque là c'est bon pour moi).

Un autre bouton ouvre Checklist comportant des cases à remplir et à cocher.

C'est là que ça se complique:

je veux avant tout que

soit à l'ouverture de cette feuille une ligne supplémentaire soit créée dans un tableau déjà existant (Employees)

soit lors de la saisie du nom de l'employé concerné (en cellule D4 dez Cheklist pour être excate).

Une fois cette étape effectuée je voudrais qu'à chaque case coché (dans Checklist), "Yes" soit ajouté dans la cellule correspondante de la feuille Employees. Checklist n'étant pas un formulaire mais une "interface" ludique pour l'utilisateur.

Voilà, pour le moment, je vais m'arréter là.

Si le challenge vous tente, merci de me faire par de vos propositions.

Je suis toute ouïe.

Merci à tous

Bien à vous

Zoé

Bonjour Zoé, le challenge me tente mais ton fichier joint (vierge de données confidentielles) est indispensable pour démarrer

Bonjour Psycho,

Merci de te lancer mais ça risuque de ne pas être simple.

Voilà le fichier (je ne m'explique pas qu'il ne contienne plus les deux macros qui fonctionnaient dedans mais c'est pas grave, je les y ajouterai à nouveau plus tard).

Bonne chance,

Bien à toi,

Zoé

Zoé55 a écrit :

Voilà le fichier

où ça ?

Ail!

il est trop gros et ne passe pas.

je vais voir pour rédire ça...


Cette fois ça devrait être bon

Bonjour à tous,

Je vois que mon problème est ardu personne ne parvient à trouver de solutions

En tout cas, je sais déjà que j'ai fait une erreur dans mon extension de fichier que j'aurai dû enregistrer en .xlsm pour conserver les macro que j'y avait déjà mises

Après diverses discussions (ailleurs que sur ce forum) je sais aussi qu'il ne me sera probablement pas possible d'avoir un seul bouton pour la création d'une ligne supplémentaire dans un tableau et l'ouverture d'une feuille en même temps. Ce n'est pas grave en soi, un second bouton fera l'affaire.

Voilà, pour les curieux qui se sont déjà essayés et qui attendent d'en connaitre la résolution, je m'éfforcerais de venir l'apporter dès que je l'aurais.

Bien à vous

Zoé

Salut Zoé, je n'avais pas vu que tu avait joint ton fichier finalement.

Je regarderai dès que j'ai 5min (dur dur pour l'instant).

Bonjour Chers Fans (on se motive comme on peu )

Voilà, je vous joints mon fichier avec ce que j'ai déjà fait dedant (comme une grande ).

J'ai créé une macro qui copie ma feuille NewEmployee et un bouton SAVE qui renomme la feuille du nom de l'employée une fois le bouton SAVE cliqué.

Maintenant, j'aimerai qu'une ligne soit créée lorsque je clique sur le bouton SUBMIT de cette feuille NewEmployee et que celle-ci soit rempli avec les cases cochées (pas facile hein?).

Si j'y arrive je vous tiens au courant cher public!

Psycho, merci d'essayer de m'aider. C'est toujours plus sympas de savoir que qu'elqu'un est plein de bonne volonté.

A bientôt

Zoé

57zoe55.xlsm (240.34 Ko)
Zoé55 a écrit :

Psycho, merci d'essayer de m'aider. C'est toujours plus sympas de savoir que qu'elqu'un est plein de bonne volonté.

c'est pas la volonté qui manque c'est le temps malheureusement (ha si les journées pouvaient faire 48h)

J'ai une fin de semaine chargée, si la semaine prochaine est plus calme je regarderai ton code en détail.

C'est la fin de mois qui veut ça.

Pour moi c'est plutôt le début de mois qui est plus chaud mais rassures-toi, il n'y a pas urgence pour le fichier Excel. Je me mets au VBA et c'est en forgeant qu'on deviens forgeron alors...

Bon courage pour ta fin de semaine.

Zoé

Bonsoir Zoé et Psycho,

Zoé, si Psycho, n'a pas le temps de le faire d'ici la fin de semaine prochaine, envoie-moi un mail privé je prendrai la main.

J'ai regardé rapidement, le code n'est pas très compliqué à mettre en place, mais il faut faire du paramétrage pour que tu t'y retrouves entre les cases à cocher et les colonnes. Si un jour tu décides d'ajouter ou de supprimer une case à cocher, il ne faut pas que tu sois obligé de faire une modification dans ton code, il faut donc le prévoir grâce à la mise en place d'un paramétrage. Quand je fais ce genre de choses, je nomme les colonnes du même nom que les cases à cocher. Cela donne quelque chose du genre Case à cocher OWA=ChkOWA (au lieu de CheckBox12 dans ton fichier) et l'entête de la colonne R, donc la cellule R1=OWA. Ensuite il suffit de faire une boucle de quelques lignes pour mettre à jour la fiche d'un nouvel employé. Cette méthode permet de faire très simplement l'ajout d'une colonne et de l'actualiser par ton formulaire, il faut juste créer la connexion entre l'entête de colonne et la CheckBox.

Sinon, il serait sans doute préférable de remplacer certaines CheckBox par des OptionButton, par exemple pour le clavier (c'est soit l'un, soit l'autre... Non ?). de plus l'interaction est différente entre les CheckBox et les OptionButton : La CheckBox à sa propre colonne, tandis que les OptionButtons doivent se partager une colonne par groupe.

De la même façon, il me semble important de nommer les cellules qui doivent remplir la table "employees", par exemple nommer la cellule D4 en "FirstName" pour pouvoir la déplacer dans la feuille sans perturber la mise à jour du programme.

En résumé, plus tu pourras paramétrer ton fichier, plus le code sera simple et efficace et le bonus est qu'il sera très facile de faire évoluer ton formulaire

Par contre, dans la façon de mettre à jour la table "employees", de te conseille de faire toute la saisie sur la feuille et ensuite, en fin du formulaire, mettre à disposition un bouton "Valider" qui renseignera la feuille "Employees" qui pourra en même temps faire un certain nombre de contrôles (par exemple "Choix du clavier obligatoire".

Je te conseille donc de voir avec Psycho si tu souhaites faire évoluer ce fichier au fil de l'eau et Psycho, te proposera sa solution qui est très probablement différente de la mienne.

A+

Benoît Marchand

[Benead]

Bonjour Benead,

Merci pour tous ces conseils qui m'ont l'air très judicieux

Cette semaine c'est un peu chaud au niveau boulot boulot, mais je ne manquerais pas d'explorer les pistes que tu me proposes dès que j'aurai un peu de temps pour ça

rdi:

Zoé

Bonjour Psycho, Bonjour Benead, Cher public

Au risque de paraitre un peu ridicule , je dois vous avouez que... je patauge un peu

Si une âme charitable pouvait me souffler un petit conseil pour les checkbox et autres beckbouton ça serait top

Milles mercis

Zoé

Salut Zoé

Bon je me suis penché sur ta feuille mais les CheckBox sont des objets que je n'ai pas l'habitude de manipuler

J'ai commencé par essayer de compter tes CheckBox avec ce code :

Sub compte_checkbox()
Dim Compteur As Integer
Dim Obj As OLEObject
    'boucle sur les objets de la Feuil1
    For Each Obj In Sheets(1).OLEObjects
        'verifie s'il s'agit d'un CheckBox
        If TypeOf Obj.Object Is MSForms.CheckBox Then
            Compteur = Compteur + 1
        End If
    Next Obj
    MsgBox Compteur
    End Sub

Aucun mérite, j'en ai trouvé un sur le net que j'ai adapté.

Ce qui me donne 77 CheckBox ; partant de là je me suis dit que j'allais créer une boucle de 77 itérations pour copier les valeurs de tes CheckBox dans les cases de ton tableau :

Sub SUBMIT()
dim Compteur as integer
'on se place sur la 1ere ligne vide de la liste
Range("B1000").End(xlUp).Offset(1).Select

For Compteur = 1 To 77
ActiveCell.Offset(0, Compteur + 6) = Sheets(1).CheckBox1.Value
Next Compteur
End Sub

Dans ce code j'utilise la variable "Compteur" pour me déplacer dans les cellules à remplir en fonction du n° de la CheckBox.

Tel que c'est écrit ça va entrer la valeur de la CheckBox1 dans toutes les cellules du tableau, et c'est la que je bloque.

Je pensais que

ActiveCell.Offset(0, Compteur + 6) = Sheets(1).CheckBox(compteur).Value

allais incrémenter le n° de la checkbox, et là on avait fait le plus dur, mais ça ne marche pas.

CheckBox(compteur) ne donne pas CheckBox1

Il faut donc trouver une solution pour incrémenter le n° de CheckBox ou trouver une manière différente.

J'ai trouvé

Ci joint ton fichier, avec la macro SUBMIT :

Sub SUBMIT()
Dim Compteur As Integer

'on se place sur la 1ere ligne vide de la liste
Sheets("employees").Activate
Range("B1000").End(xlUp).Offset(1).Select
'Copie des cellules nom / prenom
ActiveCell.Value = Sheets(1).Range("FName").Value
ActiveCell.Offset(0, 1).Value = Sheets(1).Range("LName").Value

'boucle pour copier les valeur des checkbox
For Compteur = 1 To 77
ActiveCell.Offset(0, Compteur + 6) = Sheets(1).OLEObjects(Compteur).Object.Value
Next Compteur
End Sub

Elle colle donc les valeurs des CheckBox dans les cellules d'une ligne de la feuille Employees.

Il faut que tu adaptes l'ordre des cellules à celui des Checkbox

Évites un maximum les cellules fusionnées, le VBA n'aime pas du tout ça :

Dans la feuille employees, B4 et B5 sont fusionnées, ça m'oblige à passer par B1000 puis à remonter pour trouver la dernière ligne vide. Sans fusion, on pourrait partir d'en haut et trouver la 1ere cellule vide, alors qu'actuellement le jour ou les 1000 lignes sont remplies ça ne marchera plus (on peux bien sur partir de la dernière cellule de la feuille, mais c'est pour t'expliquer).

23zoe55.xlsm (226.63 Ko)

Salut Psycho,

j'ai testé la bête, et c'est vrai que le remplissage se fait.

c'est impressionnant de voir comme ça se rempli

Petite question:

Il ne copie que des "true" ou des "false" dans le tableau de façon automatique. Je devrais pouvoir trouver la formule pour que les "true" soit restitués en "Yes" dans mon tableau et "No" sinon mais comment faire pour les cellules qui doivent copier des données entrées manuellement (par exemple un numéro de téléphone)?

Bah, je sais je suis une emmerdeuse, je travaille entrouvée d'homme et il parait que c'est la particularité des femmes d'être chiantes: faut savoir cultiver sa différence

Zoé

Ho y à pas que des femmes chiantes, je te rassure

Pour transformer True / False en Yes / No je transforme le code comme ça :

Sub SUBMIT()
Dim Compteur As Integer
'on se place sur la 1ere ligne vide de la liste
Sheets("employees").Activate
Range("B1000").End(xlUp).Offset(1).Select
'Copie des cellules nom / prenom
ActiveCell.Value = Sheets(1).Range("FName").Value
ActiveCell.Offset(0, 1).Value = Sheets(1).Range("LName").Value

'boucle pour copier les valeur des checkbox
For Compteur = 1 To 77
    Select Case Sheets(1).OLEObjects(Compteur).Object.Value
        Case Is = True
        ActiveCell.Offset(0, Compteur + 6).Value = "Yes"
        Case Is = False
        ActiveCell.Offset(0, Compteur + 6).Value = "No"
    End Select
Next Compteur
End Sub

Pour copier les entrées autres que des CheckBox inspires toi des 2 lignes (que j'ai fait exprès pour l'exemple) sous le commentaire

'Copie des cellules nom / prenom (est-ce que tu les comprend ?)

J'ai utilisé FName et LName parce que j'ai nommé les cellules comme ça dans la 1ere feuille, mais tu peux mettre les adresses des cellules aussi ("D4"), ("D5").

Et dé-fusionne les cellules (utilises "centré sur plusieurs colonnes" pour la mise en forme), sinon il va arriver des bricoles avec le VBA.

Je testerai la chose dès que j'aurai quelques minutes, là je suis connectée mais je suis ailleurs faut que je bosse sur d'autres tâches (priorité oblige )

Zoé

Hello Psycho,

j'ai essayé de bricoler quelque chose (+ ou - inspirée par ton code et une pulsion de bricolage) qui a fait planté mon excel

Quand j'ai ouvert mon fichier (heureusement une copie ) ça avait une drôle de tête et plus de macro

Je ne sais pas ce que j'ai fait mais j'ai tué l'excel, enfin... il contenait encore les données fictives entrées donc, cétait pas si destructeur au final .

Je vais me repencher sur la question (en essayant de ne pas encore avoir le syndrom de blonde )

A +

Zoé

C'est en bricolant qu'on devient .. heu bricoleuse ?

Ton excel à planté comment ? lors de l’exécution de ta macro ?

Peut-être une boucle mal bouclée ou trop bouclée qui à saturé la mémoire du PC ...

Rechercher des sujets similaires à "ajouter ligne tableau feuille"