Aide exo excel + vba

Signaler
Messages postés
10
Date d'inscription
mercredi 13 février 2008
Statut
Membre
Dernière intervention
14 février 2008
-
Messages postés
10
Date d'inscription
mercredi 13 février 2008
Statut
Membre
Dernière intervention
14 février 2008
-
Bonjour,
je suis édiante en droit et cette année j'ai de l'informatique  Jai un exo V A à faire et je suis completement perdue
j'ai besoin d'aide  j'ai déja essayé de faire plusieurs choses
je vous transmet le fichier excel et le sujet par ce lien :
http://www.sendspace.com/file/rd2pr8

Merci  d'avance pour votre aide
audrey

19 réponses

Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
si tu exposais ici les points bloquants....

parce qu'une adresse ephemere ou exterieure, c'est limite, deja que le fait de faire faire ses exo...

on veut bien aider, t'expliquer, mais exposes nous ton probleme, pas l'enoncé de l'exo
Messages postés
10
Date d'inscription
mercredi 13 février 2008
Statut
Membre
Dernière intervention
14 février 2008

Bien, effectivement, je suis désolé que ca été pris de cette maniére.
En fait, j'ai fait la première question, je bloque sur la deuxième, je ne sais pas du tout comment m'y prendre.
Je peux pas t'en dire plus, car je n'est pas compris tout simplement.
Je cherche un cou de pouce, et des explications.

Merci de m'avoir répondu,

Audrey
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
il ne m'est pas possible de lire ton Zip (sécurité)
pourrais tu exposer ici ton probleme ?
Messages postés
10
Date d'inscription
mercredi 13 février 2008
Statut
Membre
Dernière intervention
14 février 2008

J'ai testé mon zip avant de l'envoyer. tout le monde arrive le dézip.
Manque de coopération. sympa pour les nouveaux adhérants l'accueil!
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
Ton zip est surement niquel...
Mais je suis au boulot.
je n'ai pas accès a certains sites, dont celui sur lequel tu as posté ton zip.

trois post que je t'ecris pour te demander de mettre ici ton probleme si tu veux que l'on puisse t'aider. je ne sais toujours rien de ce qui te gène.

j'ai pourtant l'impression le forum est reactif et que l'on a une réponse a ses problemes assez rapidement...

quant a l'accueil, excuses moi si je ne dit rarement bonjour et tout le verbiage de rigueur. pas de temps a perdre avec ca, je vais droit au but, point barre.

Comme je l'ai dit, je suis, comme bien d'autres tout a fait disposé a t'aider, a condition que tu nous en fournisse les moyens.
Messages postés
10
Date d'inscription
mercredi 13 février 2008
Statut
Membre
Dernière intervention
14 février 2008

ok allons droit au but comme tu dis.
j'ai eu que 6 heures de cours d'informatique qui est pour moi du chinois.
chacun son domaine.
alors pour la question 2 je dois présenter le nombre d'employé grace à une fonction VBA. en gros le nombre d'employé total doit augmenter automatiquement dès que je rajoute un employé dans mon tableau sur excel.
on a pas vu comment faire en cours je suis bloquée la dessus
désolé que tu ne puisses pas lire mon ZIP ca aurait été plus facile pour t'expliquer ce qui me bloque.
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
il te faut une macro VBA, donc...
pas une fonction Excel genre

=NBVAL(J20:J56)

pour ajouter un employé, tu l'ajoute simplement a la suite du tableau, non ?
Messages postés
10
Date d'inscription
mercredi 13 février 2008
Statut
Membre
Dernière intervention
14 février 2008

oui pr l'employé tu l'ajoutes simplement dans le tableau
faut que le nombre d'employé se mette à jour automatiquement grace a VBA
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
tu peut peut etre te contenter d'un truc de ce genre :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Long
Dim nCount As Long
    '# Si on modifie une cellule qui se trouve au minimum ligne 3...
    If Target.Row > 2 Then
        '# On parcoure toutes les lignes de 3 a la dernière ligne utilisée
        For i = 3 To Target.Worksheet.Cells.SpecialCells(xlCellTypeLastCell).Row
            '# Si la cellule en colonne 1, ligne i est renseignée...
            If Target.Worksheet.Cells(i, 1).Text <> "" Then
               '# On incrémente le compteur
                nCount = nCount + 1
            End If
        Next i
        '# On écrit le nombre d'elements dans A1
        Target.Worksheet.Range("A1").Value = nCount
    End If
End Sub

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Messages postés
10
Date d'inscription
mercredi 13 février 2008
Statut
Membre
Dernière intervention
14 février 2008

ok merci beaucoup je vais essayer pour voir ce que ca donne
Messages postés
10
Date d'inscription
mercredi 13 février 2008
Statut
Membre
Dernière intervention
14 février 2008

j'ai essayé de faire avec ce que tu m'as dis mais je dois mal mettre les choses parce que ca ne marche pas. je te fais un copier coller de ce que j'ai marqué dans le visual basic il y a aussi ce que j'ai fait pour la question 1.
Pour le nombre d'employé je l'ai mis dans la cellule A2
Sub tableau_des_employés()

Dim lig As Integer
Dim col As Integer
Dim rep As String

lig = Worksheets("tableau des employés").Cells(2, 1).Value + 1
col = 1

rep = InputBox("avez vous un autre employé à saisir? [o/n]")
While rep = "o"

Worksheets("tableau des employés").Cells(lig, col).Value = lig - 3

Worksheets("tableau des employés").Cells(lig, col + 1).Value = InputBox("Veuillez saisir le nom et prénom")
Worksheets("tableau des employés").Cells(lig, col + 2).Value = InputBox("Veuillez saisir l'adresse")
Worksheets("tableau des employés").Cells(lig, col + 3).Value = InputBox("Veuillez saisir le numéro de Sécurité sociale")
Worksheets("tableau des employés").Cells(lig, col + 4).Value = InputBox("Veuillez saisir l'emploi")
Worksheets("tableau des employés").Cells(lig, col + 5).Value = InputBox("Veuillez saisir le salaire de base")
Worksheets("tableau des employés").Cells(lig, col + 6).Value = InputBox("Veuillez saisir l'heure de base")
Worksheets("tableau des employés").Cells(lig, col + 7).Value = InputBox("Veuillez saisir heures supplémentaires + 25%")
Worksheets("tableau des employés").Cells(lig, col + 8).Value = InputBox("Veuillez saisir heures supplémentaires + 50%")

rep = InputBox("avez vous un autre client à saisir? [o/n]")

lig = lig + 1

Wend

Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Long
Dim nCount As Long

If Target.Row > 2 Then
       
For i = 3 To Target.Worksheet.Cells.SpecialCells(xlCellTypeLastCell).Row
           
If Target.Worksheet.Cells(2, 1).Text <> "" Then
             
nCount = nCount + 1
End If
Next i
    
Target.Worksheet.Range("7").Value = nCount (j'ai mais 7 parce que j'ai 7 employés mais je ne sais pas si c'est ca qu'il faut mettre)
End If

End Sub
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
9
salut,


pour faire plus simple mais je ne suis pas sur que cela reponde completement a la question

J'ai fait une compile des 2 solutions proposées par Renfield


Private Sub Worksheet_Change(ByVal Target As Range)

Dim i As Long

Dim nCount As Long

    '# Si on modifie une cellule qui se trouve au minimum ligne 3...

    If Target.Row > 2 and Target.Column = 2 Then 'le
Target.Column = 2 sert a verifier si le changement a eu lieu dans la
colonne qui contient les noms ici je suppose que les noms sont en
colonne B d'ou le 2

        nCount = Application.CountA(Columns(Target.Column))

        Target.Worksheet.Range("A1").Value = nCount

    End If

End Sub

A+
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
9
ouups ! poster trop tard

ton code il est ou dans le code de la feuille ou dans un module ?

Target.Worksheet.Range("7").Value = nCount (j'ai mais 7 parce que j'ai
7 employés mais je ne sais pas si c'est ca qu'il faut mettre)

non ! Range("A1").Value specifi la cellule dans la quelle tu veux afficher ton resultat si pour toi ce n'est pas la cellule A1 remplace le par l'Adresse de ta cellule

n'oubli pas de repondre a ma question  et precise en meme temps le nom de la colonne ou ce trouve la liste de noms

A+
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
9
...
bon... j'avais pas bien regardé ton dernier message et y a des choses a corriger.

Pour commencer une remarque global car je vois que tu as beaucoup de chose a saisir et le inputbox n'est pas la meilleur solution. Je te propose de continuer comme ca jusqu'a ce que l'on est obtenu un premier resultat autrement dit que ce que tu as deja fait marche. En suite le mieux serait que tu remplace ces inputbox par un Userform(formulaire).

remplace Wend par End Sub

Comment tu lance ta macro ?

A+
Messages postés
10
Date d'inscription
mercredi 13 février 2008
Statut
Membre
Dernière intervention
14 février 2008

oh la la ca yé je suis perdue ca devient pas mal compliqué la...
je sais pas si ta lu le début de la conversation mais en fait j'ai eu que 6 heures de cours d'info et j'ai un projet à faire pas mal compliqué.
par contre faut garder les inputbox c'était l'une des indication du prof;
donc pour ce qui concerne la cellule c'est la cellule A2 pour moi donc ca ok j'ai modifié.
Pour le code si c'est dans une feuille ou un module tu entends quoi par la?
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
9
...
Quand tu es dans l'editeur VBA tu as en haut a gauche ton projet, en generale : VBAProject (MonFichier) ou MonFichier est le non du fichier. Donc en haut a gauche tu as ton projet et sont arborescence qui ressemble a ca :

VBAProject (MonFichier)
    Microsoft Excel Objects
          Sheet1(Feuil1) ' si tu cliques 2 fois ici tu ouvres la page de code de la feuille
          Sheet2(Feuil2)
          Sheet3(Feuil3)
          ThisWorkbook 'si tu cliques 2 fois ici tu ouvres la page de code du fichier excel
    Modules
          Module1 'si tu cliques 2 fois ici tu ouvres la page de code du module

Note que le module n'existe pas par defaut il faut soit l'inserer par le menu insert module ou soit en utilisant l'enregistreur de macro d'excel qui vas lui meme creer le module.
Retient aussi :
-que pour VBA le fichier, la feuille, une cellule, une plage de cellules, une colonne , une ligne sont des objets
-qu'il existe une autre sorte d'objet que l'on appel Controls comme les boutons, les UserForm (formulaire), TextBox,
listbox etc.
-que les objets peuvent etre imbriqué par exemple : par defaut c'est le cas des feuilles dans le fichier autre exemple: un bouton dans une feuille, un bouton dans un UserForm.
- que les objets imbriqés on une relation parent enfant. Par exemple si tu as une textbox dans une feuille, pour pouvoir ecrire une valeur a l'interieur de cette textbox tu doits passer par sont parent. Donc soit directement depuis le code de la feuille soit en appelant la feuille (c'est un peu comme demander l'autorisation a sont parent) comme ceci

dans le code la feuille on peu l'ecrire comme ceci:
TextBox1.Value = "toto"

si ce n'est pas dans la feuille mais par exemple dans un module tu doits l'ecrire comme ceci
WorkSheet("Feuil1").TextBox1.Value = "toto"

Pour une Cellule c'est la meme chose car comme je l'ai dit plus haut une cellule est un objet dans une feuille tu peux maitenant comprendre pourquoi il est important de savoir ou tu ecris ton code. Donc je pense que tu doit etre capable de repondre a mes questions

A+
Messages postés
10
Date d'inscription
mercredi 13 février 2008
Statut
Membre
Dernière intervention
14 février 2008

merci pour cette explication. il s'agit d'un module
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
9
...
bien ! passont a la suite :

je continu mes explications... une chose importante pour la suite "les evenements"

les objets de facon generale peuvent etre modifiés, modificateurs, actionnés, actionneur etc, ce sont des evenements.
Ces evenement sont concretement : un clique, un double clique, un deplacement de sourie, un changement de valeur une activation, une desactivation etc. Ces evenement peut etre detecté  Vrai ou Faut, Vrai si ils ont eu lieu ou faut si il non pas eu lieu.
Par exemple si tu modifis le contenu d'une cellule d'une feuille cette derniere est capable de te renvoyer un evenement pour te dire qu'une cellule a ete modifie et est dans le meme temps, capable de te dire la quelle.

Note encore que par contre pour les cellules il n'y pas d'evenement direct ou propre il faut passer par la feuille.
Pour compliqué un petit peu , apres je m'arrete pour les evenement, les controls (voir explication message precedent) on leurs evements propres. C'est a dire qu'un bouton une TextBox etc, peuvent renvoyer eux meme un evenement et ce meme si il sont dans une feuille. Ceci pour dire qu'il y a different niveau de relation parent/enfant Pour imager ces differents niveaux:

un bébé qui a manger ne sait le dire tout seul il faudra pour le savoir demander a c'est parent, ici cas de la cellule enfant de la feuille. Par contre un adolescent qui a mangé est directement capable de te dire, dans ce cas pas besoin de demander aux parents cas d'un control dans une feuille. Attention un adolescent peut avoir mangé sans que ses parrents le sachent.

Ceci est loin d'etre complet cela ne sert qu'a t'aider a comprendre la suite que voici

Le code que Renfield t'a donné est lié a l'evenement change de la feuille. Il faut donc que tu le place dans le code de la feuille. Tu peux aussi utiliser le code suivant (deja donné plus haut) mais pas les 2 en meme temps.

Private Sub Worksheet_Change(ByVal Target As Range) 'ici target est une variable capable de renvoyer toute les infos qui concerne la cellule qui vient de changer
Dim nCount As Long
    '# Si on modifie une cellule qui se trouve au minimum ligne 3...
    If Target.Row > 2 and Target.Column = 2 Then 'le
Target.Column = 2 sert a verifier si le changement a eu lieu dans la
colonne qui contient les noms ici je suppose que les noms sont en
colonne B d'ou le 2
        nCount = Application.CountA(Columns(Target.Column)) ' ici countA est l'equivalent du NbVal de la version francaise garde le countA pour VBA car il est anglophone.
        Target.Worksheet.Range("A1").Value = nCount
    End If
End Sub

Vala , jespere que cela commence a etre plus claire pour toi

A+

PS je ne ferais pas ca pour toutes les questions. Une fois n'est pas coutume
Messages postés
10
Date d'inscription
mercredi 13 février 2008
Statut
Membre
Dernière intervention
14 février 2008

merci pour ton aide ca m'a aidé à mieux comprendre.