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 :

[VBA Excel] Tableau avec données du userform et de formules


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 84
    Par défaut [VBA Excel] Tableau avec données du userform et de formules
    Bonjour,

    J'ai un tableau avec plusieurs colonnes , certaines se remplissent grace à un formulaire et d'autres sont prévues pour être remplies grace à des formules qui sont déjà tirées dans les colonnes.
    Voici le code de l'Userform :
    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
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    Option Explicit
     
    Public Cancelled As Boolean
     
    Dim rgData As Range
    Dim vaData As Variant
     
     
    --------------------------------------------------------------
     
    'Données du tableau vers le formulaire
    Private Sub LoadRecord()
     
    vaData = rgData.Value
     
    txDésignation.Value = vaData(1, 1)
     
    txNuméro.Value = vaData(1, 3)
     
    Select Case vaData(1, 4)
        Case "M"
        opMoteurM.Value = True
        Case "F"
        opMoteurF.Value = True
        Case "G"
        opMoteurG.Value = True
    End Select
     
    Select Case vaData(1, 12)
        Case "E"
        opProvenanceExterne.Value = True
        Case "I"
        opProvenanceInterne.Value = True
    End Select
     
    cbFournisseur.Value = vaData(1, 11)
     
    cbEmplacement.Value = vaData(1, 2)
     
    cbResponsable.Value = vaData(1, 5)
     
    cbSpécificité.Value = vaData(1, 19)
     
    txCommentaire.Value = vaData(1, 18)
     
    txQuantitéMisEnIndisponible.Value = vaData(1, 6)
     
    txQuantitéObjectif.Value = vaData(1, 10)
     
    txPrixUnitaire.Value = vaData(1, 13)
     
    End Sub
     
    --------------------------------------------------------------
     
    'Données du formulaire vers le tableau
    Private Sub SaveRecord()
     
    vaData(1, 1) = txDésignation.Value
     
    vaData(1, 3) = txNuméro.Value
     
    Select Case True
        Case opMoteurM.Value
        vaData(1, 4) = "M"
        Case opMoteurF.Value
        vaData(1, 4) = "F"
        Case opMoteurG.Value
        vaData(1, 4) = "G"
    End Select
     
    Select Case True
        Case opProvenanceExterne.Value
        vaData(1, 12) = "E"
        Case opProvenanceInterne.Value
        vaData(1, 12) = "I"
    End Select
     
    vaData(1, 11) = cbFournisseur.Value
     
    vaData(1, 2) = cbEmplacement.Value
     
    vaData(1, 5) = cbResponsable.Value
     
    vaData(1, 19) = cbSpécificité.Value
     
    vaData(1, 18) = txCommentaire.Value
     
    vaData(1, 6) = txQuantitéMisEnIndisponible.Value
     
    vaData(1, 10) = txQuantitéObjectif.Value
     
    vaData(1, 13) = txPrixUnitaire.Value
     
    rgData.Value = vaData
    End Sub
     
     
    --------------------------------------------------------------
     
    Private Sub sbNavigator_Change()
    Call SaveRecord
    Set rgData = Range("Base_de_données").Rows(sbNavigator.Value)
    Call LoadRecord
    End Sub
     
    --------------------------------------------------------------
     
    Private Sub UserForm_Initialize()
    With Range("Base_de_données")
        Set rgData = .Rows(2)
        Call LoadRecord
        sbNavigator.Value = 2
        sbNavigator.Max = .Rows.Count
    End With
    End Sub
     
    --------------------------------------------------------------
     
    Private Sub bnNouvelle_Click()
    Dim iRowCount As Integer
     
    With Range("Base_de_données")
        iRowCount = .Rows.Count + 1
        .Resize(iRowCount).Name = "Base_de_données"
        sbNavigator.Max = iRowCount
        sbNavigator.Value = iRowCount
    End With
    opMoteurM.Value = True
    opProvenanceExterne = True
    End Sub
     
    --------------------------------------------------------------
     
    Private Sub bnSupprimer_Click()
        If Range("Base_de_données").Rows.Count = 2 Then
            MsgBox "Impossible de supprimer la dernière Référence, elle est indispensable pour les formules", vbCritical
        Exit Sub
     
        ElseIf rgData.Row = Range("Base_de_données").Rows(2).Row Then
            Set rgData = rgData.Offset(1)
            rgData.Offsert(-1).Delete shift:=xlUp
            Call LoadRecord
        Else
            sbNavigator.Value = sbNavigator.Value - 1
            rgData.Offset(1).Delete shift:=xlUp
        End If
        sbNavigator.Max = sbNavigator.Max - 1
    End Sub
     
    --------------------------------------------------------------
     
    Private Sub bnPrécédente_Click()
    If rgData.Row > Range("Base_de_données").Rows(2).Row Then
        sbNavigator.Value = sbNavigator.Value - 1
    End If
    End Sub
     
    --------------------------------------------------------------
     
    Private Sub bnSuivante_Click()
    With Range("Base_de_données")
        If rgData.Row < .Rows(.Rows.Count).Row Then
        sbNavigator.Value = sbNavigator.Value + 1
        End If
    End With
    End Sub
     
    --------------------------------------------------------------
     
    Private Sub bnOK_Click()
       Call SaveRecord
       Unload Me
    End Sub
     
    --------------------------------------------------------------
     
    Private Sub bnAnnuler_Click()
       Unload Me
    End Sub
    Mon problême : Une fois le formulaire rempli, en cliquant sur Ok une nouvelle ligne dans le tableau se créé, les données vont du formulaire vers cette ligne, mais cela annule les cellules de la ligne contenant une formule... Je ne sait pas comment faire pour qu'en cliquant sur Ok, les données soient transférées mais que les formules se mettent automatiquement.

    Dans Private Sub SaveRecord() je pensais mettre ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vaData(1, 9) = ActiveCell.FormulaR1C1 = "=IF(RC[-6]="""","""",RC[-3]+RC[-2]+RC[-1])"
    Mais cela ne fonctionne pas

  2. #2
    Membre confirmé
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 121
    Par défaut
    ta regardé la fonction Calculate dans l'aide d'EXCEL ?

  3. #3
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    ... un peu trop longue ta ligne :
    essai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vaData(1, 9).FormulaR1C1 = "=IF(RC[-6]="""","""",RC[-3]+RC[-2]+RC[-1])"

Discussions similaires

  1. [vba-excel]Comment modifier donnée sur partie filtrée d'un tableau
    Par boniface dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 18/01/2007, 19h27
  2. [VBA-E] Tableau de données <=> Fichier Texte
    Par P50 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/12/2005, 16h02
  3. [VBA][EXCEL]PB avec la commande WorksheetFunction.VLookup
    Par Ania dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 02/11/2005, 16h41
  4. [VBA Excel] Extraction de données
    Par tpv72 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 20/09/2005, 21h49
  5. [VBA-Excel] Plagen avec Cells
    Par Damsou dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 13/01/2005, 10h49

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