Macros dans Excel... Je suis perdu !

Fermé
Student@School Messages postés 11 Date d'inscription samedi 26 juillet 2008 Statut Membre Dernière intervention 31 août 2008 - 26 juil. 2008 à 22:12
Student@School Messages postés 11 Date d'inscription samedi 26 juillet 2008 Statut Membre Dernière intervention 31 août 2008 - 31 août 2008 à 16:00
Bonjour,
Je suis nouveau sur ce forum et je ne connaios pas forcément vos modes de fonctionnement. Alors, j'espère ne pas faire d'erreurs en m'adressant à vous !

Mon problème concerne l'utilisation des macros dans Excel. Ce que je souhaite faire ne semble pas impossible (j'ai fouillé dans de nombreux forums !) mais je bute sur un détail... et inutile de dire que je ne connais absolument rien aux macros !

Voilà de quoi il s'agit :
Dans un classeur Excel, je dispose d'un premier onglet nommé "Personnels". Je souhaiterais que les onglets suivants (le second, le troisième, etc...) puissent prendre automatiquement les noms des personnels qui seraient entrés dans ce premier onglet au fur et à mesure de leur modification.

Exemple :
5 personnels sont renseignés dans mon onglet "Personnels", dans les cellules "A2, A3, A4, A5 et A6". Je garde A1 pour l'en-tête. J'ai trouvé comment modifier le nom de l'onglet dans lequel je travaille mais je voudrais modifier le nom de feuil2, feuil3, feuil4,... par les valeurs entrées dans "Personnels-A2, A3,etc...".
Et là, je n'ai pas trouvé de solution !

Ce problème a t-il une solution et, si oui, pouvez vous m'aider ???

D'avance merci de votre contribution
A voir également:

19 réponses

Student@School Messages postés 11 Date d'inscription samedi 26 juillet 2008 Statut Membre Dernière intervention 31 août 2008
27 juil. 2008 à 14:00
Bonjour,
avez-vous une petite idée au sujet de ma question posée hier ???

Je ne parviens pas à indiquer dans la macro qu'il faut aller chercher les données dans l'onglet 1 !... Si vous pouvez m'aider, même seulement m'aiguiller, je suis preneur.

D'avance merci à tous
0
LePierre Messages postés 249 Date d'inscription samedi 8 mars 2008 Statut Membre Dernière intervention 2 août 2012 337
27 juil. 2008 à 18:17
bonjour

essaye ceci :
Sub Test()
    Sheets("Feuil1").Select    
    For i = 1 To 5
        Nom = Cells(i + 1, 1).Value
        Sheets(i + 1).Name = Nom
    Next i
End Sub

à plus
0
thev Messages postés 1852 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 23 avril 2024 681
27 juil. 2008 à 21:38
Autre solution

Sub test()

'**la ligne est initialisée à 2
i = 2

'**pour chaque feuille se trouvant dans le classeur actif
For Each onglet In ActiveWorkbook.Worksheets

'**si ce n'est pas la feuille "personnels" alors
If Not onglet.Name = "Personnels" Then
'**le nom de la feuille est attribuée par la valeur de la celulle Ai de la feuille "Personnels"
onglet.Name = Worksheets("Personnels").Columns("A").Rows(i).Value
'**la ligne est incrémentée de 1
i = i + 1
End If

Next


End Sub
0
Student@School Messages postés 11 Date d'inscription samedi 26 juillet 2008 Statut Membre Dernière intervention 31 août 2008
28 juil. 2008 à 11:23
Bonjour,
merci à Lepierre et à Thev pour leur participation... mais je dois me débrouiller comme un manche parce que je n'ai aucun résultat !

Alors, j'ai une ou 2 précision à demander :
~ Primo : le code doit bien être renseigné en cliquant droit sur l'onglet puis "Visualiser le code". Dites moi si je me trompe !...
~ Secundo : Le code doit être renseigné sur les onglets "Feuil1", "Feuil2",... Pas sur l'onglet "Personnels" ?????

Ben oui, je vous l'ai dit, je débute !

J'avais prévu un fichier exemple que j'aurais voulu vous passer mais je ne sais où et comment l'attacher. Je ne sais pas si c'est possible d'ailleurs ????

Merci encore pour votre aide
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
thev Messages postés 1852 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 23 avril 2024 681
28 juil. 2008 à 14:10
Mon code peut être mis sous n'importe quel onglet mais le mieux est de le mettre directement sous le classeur.

1- onglet "Personnels" --> visualiser le code
2- dans la fenêtre Visual Basic, sélectionner : Thisworkbook et double-cliquer pour obtenir la fenêtre du code du classeur
3- coller le code


Pour exécuter la macro : menu Outils --> macro --> macros --> exécuter.
0
Student@School Messages postés 11 Date d'inscription samedi 26 juillet 2008 Statut Membre Dernière intervention 31 août 2008
29 juil. 2008 à 15:44
Bonjour,
Merci pour ta solution... Ca marche. En fait, j'affectais la macro à une feuille et non au classeur. Du coup, je n'avais aucun résultat !
L'erreur était de mon fait !

Par contre, je voudrais savoir s'il est possible d'automatiser l'exécution de la macro à chaque modification de cellule de la colonne A de l'onglet "Personnels".
En gros, je valide le changement de nom du personnel en A2 et le deuxième onglet change de nom aussitôt...
Est-ce jouable

Si j'ai bien compris, dans le fichier exemple de Lepierre, le bouton "Bouton" semble exécuter la macro par la commande décrite ici :
"Pour exécuter la macro : menu Outils --> macro --> macros --> exécuter"

Je souhaiterais qu'elle puisse s'exécuter à chaque modification de cellule de "A2" à "Ax"

Merci encore pour votre aide

@+
0
LePierre Messages postés 249 Date d'inscription samedi 8 mars 2008 Statut Membre Dernière intervention 2 août 2012 337
28 juil. 2008 à 14:16
bonjour

Vas voir sur : https://silkyroad.developpez.com/VBA/DebuterMacros/
pour apprendre à utiliser l'éditeur de macro

La macro est à placer non pas dans une feuille mais dans un module.
Regarde l'exemple ci joint : https://www.cjoint.com/?hComcVuQ7k

Pour nous faire passer ton fichier, utilise : https://www.cjoint.com/

à plus
0
Student@School Messages postés 11 Date d'inscription samedi 26 juillet 2008 Statut Membre Dernière intervention 31 août 2008
29 juil. 2008 à 11:30
Bonjour,
Super' !!!! après essais, la macro de Thev fonctionne. L'erreur venait de moi. J'avais affecté la macro à la feuille et non au classeur !...
Merci beaucoup. Je ne vous poste pas mon exemple car vous avez compris ma demande.

Quant à l'exemple de Lepierre, j'imagine que le bouton permet le raccourci :
1- onglet "Personnels" --> visualiser le code
2- dans la fenêtre Visual Basic, sélectionner : Thisworkbook et double-cliquer pour obtenir la fenêtre du code du classeur
3- coller le code
... évoqué par Thev

Ce que je souhaiterais, c'est que la macro s'exécute quand je valide le changement en cellule A2, A3,... une modification automatique après la saisie dans la cellule.
Est-ce possible ?

Dernière question : La macro sera t-elle "protégée" contre la modification de petits plaisantins si je protège les feuilles Excel et le classeur

Merci de votre coup de main.
0
LePierre Messages postés 249 Date d'inscription samedi 8 mars 2008 Statut Membre Dernière intervention 2 août 2012 337
29 juil. 2008 à 19:15
bonjour

Voici le fichier modifié pour une mise à jour automatique : https://www.cjoint.com/?hDthTcswSQ

Pour protéger tes macros, il faut, à partir de l'éditeur de VBA dans le menu Outils --> Propriétés de VBAProject... --> onglet Protection : cocher Verrouiller le projet et indiquer un mot de passe et OK

à plus
0
thev Messages postés 1852 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 23 avril 2024 681
31 juil. 2008 à 11:08
Pour moi la solution est simple, il suffit d'affecter ce code à la feuille "Personnels"


Private Sub Worksheet_Change(ByVal Target As Range)
'***** code exécuté lorsqu'un événement de mofication d'une cellule de la feuille se produit


'** (si la colonne modifiée est la colonne n°1 (A))
If Target.Column = 1 Then
'** on exécute la macro nommée "test" du classeur
Call ThisWorkbook.test
End If

End Sub
0
Student@School Messages postés 11 Date d'inscription samedi 26 juillet 2008 Statut Membre Dernière intervention 31 août 2008
12 août 2008 à 16:04
Bonjour,
tout d'abord, un grand merci car mon fichier a vraiment pris forme grace à votre aide. J'ai mis le code de Thev et ça fonctionne plutôt bien. J'ai néanmoins encore quelques soucis et je vous transmets un fichier pour que vous puissiez visualiser ma demande assez simplement.

Mon fichier "Exemple.xls" (joint au lien indiqué par Lepierre) contient 5 feuilles. Le code entré me permet de chager les noms des différents onglets au fur et à mesure de la frappe (c'est ce qaue je souhaitais !).
L'entête de chacun des onglets (nom, prénom et service) est rempli automatiquement en fonction des données inscrites dans l'onglet "Personnels". Le but est d'avoir un onglet par personnel.

J'ai également prévu un onglet "Récapitulatif" qui, lui aussi, va chercher des infos dans l'onglet "Personnels" mais il doit aussi récupérer le solde d'heures de chaque personnel.
Le problème est que la récupération de l'information (le solde) doit se faire dans des onglets qui changent de noms !... Et là, Excel ne s'y retrouve pas !

Du coup, j'ai 2 questions :
1) Est-il possible d'empêcher le changement automatique de nom de l'onglet "Récapitulatif" (changement défin iç par la macro que vous m'avez créée) ?
2) Est-il possible que le feuillet "Récapitulatif" récupère les infos "Soldes" de chaque onglet soit avec la formule que j'ai mise dans ma feuille de calcul, soit avec quelque chose de + élaboré (une autre macro peut-être) ???

Voici l'adresse de mon fichier :
https://www.cjoint.com/?imqczIXBg5

D'avance merci pour vos lumières
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
12 août 2008 à 18:01
Bonjour à vous tous,
Si je puis me permettre d'entrer mon grain de sel ?...
Cette petite macro devrai répondre aux questions de notre amis...
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Static AncRg As Range, AncCell As String
Dim i As Integer
Dim FL1 As Worksheet
    On Error GoTo Sortie
    If AncRg.Column = 1 And AncRg.Row > 3 Then 'colonne A > ligne 3
        If AncCell = "" And AncRg.Value2 <> "" Then 'créer Nv feuille
            Set FL1 = ActiveSheet 'Pour y revenir après
            'Crée une nouvelle feuille et la place en dernier
            Worksheets.Add , Sheets(Worksheets.Count)
            Sheets(Worksheets.Count).Name = AncRg.Value2
            'Réactive la feuille où il y a les noms
            FL1.Activate
            FL1 = Nothing 'Supprime l'instance de FL1 pour éviter le dépassement pile.
        ElseIf AncCell <> "" And (AncCell <> AncRg.Value2) Then 'le nom en A1 à été modifié
            'recherche la feuille qui portait l'ancien nom
            For i = 1 To Worksheets.Count
                If Sheets(i).Name = AncCell Then
                'Modofie l'ancien nom de la feuille par le nouveau
                    Sheets(i).Name = AncRg.Value2
                    Exit For
                End If
            Next i
        End If
        
    End If
Sortie:
    Set AncRg = Target
    AncCell = Target.Value2

End Sub

Fonctionnement,
Si entrer nouveau nom dans une cellule vide de la colonne A crée une nouvelle feuille au nom définit dans la cellule.
Si modifie une cellule qui comporte déjà un nom, change l'ancien nom par le nouveau nom
Tu dit...
A+
EDIT: Attention, si nouveau classeur, pas de problème, si mettre la macro sur classeur existant il faut que la liste des noms corresponde déjà à la liste des feuilles.
Pour réinitialiser (éventuellement), supprimer toues les feuilles avec un nom et supprimer la liste et recommencer.
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
12 août 2008 à 18:18
En relisant ma macro, simplification du 2ém test
remplacer
'recherche la feuille qui portait l'ancien nom
            For i = 1 To Worksheets.Count
                If Sheets(i).Name = AncCell Then
                'Modofie l'ancien nom de la feuille par le nouveau
                    Sheets(i).Name = AncRg.Value2
                    Exit For
                End If
            Next i

par

   Sheets(AncCell ).Name = AncRg.Value2

0
Student@School Messages postés 11 Date d'inscription samedi 26 juillet 2008 Statut Membre Dernière intervention 31 août 2008
13 août 2008 à 11:21
Merci Lermite222.
Peux-tu me préciser si je dois affecter cette macro sur une feuille du classeur en particulier ou sur "ThisWorkBook" ?

Je n'ai pas testé pour l'instant.

D'avance merci
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
13 août 2008 à 13:58
Tu doit mettre la macro dans le module de la feuille où tu entre les noms à l'occurence la feuille "Personnels"
A+
0
Student@School Messages postés 11 Date d'inscription samedi 26 juillet 2008 Statut Membre Dernière intervention 31 août 2008
13 août 2008 à 15:35
Salut,
Ca fonctionne en partie... seulement, je suis obligé d'exécuter la macro manuellement (or, je veux que le nom d'onglet change "à la frappe") et j'ai aussi un message d'erreur bizarre !

Par contre, la référence à mes onglets qui changent de noms est bien respectée dans mon onglet récapitulatif...

Une idée ?

Merci et @+
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
13 août 2008 à 17:25
C'est que tu a pas mis la macro au bon endroit, si elle y était tu ne pourais pas l'activer manuellement ça donnerait une erreur.
Prend le classeur sur cijoint et test..

https://www.cjoint.com/?inrxIrMsh7
A+
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
13 août 2008 à 17:30
Dim FP as string
FP= "C:\Répertoir\SousRépertoir\NomFichier.xls" 'Le chemin complet + nom + extention
Workbooks.Open (FP)
Tient pas compte de cette réponse, sais pas comment elle est arrivée içi, et n'a rien à voir avec ton topic.
A+
0
Student@School Messages postés 11 Date d'inscription samedi 26 juillet 2008 Statut Membre Dernière intervention 31 août 2008
16 août 2008 à 18:03
Salut,
Bon, après quelques tests, ton fichier semble fonctionner... encore que j'ai des messages bizarres parfois... et puis surtout, je comprends pas tout ce qui se passe dans mon classeur ! c'est un peu trop sophistiqué et complexe pour le débutant que je suis...

Les lignes de codes que m'avait indiqué Thev (cf messages précédents !) fonctionnaient bien, sans erreur et semblaient un peu moins complexes...
Désolé mais j'ai pas eu beaucoup de temps pour étudier le code dans les macros Excel mais j'aurais souhaité que l'on puisse adapter ce code de façon à ce que mon onglet "Récapitulatif" ne soit pas affecté par la macro qui renomme les onglets n° 2, 3, 4, 5,...
Je souhaitais également que la référence de cellule dans la colonne D de l'onglet "Récapitulatif" soit automatiquement changée lors du renommage automatique de mes onglets.

J'avais mis le fichier suivant pour illustrer mon idée.
https://www.cjoint.com/?iqr7GfovmQ

Pensez vous que le code de Thev soit adaptable "simplement" pour obtenir ce que je souhaite ?

Merci à tous pour vos nombreuses participations
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
17 août 2008 à 00:59
ton fichier semble fonctionner
Semble ? ou fonctionne? et quel sont les messages bizarres parfois ?
Le petit problème avec target c'est qu'il est validé QUAND TU ENTRE DANS UNE CELLULE et non quand tu en sort, d'où le code qui te semble compliqué, en fait il ne l'est pas; il mémorise chaques cellule à l'entrée mais n'agit qu'a la sortie de la cellule, d'ou la mise à jour dés que tu fait une modif.
Sans celà, pas possible de mise a jour immédiate. Il faut revenir sur la cellule une deuxième fois.

j'aurais souhaité que l'on puisse adapter ce code de façon à ce que mon onglet "Récapitulatif" ne soit pas affecté par la macro qui renomme les onglets n° 2, 3, 4, 5,...
Tu peu ajouter ta feuille "Récapitulatif" au classeur que je t'ai passer il ne serra jamais affecté par les modif de la macro.
Et pour modifié la colonne D du classeur "Récapitulatif"
Sheets("Récapitulatif").Cells(LaLigne,4) = LaValeurQueTuVeuxDonner

et puis surtout, je comprends pas tout ce qui se passe dans mon classeur
Qui veux la fin, y met les moyens ! :D
A+
0
Student@School Messages postés 11 Date d'inscription samedi 26 juillet 2008 Statut Membre Dernière intervention 31 août 2008
17 août 2008 à 12:39
Du calme ! Le sens de mon précédent message a été mal interprêté...
Je pensais simplement que, si il est posible de faire des choses aussi évoluées (à savoir la création automatique d'un onglet) avec les macros dans Excel, il devait être encore plus simple de modifier le code fourni par Thev pour empêcher la macro de changer le nom de mon dernier onglet.
De +, dans le classeur que tu m'as passé, la modif de la cellule A5 ne génère pas le nouvel onglet !
Je ne peux d'ailleurs pas utiliser ton classeur car j'ai déjà des données entrées dans le mien (des quadrillages, des données,...) et je ne veux pas tout refaire !

Par contre, peut-être puis-je recopier ton code dans mon classeur ?

Je regarde ce que ça donne dans mon fichier et vous tiens au courant

Merci et @+
0
Student@School Messages postés 11 Date d'inscription samedi 26 juillet 2008 Statut Membre Dernière intervention 31 août 2008
31 août 2008 à 16:00
Bonjour,
Je suis de retour sur ce forum pour vous dire que j'ai réussi à faire fonctionner ma feuille de calcul... et ce, grace à vous !
En fait, j'ai adapté à mon fichier le code que m'avait soufflé Thev et les onglets se renomment bien comme il faut.

J'ai cependant un petit souci qui persiste. Lorsque je change un nom dans mon onglet "personnels" et que je valide, le nom de l'onglet est bien modifié mais le message d'erreur suivant apparaît :

Microsoft Visual Basic
Erreur d'exécution 1004 :
Erreur définie par l'application ou par l'objet
Fin Débogage

Voyez vous à quoi peut être liée cette erreur et savez vous comment la supprimer ?

Encore mille mercis pour vos précieux coups de mains
0