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 :

Variable hors procédure [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier Avatar de Djromé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 172
    Points : 93
    Points
    93
    Par défaut Variable hors procédure
    Salut les Kracks,

    Je souhaiterai renommer les feuilles de mon classeur automatiquement faisant suite à un click sur un CommandButton.

    Les noms de mes feuilles seraient du style suivant:
    F_25122011_maVariable
    Pour ce faire, j'aimerai créer une variable qui retiendra en mémoire le dernier numéro utiliser et ceci même si une semaine c'est écoulée sans ouverture du classeur.
    Dois-je pour celà créer une fonction ou déclarer mes variables en dehors de la procédure?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Option Explicit
    Dim varNumfees As Variant
     
    Private Sub CommandButton2_Click()
     
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    varNumfees = i+1
     
        'moves active sheet ot end of active workbook
        ActiveWorkbook.Sheets("Facture_Type").Copy after:=ActiveWorkbook.Sheets(ActiveWorkbook.Sheets.Count)
    ActiveSheet.Name = "F_" & Format(Day(Date), "00") & Format(Month(Date), "00") & Format(Year(Date), "0000") & varNumfees
    Next i
    End Sub
    Merci pour vos futures expliquations car je ne vois pas comment m'y prendre!
    Merci les kracks,

    Apprendre à un imbécile, c'est comme soigner un mort
    "alors avec moi, bon courage!"
    (дурака учить, что мертвого лечить, c'est plus beau en Russe!)

  2. #2
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    273
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Octobre 2008
    Messages : 273
    Points : 323
    Points
    323
    Par défaut
    Bonjour,
    une variable ne peut pas faire ça.

    Pour "garder en mémoire" une variable, soit tu mets la valeur dans une cellule sur une feuille cachée par exemple, soit tu écris dans la base de registre (ne fonctionne pas si le fichier est partagé).

    Pour ton cas, je bouclerai sur tous les onglets pour récupérer l'indice le plus grand :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim sh As Worksheet
     
    For Each sh In Worksheets
        '... tu recherche tes indices
    Next
    Est-ce que le "F_25122011_" sera commun à tous les onglets ?

  3. #3
    Membre régulier Avatar de Djromé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 172
    Points : 93
    Points
    93
    Par défaut
    Merci oovaveoo,

    Est-ce que le "F_25122011_" sera commun à tous les onglets ?
    Non, comme tu peux le voir en ligne 12 de mon code, le format prendra la date du jour: F_ddmmyyyy_mavariable (format "123")

    Donc, je serai obliger de prendre la valeur la plus élevée de mes onglets!

    Je pensais qu'en déclarant une variable hors procédure, celle-ci était valable ultérieurement pour tous les classeurs, avec la dernière valeur attribuée?
    Merci les kracks,

    Apprendre à un imbécile, c'est comme soigner un mort
    "alors avec moi, bon courage!"
    (дурака учить, что мертвого лечить, c'est plus beau en Russe!)

  4. #4
    Membre émérite
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 814
    Points : 2 949
    Points
    2 949
    Billets dans le blog
    10
    Par défaut
    Bonjour,
    Si j'ai bien saisi ce que tu souhaites, tu l'as déjà ta variable. Il s'agit de ActiveWorkbook.Sheets.Count
    Suffit de remplacer :
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    varNumfees = ActiveWorkbook.Sheets.Count + 1
    Cordialement,
    Franck

  5. #5
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    @pijaku
    J'ai 3 feuilles A_1, A_3 et A_4
    Nombre de feuilles: 3
    La nouvelle feuille sera A_4 =>Crash


    Une proposition
    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
    Sub AjouF()
    Dim Suff As String, Feuille As String
    Dim Sh As Worksheet
    Dim i As Integer
     
    Suff = "F_" & Format(Date, "ddmmyyyy") & "_"
    Do
        Set Sh = Nothing
        i = i + 1
        Feuille = Suff & Format(i, "000")
        On Error Resume Next
        Set Sh = ThisWorkbook.Sheets(Feuille)
        On Error GoTo 0
    Loop While Not Sh Is Nothing
    ThisWorkbook.Worksheets.Add.Name = Feuille
    End Sub
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  6. #6
    Membre régulier Avatar de Djromé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 172
    Points : 93
    Points
    93
    Par défaut
    Merci à vous,

    Super Mercatog, ton code fonctionne bien!

    Pourrais-je vous demander comment feriez-vous pour remplacer dans excel le numéro automatique (que l'on trouve à l'infini dans Access - clef primaire) et qui pourrait-être la référence de ma facture (champs unique).

    Dans mon cas, 256 onglets sont possibles ensuite, je me dois de recommencer dans un nouveau classeur!

    Comme vous l'avez compris, je souhaiterai automatiser les numérotations uniques de factures et le faire par excel (sans utiliser Access).

    Quelle serait votre méthode de travail?
    Merci les kracks,

    Apprendre à un imbécile, c'est comme soigner un mort
    "alors avec moi, bon courage!"
    (дурака учить, что мертвого лечить, c'est plus beau en Russe!)

  7. #7
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Attention, le code proposé recherche le premier nombre disponible
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 30/07/2007, 14h10
  2. Réponses: 3
    Dernier message: 20/04/2006, 17h59
  3. [VB6]Passer une variable à une procédure évennementielle
    Par jacma dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 13/12/2005, 19h19
  4. Utilisé une variable hors d'une fonction
    Par PrinceMaster77 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 03/02/2005, 19h21
  5. variable hors d'une fonction
    Par Anduriel dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 02/02/2005, 08h29

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