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 :

Mon Projet Excel


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
    Janvier 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 26
    Par défaut Mon Projet Excel
    Voilà j'ai un projet Excel à rendre dans une douzaine de jours ... je travaille dessus depuis maintenant une dizaine d'heure ... (autant dire j'ai point fini encore ^^) et le moins qu'on puisse dire c'est que les VBA c'est pas mon fort ^^

    Voici deux feuilles de mon projet (organisation d'un triathlon)
    - la feuille candidats : http://hiboox.com/lang-fr/resultat.p...i.jpg&error=0#
    - la feuille résultats : http://hiboox.com/lang-fr/resultat.p...3.jpg&error=0#




    Voilà alors comme vous l'avez constaté il y a un userform dans la feuille candidats. Le problème c'est qu'il y a plusieurs choses que je n'arrive pas à faire "dire" à cette userform:

    - j'aimerais rajouter un intitulé "dossard" dedans. La particularité c'est qu'il y aurait une sorte de zone de texte prédéfini. Ainsi, lorsque l'on inscrirait un nouveau candidat, le premier numéro de dossard libre (par exemple dans ce cas ce serait le dossard 5) lui soit attribué automatiquement.
    - j'aimerais également que lorsque je clique sur le bouton valider de la userform, elle rentre les données dans la feuille candidats mais également certaines (en l'occurence "dossard", "nom", "prénom" et "statut") dans la feuille résultat.

    J'espere n'avoir rien oublié pour votre compréhension (sinon un petit edit et hop) ... merci d'avance




    PS : si qqun souhaite avoir le fichier excel contact me par mp

  2. #2
    Membre éprouvé
    Inscrit en
    Juillet 2005
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 121
    Par défaut
    bonjour a toi,

    Concernant l'histoire du dossard :

    tu crées une nouvelle zone de texte que tu nommes comme tu veux ( ex : "dossard" ) et dans ton code de userform tu crées la procedure userform_initialize ()

    Dans cette procedure, tu mets :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Private Sub UserForm_initialize()
     
    range("D10").select
    do until activecell.value = ""
        activecell.offset(1,0).select
    loop
    userform.dossard.value = activecell.value +1
     
    end sub
    Pour l'histoire des données a transferer dans les 2 feuilles :

    Dans le code de ton userform, tu dois avoir une procedure Private sub BOUTON_click().

    Dans cette procedure ( que je n'ai pas mais je vais essayé quand meme ), tu ajoutes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    sheets("Resultat").activate
    sheets("Resultat").range("D11").select
    do until activecell.value = ""
        activecell.offset(1,0).select
    loop
    ' la suite n'est bonne qu'avec les bons noms de textbox
    activecell.value = Userform.dossard.value
    activecell.offset(0,1).value = Userform.nom.value
    activecell.offset(0,2).value = Userform.prenom.value
    activecell.offset(0,3).value = Userform.statut.value

  3. #3
    Membre chevronné
    Avatar de Bigalo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 445
    Par défaut
    Remit,

    L’emploi de Select et autre Activate est à proscrire dans la quasi totalité des cas. Cela a pour seule fonction de ralentir le traitement

    Par exemple,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub UserForm_initialize()
        Dossard = Range("D10").End(xlDown) + 1
    End sub
    remplace très avantageusement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Private Sub UserForm_initialize()
     
    range("D10").select
    do until activecell.value = ""
        activecell.offset(1,0).select
    loop
    userform.dossard.value = activecell.value +1
     
    end sub

  4. #4
    Membre éprouvé
    Inscrit en
    Juillet 2005
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 121
    Par défaut
    J'essaie d'aider avec mes humbles connaissances...

    Mais c'est clair que ça doit aller plus vite... je ne connaissais pas ce truc...

    Merci pour ça.

    sinon si on recherche jusqu'a trouver un valeur ( Ex : 0 ) ça marche plus le .end(xldown) ??

  5. #5
    Membre chevronné
    Avatar de Bigalo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 445
    Par défaut
    RemiT,

    End permet de trouver la dernière cellule non vide dans la direction indiquée (xlDown, xlUp, xlLeft ou xlRight).

    Pour trouver la première occurrence d’une valeur particulière, 0 par exemple, on utilise Find :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub ZeroSuivant()
    Dim c As Range
        Set c = Cells.Find(What:=0, After:=Range("D10"), LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, _
        SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
            If Not c Is Nothing Then
                MsgBox c.Address(0, 0)  ' à remplacer par le traitement à effectuer
            End If
    End Sub
    Il n’est pas nécessaire de sélectionner un objet pour en lire ou modifier les propriétés. Par conséquent, il n’y a aucune raison de le sélectionner si on doit accéder à un autre objet (au moins), avant la fin du traitement. Ce n’est qu’au moment où on rend la main à l’utilisateur, qu’il peut être utile de mettre telle feuille de tel classeur au premier plan, et éventuellement de sélectionner une cellule particulère.

    On en revient aux discussions précédentes avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Set cellule = Range("A5")
    Comme en principe, on ne sélectionne jamais un objet dont on veut lire ou modifier les propriétés, il est vivement conseillé de l’affecter à une variable objet, utilisée dans la suite du code.

    Cette façon de faire donne un code beaucoup plus efficace, en particulier en terme de vitesse.

    Cordialement,

  6. #6
    Membre chevronné
    Avatar de Bigalo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 445
    Par défaut
    Complément au message précédent :

    ActiveCell et Selection sont rarement utiles, comme nous venons de le voir, dans un traitement finalisé.

    Par contre, ils sont très pratiques pour la réalisation de tests : on entre quelques données dans une feuille, on sélectionne les cellules concernées, et on teste un bout de code avec ActiveCell ou Selection.

    Cordialement,

  7. #7
    Membre éprouvé
    Inscrit en
    Juillet 2005
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 121
    Par défaut
    Excuse nous Fadafana de monopoliser ton post mais je prend un cours de programmation par quelqu'un qui sait, bref par un VRAI programmeur.

    Merci Michel ( si je peux t'appeler Michel ).

    Et dire que je travaille depuis des mois sur un programme qui contient des select, activecell, activate... toutes les 3 lignes... CHAMPION

  8. #8
    Membre chevronné
    Avatar de Bigalo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 445
    Par défaut
    Bonjour,

    Ce n’est pas une très bonne idée, selon moi, de nous fournir des images écran sur hiboox.com.

    Il serait beaucoup plus facile de t’aider avec ton document Excel ou au moins un extrait de celui-ci, quitte à effacer les éléments confidentiels, s’il y en a.

    Tu peux envoyer une pièce jointe avec tes messages, ou déposer un document sur un site comme www.cjoint.com.

    L’avantage de cjoint.com est que tu es moins limité en taille de fichier. Le défaut, est que le document n’est conservé que quelques semaines, ce qui empêchera quelqu’un faisant une recherche ici (développez.net) d’avoir accès au(x) document(s) si le délai est écoulé.

    Cordialement,

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 26
    Par défaut
    Sinon oui ca m'a bien aidé et ... une autre question : que se passe t-il quand j'ai deux procédures identiques ... ca ne marche pas j'ai l'impression (erreur d'ambiguité un truc comme ca^^) ... alors comment fais-je ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub UserForm_initialize()
        dossard = Range("D10").End(xlDown) + 1
     
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub UserForm_initialize()
     
      ComboBox1.ColumnCount = 1
      ComboBox1.List() = Array("", "Amateur", "Pro")
      ComboBox2.ColumnCount = 1
      ComboBox2.List() = Array("", "Oui", "Non")
      ComboBox3.ColumnCount = 1
      ComboBox3.List() = Array("", "Oui", "Non")
     
    End Sub

  10. #10
    Membre éprouvé
    Inscrit en
    Juillet 2005
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 121
    Par défaut
    Il nous manque un truc...

    Si ces 2 procedures sont dans des "feuilles" différentes, y'a pas de probleme.
    Private sub Userform_Initialize () est un terme général.

    Si ces 2 procedures sont l'une sous l'autre dans la meme "feuille", en effet, y'a un probleme mais elles doivent pouvoir ne former qu'une seule procedure.

    as-tu essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Private Sub UserForm_initialize()
     
        dossard = Range("D10").End(xlDown) + 1
        ComboBox1.ColumnCount = 1
        ComboBox1.List() = Array("", "Amateur", "Pro")
        ComboBox2.ColumnCount = 1
        ComboBox2.List() = Array("", "Oui", "Non")
        ComboBox3.ColumnCount = 1
        ComboBox3.List() = Array("", "Oui", "Non")
     
    End Sub

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 26
    Par défaut
    Ca marche

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 26
    Par défaut
    J'ai un autre gros probleme ... j'ai crée mon userform et tout ... quand je remplis les cases du userform et que j'appuie sur le bouton "OK" ... les données ne rentrent pas dans le tableau excel


    Voici le code ... manque t-il quelquechose?

    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
    Private Sub ComboBox1_Change()
    Sheets("candidats").Select
    Range("G10").Select
     
    Do
    If ActiveCell <> "" Then ActiveCell.Offset(1, 0).Select
    Loop Until ActiveCell.Value = ""
     
    End Sub
    Private Sub ComboBox2_Change()
    Sheets("candidats").Select
    Range("I10").Select
     
    Do
    If ActiveCell <> "" Then ActiveCell.Offset(1, 0).Select
    Loop Until ActiveCell.Value = ""
     
    End Sub
    Private Sub ComboBox3_Change()
    Sheets("candidats").Select
    Range("K10").Select
     
    Do
    If ActiveCell <> "" Then ActiveCell.Offset(1, 0).Select
    Loop Until ActiveCell.Value = ""
     
    End Sub
     
    Private Sub CommandButton1_Click()
     
    End Sub
     
    Private Sub TextBox1_Change()
    Sheets("candidats").Select
    Range("E10").Select
     
    Do
    If ActiveCell <> "" Then ActiveCell.Offset(1, 0).Select
    Loop Until ActiveCell.Value = ""
     
    End Sub
    Private Sub TextBox2_Change()
    Sheets("candidats").Select
    Range("F10").Select
     
    Do
    If ActiveCell <> "" Then ActiveCell.Offset(1, 0).Select
    Loop Until ActiveCell.Value = ""
     
    End Sub
    Private Sub TextBox3_Change()
     
    End Sub
    Private Sub UserForm_initialize()
     
        TextBox3 = Range("D10").End(xlDown) + 1
        ComboBox1.ColumnCount = 1
        ComboBox1.List() = Array("", "Amateur", "Pro")
        ComboBox2.ColumnCount = 1
        ComboBox2.List() = Array("", "Oui", "Non")
        ComboBox3.ColumnCount = 1
        ComboBox3.List() = Array("", "Oui", "Non")
     
    End Sub
    Private Sub Annuler_Click()
    Unload Candidat
     
    End Sub

  13. #13
    Membre éprouvé
    Inscrit en
    Juillet 2005
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 121
    Par défaut
    oui, c'est normal !!! lol

    - tes procedures combobox*_change ne font rien... elles se positionnent sur une cellule sans y mettre quoi que ce soit...

    - ta procedure commandbutton1_click est vide... ce qui par definition du vide, ne fait rien non plus...

    Remplace donc tes procedures combobox*_change et Commandbutton1_Click par :

    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
     
    Private Sub CommandButton1_Click()
     
        Sheets("candidats").Select
        Range("E10").Select
     
        Do Until ActiveCell.Value = ""
            ActiveCell.Offset(1, 0).Select
        Loop
     
        ActiveCell.Value = TextBox1.Text
        ActiveCell.Offset(0, 1).Value = textbox2.Text
        ActiveCell.Offset(0, 2).Value = ComboBox1.Value
        ActiveCell.Offset(0, 4).Value = ComboBox2.Value
        ActiveCell.Offset(0, 6).Value = ComboBox3.Value
     
    End Sub
    Je n'ai pas pu tester car pas de fichier mais ça devrait tourner...

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 26
    Par défaut
    Oui merci ca marche impec


    MERCI BEAUCOUP


    Il manque juste le numéro du dossard qui ne rentre pas ... j'imagine c'est le meme probleme et je m'y attelle tout de suite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub UserForm_initialize()
     
        TextBox3 = Range("D10").End(xlDown) + 1
    End Sub
    J'imagine que je dois rentrer ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveCell.Offset(0, 0).Value = textbox3.Text


    Autre chose : quand je rentre les données amateur/ pro et oui/non ... comment faire pour que les formules si qui y soit associés soient calculés automatiquement?

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

Discussions similaires

  1. Affichier Excel dans le rootPanel de mon projet
    Par kazabliz dans le forum GWT et Vaadin
    Réponses: 0
    Dernier message: 22/06/2009, 11h22
  2. problème de référencer excel ou word dans mon projet
    Par safezahra dans le forum VB.NET
    Réponses: 2
    Dernier message: 02/09/2008, 14h45
  3. Réponses: 1
    Dernier message: 12/06/2008, 22h47
  4. Réponses: 2
    Dernier message: 25/06/2007, 20h31
  5. Réponses: 5
    Dernier message: 05/06/2004, 13h12

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