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 :

Spécifier la feuille de travail


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 97
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 6
    Par défaut Spécifier la feuille de travail
    Bonjour à toutes et à tous, et avec un peu d'avance un excellente année 2016 !!

    Je suis un grand débutant en programmation, et j'ai déjà pas mal traîné pour trouver des tutos me permettant de créer un formulaire de saisie de données, avec notamment des combobox

    Je me suis lancé, et cela fonctionne, mais a peu près .......

    Je m'explique, j'ai une feuille (feuil1), sur laquelle je vais stocker mes entrées. Et une autre feuille (données), sur laquelle, j'ai mes champs pour les combobox.

    J'ai remarqué la chose suivante : si je clique sur feuill1 et lance mon formulaire, les données vont bien se rajouter en dernière ligne de mon tableau, ça marche.
    Par contre, si je suis dans la feuille données, et que je lance mon formulaire, les données saisies vont se mettre n'importe où dans cette feuille.
    Il me semble que le formulliare insère les données dans la feukille qui est active au moment où je le lance.

    Ma question est simple, mais je n'ai pas la réponse. Comment expliquer au formulaire, que les saisies vont devoir se mettre dans la feuille1, et non pas où il veut ?

    Non, mais ....


    Merci d'avance,
    TOFNEU

  2. #2
    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
    bonjour,


    montre le code qui viens écrire dans tes feuilles ... entre balises [code] [/code]

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 97
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 6
    Par défaut
    Tout est là, ce sont des morceaux que j'ai récupéré dans des tutos, mais je ne vois pas passer de balises CODE


    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
    Private Sub ComboBox1_Change()
     
    End Sub
     
    Private Sub ComboBox2_Change()
     
    End Sub
     
    Private Sub CommandButton1_Click()
     
     
    Dim derligne As Integer
    ' instructions pour confirmer l'ajout de la nouvelle ligne
     
    If MsgBox("confirmez", vbYesNo, "confirmation") = vbYes Then
    derligne = Sheets("Feuil1").Range("A65000").End(xlUp).Row + 1
    ' a recopier autant de fois qu'on a un champ a ajouter
    ' attention, le numéro après derligne correspond au numéro de colonne
     
    Cells(derligne, 1) = TextBox1.Value 'saisie article
     
    Cells(derligne, 3) = TextBox2.Value ' saisie PHA
    Cells(derligne, 4) = TextBox3.Value ' saisie PMEV
    Cells(derligne, 5) = TextBox4.Value ' saisie PV
    Cells(derligne, 6) = TextBox7.Value ' DATE MEV
    Cells(derligne, 7) = TextBox8.Value ' DATE RAPPEL
    Cells(derligne, 8) = TextBox9.Value ' DATE VENTE
    Cells(derligne, 18) = TextBox6.Value ' STOCK
    Cells(derligne, 13) = TextBox5.Value ' TAILLE
    Cells(derligne, 14) = TextBox10.Value ' ACTIVE / NON ACTIVE
     
    Cells(derligne, 2) = ComboBox1.Value ' saisie mail
    Cells(derligne, 19) = ComboBox2.Value ' STATUT EN VENDTE A VENDRE VENDU
    Cells(derligne, 12) = ComboBox3.Value ' CATEGORIE
    Cells(derligne, 17) = ComboBox4.Value ' PERIODICITE
     
    If colonne > 0 Then Sheets("feuil1").Cells(derligne, colonne) = CTRL
    End If
     
    End Sub
     
    Private Sub CommandButton2_Click()
    ' instruction pour bouton QUITTER
     
    Unload UserForm1
     
    End Sub
     
    Private Sub Label1_Click()
     
    End Sub
     
    Private Sub Label14_Click()
     
    End Sub
     
    Private Sub Label2_Click()
     
    End Sub
     
    Private Sub Label5_Click()
     
    End Sub
     
    Private Sub Label8_Click()
     
    End Sub
     
    Private Sub UserForm_Click()
     
    End Sub
     
    Private Sub UserForm_Initialize()
    'Dim tablo, derligne As Integer
     
    'With DONNEES
     
    'derligne = .Range("A65000").End(xlUp).Row
    'tablo = .Range("A1:A" & derligne)
    'ComboBox1.List = tablo
     
    'End With
     
    End Sub
    Merci, TOFNEU

  4. #4
    Membre Expert Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Par défaut
    Bonjour TOFNEU,

    Pour les balises code lorsque tu postes sur le forum : Demo ici

    Pour ce qui est de ton problème :
    Tu utilises Cells(derligne, 1) = ... pour indiquer la cellule. Ok mais une cellule (objet Range en VB) est contenue dans une feuille (Worksheet) elle-même dans un classeur (Workbook).
    Si aucun parent n'est précisé, Excel va utiliser le classeur actif et la feuille active, ça tu l'avais bien compris.

    Pour ne pas laisser Excel choisir pour toi il suffit simplement de tout lui dire.
    Exemple :
    ThisWorkbook.Sheets("Feuil1").Cells(derligne, 1) = ...

    Pour ne pas écrire ThisWorkbook.Sheets("Feuil1").cells(x,y) = .... partout tu peux utiliser le bloc With.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With ThisWorkbook.Sheets("Feuil1")
        .cells(1,1) = "test"
    End With
    est équivalent à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThisWorkbook.Sheets("Feuil1").Cells(1,1) = "test"
    Exemple sur ton Sub CommandButton1_Click :
    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
    Private Sub CommandButton1_Click()
        Dim derligne As Integer
        ' instructions pour confirmer l'ajout de la nouvelle ligne
            If MsgBox("confirmez", vbYesNo, "confirmation") = vbNo Then Exit Sub
     
            With ThisWorkbook.Sheets("Feuil1")
                derligne = .Cells(Rows.Count, 1).End(xlUp).Row + 1
                ' a recopier autant de fois qu'on a un champ a ajouter
                ' attention, le numéro après derligne correspond au numéro de colonne
     
                .Cells(derligne, 1) = TextBox1.Value 'saisie article
     
                .Cells(derligne, 3) = TextBox2.Value ' saisie PHA
                .Cells(derligne, 4) = TextBox3.Value ' saisie PMEV
                .Cells(derligne, 5) = TextBox4.Value ' saisie PV
                .Cells(derligne, 6) = TextBox7.Value ' DATE MEV
                .Cells(derligne, 7) = TextBox8.Value ' DATE RAPPEL
                .Cells(derligne, 8) = TextBox9.Value ' DATE VENTE
                .Cells(derligne, 18) = TextBox6.Value ' STOCK
                .Cells(derligne, 13) = TextBox5.Value ' TAILLE
                .Cells(derligne, 14) = TextBox10.Value ' ACTIVE / NON ACTIVE
     
                .Cells(derligne, 2) = ComboBox1.Value ' saisie mail
                .Cells(derligne, 19) = ComboBox2.Value ' STATUT EN VENDTE A VENDRE VENDU
                .Cells(derligne, 12) = ComboBox3.Value ' CATEGORIE
                .Cells(derligne, 17) = ComboBox4.Value ' PERIODICITE
     
                If colonne > 0 Then .Cells(derligne, colonne) = CTRL
            End With
     End Sub

    Avec la même mécanique, il est plus juste d'ecrire UserForm1.TextBox1.Value que juste TextBox1.Value

    En espèrent être clair
    Bonne journée


    PS : Dans ton code j'ai changé 2 choses :
    • If MsgBox("confirmez", vbYesNo, "confirmation") = vbNo Then Exit Sub

    Pour éviter d'avoir trop de ligne dans un If sans Else, je préfère tester la condition contraire et faire un Exit Sub (Comportement identique mais plus simple à la lecture à mon gout)
    • derligne = .Cells(Rows.Count, 1).End(xlUp).Row + 1

    Je te laisse interpréter

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 97
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 6
    Par défaut J'y suis presque, mais ça ne marche pas.
    Hello tout le monde,

    Je poursuis ma quête du parfait formulaire, mais je suis loin du compte.

    J'ai récupéré dans un tuto, du code écrit pour une table ayant 8 colonnes, et je l'ai adapté à la mienne qui en a 19. En gros j'ai bien compris que l'auteur du code fait une boucle pour X=1 à 8, je pense qu'il balaie les 8 colonnes pour afficher les résultats des 8 colonnes dans son formulaire.

    J'ai donc copié le code, car je ne sais pas faire, et changé 8 pour 19. Quand je lance l'exécution, j'ai une erreur "objet spécifié introuvable". Si à la place de 19, je mets un nombre jusqu'à 15, ça marche. En gros si je fais

    For X = 1 To 14 ça marche

    For X = 1 To 15 : erreur.

    Mon x est déclaré en Integer, faut-il le déclarer en Long ?


    Ci dessous le code, je vais essayer de mettre le fichier en PJ. La table est remplie avec des valeurs indicatives.

    Merci d'avance à tous pour votre aide, TOFNEU.



    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
    Option Explicit
    Dim Ws As Worksheet
     
    Private Sub ComboBox3_Change()
     
    End Sub
     
    'Correspond au programme du bouton QUITTER
    Private Sub CommandButton1_Click()
    Unload Me
    End Sub
     
     
     
     
    Private Sub CommandButton3_Click()
    Dim L As Integer
     
    If MsgBox("Etes-vous certain de vouloir INSERER ce nouveau contact ?", vbYesNo, "Demande de confirmation") = vbYes Then 'condition : si oui au message
    L = Sheets("VENTES").Range("a65536").End(xlUp).Row + 1 'Permet de se positionner sur la dernière ligne de tableau NON VIDE
     
    Range("A" & L).Value = ComboBox1 'Article
    Range("B" & L).Value = ComboBox2 'Mail
    Range("L" & L).Value = ComboBox3 'CATEGORIE
    Range("Q" & L).Value = ComboBox4 'PERIODICITE
    Range("S" & L).Value = ComboBox5 'STATUT
     
    Range("C" & L).Value = TextBox1 'Px HA
    Range("D" & L).Value = TextBox2 'Px MEV
    Range("E" & L).Value = TextBox3 'Px V
    Range("F" & L).Value = TextBox4 'DATE MEV
    Range("G" & L).Value = TextBox5 'DATE RAPPEL
    Range("H" & L).Value = TextBox6 'Px DATE VENTE
    Range("I" & L).Value = TextBox7 'Px NB JOURS
    Range("J" & L).Value = TextBox8 'Px BENEF
    Range("K" & L).Value = TextBox9 'MOIS
    Range("M" & L).Value = TextBox10 'TAILLE
    Range("N" & L).Value = TextBox11 'ACTIVE
    Range("O" & L).Value = TextBox12 'ECHEANCE
    Range("P" & L).Value = TextBox13 'RAPPEL
    Range("R" & L).Value = TextBox13 'STOCK
    End If
     
    'Code permettant de modifier le format de la plage de cellule en format nombre
    With Ws.Range("D2:d10")
                .NumberFormat = "0"
                .Value = .Value
    End With
     
    ' Affiche une boîte de message
    MsgBox ("Produit inséré dans fichier sélectionné") 'Vous informant que le présent contact est insérer dans votre tableau Excel.
     
    Unload Me ' Vide et ferme l'Userform ( formulaire)
    UserForm1.Show 'Affiche le  formulaire
     
     
    End Sub
     
    Private Sub CommandButton4_Click()
    Dim Sh As Worksheet
        Set Sh = Sheets("Ventes")
        ActiveCell.EntireRow.Copy Sh.Cells(Sh.Rows.Count, 1).End(xlUp).Offset(1)
     
    End Sub
     
    Private Sub Label11_Click()
     
    End Sub
     
    Private Sub Label2_Click()
     
    End Sub
     
    'Correspond au programme du FORULAIRE
    'Cet évènement est important car il permet de définir les propriétés des objets et les valeurs par défaut des variables, lors du lancement du Userform.
     
     
    'à l'initialisation de l'userform
    ' Déclaration des variables grâce à Dim
    '    1° Choisir un nom
    '    2° Choisir un TYPE (= définir la nature du contenu)
    ' --------------------------------------------------------
    Private Sub UserForm_Initialize()
    Dim Z As Long
    Dim X As Integer
     
     
    ' Affecter une valeur à une variable (= fixer la valeur de la variable)
      Set Ws = Sheets("VENTES") 'Attention ce nom doit correspondre au nom de votre ONGLET
    'On stock le nom de la feuille "VENTES" dans une variable nommée WS POUR EVITER DE REPETER LE NOM QUI EST LONG A CHAQUE FOIS
     
    With Me.ComboBox1
        For Z = 2 To Ws.Range("A" & Rows.Count).End(xlUp).Row
          .AddItem Ws.Range("A" & Z)
        Next Z
      End With
     
     
    For X = 1 To 14 'on lance une boucle de valeur mini 1 et maxi 14
        Me.Controls("TextBox" & X).Visible = True 'affiche les données dans les textbox
    Next X
    End Sub
     
    'Correspond au programme du bouton MODIFIER
    Private Sub CommandButton2_Click()
    If MsgBox("Etes-vous certain de vouloir modifier ce produit ?", vbYesNo, "Demande de confirmation") = vbYes Then
    Dim Ligne As Long
    Dim X As Integer
     
      If Me.ComboBox1.ListIndex = -1 Then Exit Sub 'On sort si pas de sélection
      Ligne = Me.ComboBox1.ListIndex + 2
      For X = 1 To 14
        If Me.Controls("TextBox" & X).Visible = True Then
          Ws.Cells(Ligne, X + 1) = Me.Controls("TextBox" & X)
        End If
      Next X
        End If 'fin de la condition
        'Code permettant de modifier le format de la plage de cellule en format nombre
     
    With Ws.Range("D2:d10")
                .NumberFormat = "0"
                .Value = .Value
    End With
    End Sub
     
     
    'Correspond au programme de la LISTE DEROULANTE
    Private Sub ComboBox1_Change()
    Dim Ligne As Long
    Dim X As Integer
       If Me.ComboBox1.ListIndex = -1 Then Exit Sub
      Ligne = Me.ComboBox1.ListIndex + 2
      For X = 1 To 14 ' c'est ICI qu'il faut changer le nombre pour afficher autant de champs que l'on a de colonnes
        Me.Controls("TextBox" & X) = Ws.Cells(Ligne, X + 1)
      Next X
     End Sub

  6. #6
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Salut, détails : Balise ton code
    Indente ton code

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 97
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 6
    Par défaut
    Citation Envoyé par kiki29 Voir le message
    Merci pour la réponse, mais je suis vraiment une quiche et du coup, ça veut dire quoi "balise ton code" et "indente" ?

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

Discussions similaires

  1. Charger une feuille de travail dans une autre
    Par Zatrzz dans le forum Maple
    Réponses: 0
    Dernier message: 12/05/2014, 15h46
  2. [XL-2003] Eviter de répéter "Worksheet()" pour définir la feuille de travail
    Par cyr.odi dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 03/06/2013, 08h29
  3. créer une feuille de travail
    Par nainco dans le forum VB.NET
    Réponses: 4
    Dernier message: 13/03/2007, 20h31
  4. automation excel : comment indiquer la feuille de travail ?
    Par mat_lefebvre dans le forum Access
    Réponses: 2
    Dernier message: 04/12/2003, 15h14

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