IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Nommer feuilles en fonction de deux cellules [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 18
    Par défaut Nommer feuilles en fonction de deux cellules
    bonjour,

    je dois nommer chaque feuille au sein d'un meme classeur en fonction des caracteres n°17;18;19;20 de sa cellule A2 et du dernier mot de sa cellule B1 (ce mot est soit cumul soit mensuel).
    Cela doit etre fait pour chaque feuille.

    j'ai reçu une reponse (discussion intitulée "Nommer feuille en fonction de plusieurs cellules") mais je n'arrive pas a la mettre en oeuvre.
    et mon patron me presse !

    D'avance merci

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 28
    Par défaut
    Il s'agit de nommer des feuilles lorsque tu les créer ou de les renommer ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 18
    Par défaut
    il s'agit de les renommer. initiallement, les feuilles s'intitulent : feuil1; feuil2;.......

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 28
    Par défaut
    Essai ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    Sub Renamne()
     
    Dim num As Integer
     
    For num = 1 To 10
     
    Sheets("Feuil" & num).Activate
    ActiveSheet.Name = Range("A2") & " - " & Range("C1").Value
     
    Next num
     
    End Sub
    En mettant cette formule en C1

    =SI(DROITE($B$1;3)="uel";"Mensuel";"Cumul")

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Dim ws As Worksheet
    dim temp as string
     
    For Each ws In Worksheets
     
    temp=""
     
    If InStr(ws.Range("B1").value,cumul) <> 0 then
    temp = "cumul"
    end if
     
    If InStr(ws.Range("B1").value,mensuel) <> 0 then
    temp = "mensuel"
    end if
     
    ws.name = Mid(ws.Range("A2").value, 17, 4) & temp
     
    Next
    Voilà le code. Je ne l'ai pas testé mais ça devrait marcher. Bonne chance.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 18
    Par défaut
    j'ai essayé la proposition faite. un message d'erreur apparait ::
    "erreur d'execution '1004':
    Impossible de renommer une feuille comme une autre feuille, une bibliotheque d'objets référencée ou un classeur référencé par Visual Basic".

    En actionnant l'option débogueur, VBA surligne cette partie :

    ws.Name = Mid(ws.Range("A2").Value, 17, 4) & temp

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Par défaut
    Bon, je fais quelques tests et je t'envoie la solutino vu que ça a l'air urgent !

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 18
    Par défaut
    L'erreur semble porter sur le dernier mot de la cellule B1 : c'est toujours mensuel qui apparait (d'ou le message d'erreur).

    Fouinette 85 : la solution que tu me preconises, ça m'obligera à copier coller cette formule sur l'ensemble des feuilles ? (car elles sont nombreuses, tres nombreuses,...)

    NB : MEA CULPA. j'ai oublié de preciser que la derniere feuille du classeur ne doit pas etre nommer (il est impossible de determiner à l'avance son numero. Seule certitude, cette feuille est toujours en derniere position)

  9. #9
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Sub test()
     
    Dim ws As Worksheet
    Dim temp As String
     
    For Each ws In Worksheets
     
    temp = ""
     
    If Right(ws.Range("B1").Value, 5) = "cumul" Then
    temp = "cumul"
    End If
     
    If Right(ws.Range("B1").Value, 7) = "mensuel" Then
    temp = "mensuel"
    End If
     
    ws.Name = Mid(ws.Range("A2").Value, 17, 4) & temp
     
    Next
    End Sub
    Voilà, ça marche, je viens de tester.

    EDIT : quel est le nom de la dernière feuille ? Y'a-t-il quelque chose dans B1 et A2 sur celle-ci ? Je te donne la solution à ton NB dès que tu peux me préciser cela. A tout de suite

  10. #10
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonjour à tou(te)s

    et si tu mélanges les deux propositions, car avec une boucle c'est normal tu tu retrouves ton message d'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Sub essai()
    Dim temp As String
    temp = ""
     
    If InStr(ActiveSheet.Range("B1").Value, cumul) <> 0 Then
    temp = "cumul"
    End If
     
    If InStr(ActiveSheet.Range("B1").Value, mensuel) <> 0 Then
    temp = "mensuel"
    End If
     
    ActiveSheet.Name = Mid(ActiveSheet.Range("A2").Value, 17, 4) & temp
     
    End Sub
    mes excuses Dead, pas vu le post (croisé)
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 28
    Par défaut
    Essai ça alors

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    Sub Renamne()
     
    Dim num As Integer
    Dim nom As String
    Dim feuilles As Integer
    Dim pages As Integer
     
     
    'feuilles = compte le nombre de feuilles
    pages = feuilles - 1
     
    If Droite(B1, 3) = "uel" Then
    nom = Range("A2") & " - " & Mensuel
    Else
    nom = nom = Range("A2") & " - Cumul"
    End If
     
     
    For num = 1 To pages
     
    Sheets("Feuil" & num).Activate
    ActiveSheet.Name = nom
     
    Next num
     
    End Sub
    Il faut parcontre ajouter un compteur de feuille pour agrémenter ta variable "feuilles" et faire tourner ta boucle.

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 18
    Par défaut
    la derniere feuille s'appelera "reporting_frais"

    au fait : merci à tous !!!!!!!

  13. #13
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Par défaut
    Voilà, testé et approuvé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    Sub test()
     
    Dim ws As Worksheet
    Dim temp As String
     
    For Each ws In Worksheets
     
    if ws.name="reporting_frais" then
    exit sub
    end if
     
    temp = ""
     
    If Right(ws.Range("B1").Value, 5) = "cumul" Then
    temp = "cumul"
    End If
     
    If Right(ws.Range("B1").Value, 7) = "mensuel" Then
    temp = "mensuel"
    End If
     
    ws.Name = Mid(ws.Range("A2").Value, 17, 4) & temp
     
    Next
    End Sub
    EDIT : quand tu arrives à la dernière feuille, tu sors complétement de ta procédure, comme cela, même pas besoin de compteur ! Il ne te reste plus qu'à optimiser si cela te chante. En tout cas, bonne chance avec ton patron ! casefayere, il n'y a aucun problème, plus on est de fous, moins y'a de riz De plus, tu as donné la raison de l'erreur

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 18
    Par défaut
    j'ai essayé la solution de casefayere (mix de plusieurs autres solutions) : CA MARCHE !!

    Au risque de paraiter exigeant (pour rester poli ^^) : je dois relancer la macro sur chaque feuille pour renommer l'ensemble des feuilles. Aujourd'hui, le fichier est relativement petit (12 feuilles) mais dans un futur proche, il risque d'exploser.
    est-il possible que la macro s'applique directement sur l'ensemble des feuilles ('sauf la derniere : "reporting_frais") ?

  15. #15
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Par défaut
    Oui, cf solution juste au-dessus Même la dernière feuille est prise en compte

  16. #16
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    oui sur un bouton de commande ou à l'ouverture du classeur

    je garde le nom "essai" pour la macro
    sur un bouton de commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    sub toutesfeuilles()
    dim x as integer
    for x = 1 to sheets.count - 1
    sheets.count(x).activate
    essai
    next x
    a verifier
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  17. #17
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Par défaut
    C'est quand même bizarre parce que j'ai testé chez moi et ça marche correctement : je prends soit cumul soit mensuel. As-tu bien remplace Instr par Right et changé les lignes correspondantes ? Sinon, tant pis, prends la dernière solution de casefayere.

    EDIT : je viens de re-tester, en remplaçant bien les Instr par des Right, je n'ai plus le problème dû à la boucle. Cf. image jointe.

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 18
    Par défaut
    DEAD 78 : je viens d'essayer ta derniere macro. j'ai encore ce message d'erreur décrit plus haut. le probleme est qu'il ne note pas le dernier mot de la cellule en B.

    NB : la cellule en A me donne 1 chiffre (ex : 090) qui correspond à un centre de cout et la cellule en B indique si c'est en cumul ou mensuel.

    Donc il y a tjrs deux fois le chiffre (ex: 090) mais caractérisé soit par mensuel soit par cumul (ex 090 mensuel ; 090 cumul)

  19. #19
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 18
    Par défaut
    casefayere : désolé mais je ne comprends pas vraiment ton dernier message (je n'ai pas d'automatisme ou reflexes VBA). Comment l'inclure ? où ?

  20. #20
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 18
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Sub test()
     
    Dim ws As Worksheet
    Dim temp As String
     
    For Each ws In Worksheets
     
    if ws.name="reporting_frais" then
    exit sub
    end if
     
    temp = ""
     
    If Right(ws.Range("B1").Value, 5) = "cumul" Then
    temp = "cumul"
    End If
     
    If Right(ws.Range("B1").Value, 7) = "mensuel" Then
    temp = "mensuel"
    End If
     
    ws.Name = Mid(ws.Range("A2").Value, 17, 4) & temp
     
    Next
    End Sub

    voila celle que j'ai repris de DEAD78. mais j'ai ce me ssage d'erreur

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [XL-2010] Déplacer une ligne dans une autre feuille en fonction de deux critères
    Par mikmak78 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 26/03/2015, 06h38
  2. Suppression ligne en fonction de deux cellules
    Par jamesdu75 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/04/2013, 17h27
  3. Réponses: 10
    Dernier message: 20/06/2012, 14h39
  4. [XL-2003] Nommer feuille en fonction de plusieurs cellules
    Par Raphael13 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/05/2009, 20h38
  5. Comparer deux cellules, si pas trouvé résultat sur Feuille 3
    Par MartinezGarcia dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 14/02/2008, 14h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo