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 :

Comment Convertir une Variable


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Juin 2007
    Messages : 60
    Points : 56
    Points
    56
    Par défaut Comment Convertir une Variable
    Bonjour,

    Donc voici mon soucis

    Dans ma Macro je demande de récupérer le nom de la feuille actuel donc j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Onglet = ActiveSheet.Name
    Juste après je récupère donc le nom de la feuille pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ModRecapitulatif.TraitementRecapitulatif (Onglet)
    Seulement le problème étant que

    Onglet = "Lundi"

    Au lieu de

    Onglet = Lundi

    Vue que j'utilise ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Public Enum SelectSheets
        Lundi
        Mardi
        Mercredi
        Jeudi
        Vendredi
        Recapitulatif
    End Enum
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public Sub TraitementRecapitulatif(Onglet As SelectSheets)
     
        ' Verifie l'existence de l'onglet Récapitulatif
        Worksheet (Recapitulatif)
     
        Worksheet (Onglet)
     
        ReadLine
     
    End Sub
    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
    28
    29
    30
    31
    32
    33
    34
    Public Sub Worksheet(SelectSheets As SelectSheets)
    Dim SearchSheet As String
     
    On Error GoTo Err
        Select Case SelectSheets
            Case Lundi
                SearchSheet = "Lundi"
                LigneReca = 3
            Case Mardi
                SearchSheet = "Mardi"
                LigneReca = 4
            Case Mercredi
                SearchSheet = "Mercredi"
                LigneReca = 5
            Case Jeudi
                SearchSheet = "Jeudi"
                LigneReca = 6
            Case Vendredi
                SearchSheet = "Vendredi"
                LigneReca = 7
            Case Recapitulatif
                SearchSheet = "Récapitulatif"
        End Select
     
        IssheetstillThere (SearchSheet)
        Worksheets(SearchSheet).Select
     
    Err:
        If Not IssheetstillThere("Récapitulatif") Then
            CreateRecapitulatif
        End If
    Err.Clear
     
    End Sub
    En espérant que vous pouvez m'aider :-D

    Cordialement

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut Au2laDeNosReves
    Je ne comprends rien à tes macros ! Si ton code marche, c'est bien, mais pour moi, il est plus que bizarre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Onglet = ActiveSheet.Name
    Onglet est donc une variable texte (string

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ModRecapitulatif.TraitementRecapitulatif (Onglet)
    Le module "ModRecapitulatif" contient la macro "TraitementRecapitulatif" qui a besoin d'un paramètre transmis qui est une variable texte (si c'est cohérent avec celle d'avant) Et donc, tu lances cette macro

    Onglet = "Lundi" Au lieu de Onglet = Lundi
    ?? Rien compris : onglet est d'après la descrption donnée du texte et la visualiation du texte est "" Donc, lundi fait référence à une variable, ou un objet, "Lundi" fait référence au mot.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Public Enum SelectSheets
        Lundi
        Mardi
        Mercredi
        Jeudi
        Vendredi
        Recapitulatif
    End Enum
    Je ne comprends pas ? Je ne sais pas ce que tu veux faire et ne comprend pas la méthode utilisée

    Public Sub TraitementRecapitulatif(Onglet As SelectSheets)
    Selectsheet ? à ma connaissance, ce n'est pas un objet reconnu par VBA

    si tu transmets une variable contenant un objet Worksheet :
    Public Sub TraitementRecapitulatif(Onglet As Worksheet)
    Onglet.activate activera la feuille qui est en variable onglet

    si tu transmets un nom d'onglet :
    Public Sub TraitementRecapitulatif(Onglet As String)
    Sheets(Onglet).activate activera la feuille dont le nom de l'onglet est contenu dans la variable onglet

    Worksheet (Onglet) : Onglet est forcément du texte dans ce cas

    J'ai l'impression que tu mélanges tout : VBA ne suit pas ta syntaxe, c'est toi qui doit te plier à une syntaxe que VBA peut comprendre.

    Nous donner un code qui ne fonctionne pas, sans nous donner le but à atteindre, je ne vois pas ce que tu espères ? Pour t'aider, il faut savoir ce que devrait faire ton code, ainsi, on pourrait le corriger. Mais là...

    Le choix des noms de variables ambigüs ne me semble pas une très bonne idée, mais Selectsheets est peut-être une collection ?
    A+

  3. #3
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Déjà, il vaudrait mieux "penser objet".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim Onglet As WorkSheet
    Set Onglet = ActiveSheet
    Va te créer un objet de Type WorkSheet que tu vas pouvoir manipuler exactement comme l'objet ActiveSheet.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Juin 2007
    Messages : 60
    Points : 56
    Points
    56
    Par défaut
    Bonjour, merci pour ces conseils.

    J'ai réussi a trouver une solution voila mon code actuel au complet :

    Dans Module1

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    Dim lExcelCursor_Index As Long
    Dim objConnection As New ADODB.Connection
     
    Public Chiffre As Long
     
    Const cstExcelBegin = 7
     
    Sub MajCEGIDMajDateDepartUsine()
        Dim lCommandeIndex As Long
        Dim dDateDepartUsine As Date
        Dim lNumeroCommande As Long
        MousePointer = vbHourglass
     
        If ActiveSheet.Name = "Récapitulatif" Then
            MsgBox "Attention : Mauvais Onglet Sélectionné !"
        Else
            lCommandeIndex = 0
     
            lExcelCursor_Index = 2
            dDateDepartUsine = ExcelCursor_Value("D")
     
     
            lExcelCursor_Index = cstExcelBegin
     
            While Not ExcelCursor_Eof
                lNumeroCommande = NumeroCommande
                If lNumeroCommande > 0 Then
                    MajBD lNumeroCommande, dDateDepartUsine
                    ExcelCursor_Value("E") = lNumeroCommande
                    ExcelCursor_Value("F") = Chiffre
                    lCommandeIndex = lCommandeIndex + 1
                End If
                lExcelCursor_Index = lExcelCursor_Index + 1
            Wend
     
            objConnection.Close
     
            MsgBox (lExcelCursor_Index - cstExcelBegin) & " lignes traitées - commandes traitées " & lCommandeIndex
     
            ExcelCursor_Value("E") = "Total :"
            ExcelCursor_Value("F") = "=SUM(F" & cstExcelBegin & ":F" & lExcelCursor_Index - 1 & ")"
     
            Onglet = ActiveSheet.Name
            ModRecapitulatif.TraitementRecapitulatif (Onglet)
     
            MousePointer = vbArrow
        End If
     
    End Sub
    Dans ModRecapitulatif :

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    Option Explicit
     
    Public Feuille As String
    Public Line As Long
    Public Colone As Long
     
    Public Total As Long
    Public LigneReca As Long
     
    Const ldebut = 7
     
    Public Sub TraitementRecapitulatif(Onglet As String)
    Dim SearchSheet As String
     
        ' Verifie l'existence de l'onglet Récapitulatif
        If Not IssheetstillThere("Récapitulatif") Then
            CreateRecapitulatif
        End If
     
        Select Case Onglet
            Case "Lundi"
                SearchSheet = "Lundi"
                LigneReca = 3
            Case "Mardi"
                SearchSheet = "Mardi"
                LigneReca = 4
            Case "Mercredi"
                SearchSheet = "Mercredi"
                LigneReca = 5
            Case "Jeudi"
                SearchSheet = "Jeudi"
                LigneReca = 6
            Case "Vendredi"
                SearchSheet = "Vendredi"
                LigneReca = 7
            End Select
     
        IssheetstillThere (SearchSheet)
        Worksheets(SearchSheet).Select
     
        ReadLine
     
    End Sub
     
    Private Sub ReadLine()
    Dim lindex As Long
     
    lindex = ldebut
     
            While ActiveSheet.Cells(lindex, 2).Value <> ""
                lindex = lindex + 1
            Wend
     
                Total = ActiveSheet.Cells(lindex, 6).Value
                Worksheets("Récapitulatif").Select
                ActiveSheet.Cells(LigneReca, 2).Value = Total
     
    End Sub
     
    Function IssheetstillThere(SheetName) As Boolean
        Dim obj As Object
     
        On Error Resume Next
     
        Set obj = ActiveWorkbook.Sheets(SheetName)
        IssheetstillThere = True
     
        If Err <> 0 Then
        IssheetstillThere = False
        End If
     
    End Function
     
    Private Sub CreateRecapitulatif()
    '
    ' Macro7 Macro
    ' Macro enregistrée le 09/04/2008 par DUMONT Yohann
    '
     
    '
        Worksheets.Add.Name = "Récapitulatif"
        Worksheets("Récapitulatif").Move , Worksheets("Vendredi")
     
        Range("A1").Select
        ActiveCell.FormulaR1C1 = "Récapitulatif Semaine XX"
        Range("A1:B1").Select
        Selection.Merge
     
        Rows("1:1").RowHeight = 35.25
        Columns("A:A").ColumnWidth = 30
        Columns("B:B").ColumnWidth = 30
     
        With Selection.Font
            .Name = "Arial"
            .Size = 18
            .Strikethrough = False
            .Superscript = False
            .Subscript = False
            .OutlineFont = False
            .Shadow = False
            .Underline = xlUnderlineStyleSingle
            .ColorIndex = xlAutomatic
        End With
     
        With Selection
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlCenter
            .WrapText = False
            .Orientation = 0
            .AddIndent = False
            .IndentLevel = 0
            .ShrinkToFit = False
            .ReadingOrder = xlContext
            .MergeCells = True
        End With
     
        With Selection.Borders(xlEdgeLeft)
            .LineStyle = xlDouble
            .Weight = xlThick
            .ColorIndex = xlAutomatic
        End With
        With Selection.Borders(xlEdgeTop)
            .LineStyle = xlDouble
            .Weight = xlThick
            .ColorIndex = xlAutomatic
        End With
        With Selection.Borders(xlEdgeBottom)
            .LineStyle = xlDouble
            .Weight = xlThick
            .ColorIndex = xlAutomatic
        End With
        With Selection.Borders(xlEdgeRight)
            .LineStyle = xlDouble
            .Weight = xlThick
            .ColorIndex = xlAutomatic
        End With
     
        Range("A3").Select
        ActiveCell.FormulaR1C1 = "Lundi"
        Range("A4").Select
        ActiveCell.FormulaR1C1 = "Mardi"
        Range("A5").Select
        ActiveCell.FormulaR1C1 = "Mercredi"
        Range("A6").Select
        ActiveCell.FormulaR1C1 = "Jeudi"
        Range("A7").Select
        ActiveCell.FormulaR1C1 = "Vendredi"
        Range("A9").Select
        ActiveCell.FormulaR1C1 = "Total "
        Columns("B:B").Select
        Range("B2").Activate
        Selection.NumberFormat = "#,##0.00 $"
        Range("A1:B1").Select
        Range("B9").Select
        ActiveCell.FormulaR1C1 = "=SUM(R[-6]C:R[-2]C)"
     
    End Sub
    Cela vous donne plus de renseignement sur mon code car je viens de débuter donc je sais que je pourrais me simplifier la vie.

    En ce qui concerne le code de Module1 il n'est pas de moi, j'ai seulement fait celui de ModRecapitulatif.

    Cordialement.

  5. #5
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Bonjour Yohann,
    Tu peux effectivement simplifier le code donné par l'enregistreur de macro qui reproduit chaque action réalisée et ajoute tous les arguments par défaut de chaque propriété.
    Tu peux déjà supprimer tous les "select" ou "selection" en affectant directement une propriété à une cellule ou un groupe de cellules.
    Ton code nettoyé pourrait donner ç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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    Private Sub CreateRecapitulatif()
     
        Range("A1") = "Récapitulatif Semaine XX"
        Rows("1:1").RowHeight = 35.25
        Columns("A:A").ColumnWidth = 30
        Columns("B:B").ColumnWidth = 30
     
        With Range("A1:B1")
            With .Font
                .Name = "Arial"
                .Size = 18
                .Underline = xlUnderlineStyleSingle
            End With
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlCenter
            .MergeCells = True
            .Borders(xlEdgeLeft).LineStyle = xlDouble
            .Borders(xlEdgeTop).LineStyle = xlDouble
            .Borders(xlEdgeBottom).LineStyle = xlDouble
            .Borders(xlEdgeRight).LineStyle = xlDouble
        End With
     
        Range("A3") = "Lundi"
        Range("A4") = "Mardi"
        Range("A5") = "Mercredi"
        Range("A6") = "Jeudi"
        Range("A7") = "Vendredi"
        Range("A9") = "Total "
        Range("B2:B9").NumberFormat = "#,##0.00 $"
        Range("B9").FormulaR1C1 = "=SUM(R[-6]C:R[-2]C)"
     
    End Sub
    As-tu une autre question ?
    A+

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Juin 2007
    Messages : 60
    Points : 56
    Points
    56
    Par défaut
    Bonjour,

    Effectivement je n'avais pas vue ceci dans cette angle.

    Merci beaucoup :-D

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

Discussions similaires

  1. [DATA] Comment convertir une variable Character en Numeric sous SAS?
    Par Maria_75 dans le forum SAS Base
    Réponses: 1
    Dernier message: 20/08/2012, 17h58
  2. [MySQL] comment convertir une variable php en entier
    Par bourbita.thameur dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 11/03/2009, 10h30
  3. Réponses: 2
    Dernier message: 10/04/2007, 12h39
  4. Comment convertir une variable string en double?
    Par quentinoux dans le forum C++
    Réponses: 12
    Dernier message: 31/07/2006, 10h46
  5. Réponses: 6
    Dernier message: 14/02/2004, 14h01

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