Se connecter avec
S'enregistrer | Connectez-vous

Autoriser le 0 en premier chiffre dans une textbox

Dernière réponse : dans Programmation
Lassé par la pub ? Créez un compte

Meilleure solution

Expert Programmation

Bon, je te propose d'accélérer un peu les choses.
Mais il va falloir suivre. :o 

j'ai récupéré un bon vieux VB6 sur mon poste de travail, sans rien dire au patron (qui croit que la machine qu'il me confie est inviolable :lol:  ).
Il est en anglais alors je te donnerais certains trucs dans la langue de Shakespeare.

C'est reparti, comme en 14 !!
(1994 - à l'époque, cétait VB 3.0 [:glublutz:11] )

Ouvre un nouveau projet dans VB.
Ouvre le menu Tools/Options. Coche Require Variable Declaration. (Option Explicit)
Ouvre le menu Project/Properties. Choisis un nom cool à ton projet : NosInvites. C'est bat, non !?
Ouvre Project/Add Modules. Un nouveau module s'ouvre.
Définit de variable et contantes globales :
  1. Option Explicit
  2.  
  3. ' // Cet objet sera vu par tous !
  4. Global WB As Object
  5.  
  6. ' // Déclaration de constantes
  7. Global Const taView = 0
  8. Global Const taAdd = 1
  9. Global Const taUpd = 2
  10. Global Const taDel = 3


Dans la forme Form1, quatre boutons : Consulter, Ajouter, Modifier, Supprimer et une liste List1.
C'est tout, sauf que tu peux ajouter un bouton Quitter.
En voici le code :
  1. Option Explicit
  2.  
  3. Dim XL As Object
  1. Private Sub btnAdd_Click()
  2. Load Form2
  3. Form2.SetData taAdd, -1
  4. Form2.Show vbModal
  5. Reload
  6. End Sub
  1. Private Sub btnDel_Click()
  2. If List1.ListIndex = -1 Then Exit Sub
  3. Load Form2
  4. Form2.SetData taDel, List1.ItemData(List1.ListIndex)
  5. Form2.Show vbModal
  6. Reload
  7. End Sub
  1. Private Sub btnQuit_Click()
  2. Unload Me
  3. End Sub
  1. Private Sub btnUpd_Click()
  2. If List1.ListIndex = -1 Then Exit Sub
  3. Load Form2
  4. Form2.SetData taUpd, List1.ItemData(List1.ListIndex)
  5. Form2.Show vbModal
  6. Reload
  7. End Sub
  1. Private Sub btnView_Click()
  2. If List1.ListIndex = -1 Then Exit Sub
  3. Load Form2
  4. Form2.SetData taView, List1.ItemData(List1.ListIndex)
  5. Form2.Show vbModal
  6. End Sub
  1. Private Sub Reload()
  2. Dim ws_invite As Object '// Worksheet
  3. Dim cl_invite As Object '// Range
  4.  
  5. Set ws_invite = WB.Worksheets("liste_des_invités")
  6. List1.Clear
  7. ' // La zone des invités
  8. ' // ------vvvvvvvv-----
  9. For Each cl_invite In ws_invite.Range("A1:A10")
  10. If cl_invite.Value <> "" Then
  11. List1.AddItem cl_invite.Value & " " & cl_invite.Offset(0, 1).Value, _
  12. List1.ListCount
  13. ' // La liste par défaut de VB est un peu différente
  14. ' // de la liste VBA/Excel. La gestion des colonnes est différente
  15. ' // Mais elle possède un champ Data qui contient un Long.
  16. ' // Idéale pour mettre notre numéro de ligne.
  17. List1.ItemData(List1.ListCount - 1) = cl_invite.Row
  18. End If
  19. Next
  20. End Sub
  1. Private Sub Form_Load()
  2. ' // Une bonne fois pour toute !
  3. Set XL = CreateObject("Excel.Application")
  4. Set WB = XL.Workbooks.Open("X:\chemin\classeur.xls")
  5.  
  6. Reload
  7. End Sub
  1. Private Sub Form_Terminate()
  2. WB.Close False
  3. XL.Quit
  4. End Sub


Maintenant la forme Form2.
Il faut mettre autant de champs Edit que de colonnes dans Excel.
Et les boutons Valider et Annuler.

Le bouton Annuler ferme la fenêtre sans faire la moindre action.
Le bouton Valider enregistre notre action puis ferme.

Dans le cas de la consultation, on ne peut valide rien, donc on n'annule rien. C'est pourquoi on change le nom du bouton Annuler et on cache le bouton Valider.

  1. Option Explicit
  2.  
  3. Dim m_Ligne As Long
  4. Dim m_TypeAction As Long
  1. Public Sub SetData(TypeAction As Integer, Ligne As Long)
  2. m_Ligne = Ligne
  3. m_TypeAction = TypeAction
  4.  
  5. Select Case m_TypeAction
  6. Case taView
  7. btnValide.Visible = False
  8. btnCancel.Caption = "Fermer"
  9. btnCancel.Default = True
  10. Me.Caption = "Consultation d'un invité"
  11. Text1.Enabled = False
  12. Text2.Enabled = False
  13. ' ...
  14. LoadDataFromExcel
  15. Case taAdd
  16. Me.Caption = "Ajout d'un invité à la liste"
  17. Case taUpd
  18. Me.Caption = "Modification d'un invité de la liste"
  19. LoadDataFromExcel
  20. Case taDel
  21. Me.Caption = "Radiation d'un invité"
  22. Text1.Enabled = False
  23. Text2.Enabled = False
  24. ' ...
  25. LoadDataFromExcel
  26. End Select
  27.  
  28. End Sub
  1. Private Sub LoadDataFromExcel()
  2. Dim ws_liste As Object
  3. Set ws_liste = WB.Worksheets("liste_des_invités")
  4.  
  5. Text1.Text = ws_liste.Cells(m_Ligne, 1)
  6. Text2.Text = ws_liste.Cells(m_Ligne, 2)
  7. ' ...
  8.  
  9. End Sub
  1. Private Sub SaveDataToExcel()
  2. Dim ws_liste As Object
  3. Set ws_liste = WB.Worksheets("liste_des_invités")
  4.  
  5. ws_liste.Cells(m_Ligne, 1) = Text1.Text
  6. ws_liste.Cells(m_Ligne, 2) = Text2.Text
  7. ' ...
  8.  
  9. WB.Save
  10. End Sub
  1. Private Sub btnCancel_Click()
  2. Unload Me
  3. End Sub
  1. Private Sub btnValide_Click()
  2. Dim ws_liste As Object
  3. Set ws_liste = WB.Worksheets("liste_des_invités")
  4.  
  5. Select Case m_TypeAction
  6. Case taAdd
  7. If ws_liste.Cells(1, 1).Value = "" Then
  8. m_Ligne = 1
  9. Else
  10. m_Ligne = ws_liste.Cells(1, 1).End(xlDown).Row + 1
  11. End If
  12. SaveDataToExcel
  13. Case taUpd
  14. SaveDataToExcel
  15. Case taDel
  16. ws_liste.Rows(m_Ligne).Delete
  17. WB.Save
  18. End Select
  19.  
  20. Unload Me
  21. End Sub


T'as de quoi bosser ce soir.
J'y ai mis un peu de temps, alors tu ne me poses que des questions pertinentes. Pour les autres questions, tu réfléchis bien avant :o 

;) 

Ok je viens de comprendre (je pense) ;) 

J'ai un fichier Excel 2003 qui contient du code VBA.
Sur une feuille j'ai un bouton qui m'ouvre un Userform sur lequel j'ai 5 textbox (max 2 caractères par textbox) pour enregistrer un numéro de téléphone.
Quand j'écris 06 par exemple, il me garde uniquement le 6.
J'aimerais donc savoir comment je peux faire pour qu'il me garde le 0 lorsqu'il est en premier.

Merci.
Expert Programmation

Ah, voilà c'est mieux.

Mais il va falloir développer encore plus. Ces textboxes, s'ils font disparaître tes zéros, c'est que quelque part ils sont liés à une variable de type entier.

En passant, 5 textboxes !!! :pfff:  Utilise un MaskedTextBox.

Effectivement, mes textbox sont "linked" à des cellules. J'ai donc modifié la mise en forme des cellules pour accepter le 0. Ça, c'est bon.
Par contre, je ne trouve rien sur MaskTextBox. C'est quoi ? Comment je peux m'en servir ?

Merci.

Et autre question concernant les textbox :

J'ai plusieurs textbox avec des AutoTab. Dans la première il y a plusieurs lignes (MultiLine) et la possibilité d'aller à la ligne avec la touche entrée (EnterKeyBehavior).
Quand j'écris dans cette textbox sans faire entrée et que je passe à la textbox suivante (par Tab ou à la souris), ça fonctionne très bien. Par contre, si dans la première je vais à la ligne avec Entrée, et que je passe à la textbox suivante (Tab ou souris), je ne peux pas écrire dedans et Excel plante. Je ne sais pas pourquoi.

Une idée?

Merci.
Expert Programmation

MaskTextBox, ça s'écrit comme ça : MaskedTextBox.
Tu vas voir, c'est plus facile à trouver avec la bonne orthographe [:patch]

Aucune idée :/  pour ton plantage, d'autant que tu ne donnes pas le message.

Qu'est-ce que c'est que cette histoire de passer de TextBox en TextBox dans Excel.
Tu devrais te mettre à VB, carrément. Il existe des versions non payantes, ceux sont les versions Express : http://msdn.microsoft.com/fr-fr/express/aa975050.aspx

Bonjour,

J'avais trouvé des trucs avec MaskedTextBox, car Google est intelligent donc il savait ce que je voulais trouver, mais j'ai pas trouvé assez d'infos pour savoir comment l'utiliser.

Pour le plantage, je n'ai pas de message d'erreur. J'explique :

J'ai une textbox adresse dans laquelle je peux aller à la ligne pour mettre plus ou moins en forme :
12 rue de presence-pc.com
07183 FORUM

Et ensuite je passe dans les ( :(  ) textbox du numéro de téléphone (Avec Tab ou souris) :
[06] [56] [78] [96] [45]

Voila ce que j'appelle passer de textbox en textbox.

Sauf que dès lors que je tape Entrée dans la textbox adresse et que je passe dans une autre textbox :
- je ne peux pas écrire dedans
- Excel plante (je ne peux rien faire dedans, ni enregistrer, ni fermer...)
- Idem pour Visual Basic

Mais je n'ai pas de message d'erreur.


Pour me mettre à VB, est ce que je vais pouvoir récupérer ce que j'ai déjà fait dans Excel (car j'ai déjà bien galeré :pt1cable:  )

Merci.
Expert Programmation

Laisse tomber les MaskedTextBox.

A la place, formate ta cellule en "00 00 00 00 00", et lie (link ;)  ) un et un seul textbox à cette cellule.

Excel est un tableur. La saisie est censé se faire dans des cellules, pas dans des formulaires plus ou moins bien faits (c'est une critique, pas du dénigrement :ange:  )

Avec VB, tu feras des interfaces propres et tu pourras facilement interfacer Excel.

Tant que tu poseras des questions sur VB*, je te répondrais volontiers, mais je m'impose ce devoir de conseil que de proposer des solutions plus cohérentes.

;) 

Je viens de faire ce que tu m'as dis pour le numéro de téléphone, c'est à dire une seule textbox linked à une cellule formatée en "00 00 00 00 00", mais dans la textbox quand j'écris le numéro de tel, le premier 0 s'efface (il existe bien dans la cellule).
Il y a un moyen de le garder dans la textbox ?

Merci.

P.S : je viens de télécharger VB, mais je ne sais pas du tout comment commencer... :( 
Expert Programmation

Bon, je confirme, tu cherches à faire en Excel des trucs bien trop éloignés du tableur.
Passe à VB.

Pour info, VB peut faire des listes récapitulatives. Il peut même le faire en Excel.
Quel type d'appli es-tu en train de fabriquer ?

Je suis en train de me faire une liste récapitulative d'invités pour mon mariage (l'année prochaine).
Je dois donc :
- entrer les coordonnées de l'invité (userform 1 avec textbox et listbox)
- entrer ses invitations + acceptations (userform 2 avec checkbox + listbox)
- entrer son conjoint + enfants si il en a
- faire la liste récapitulative
- pouvoir modifier les coordonnées d'un invité + modifier ses acceptations (copier coller des userforms 1 et 2)
- comptabiliser le nombre total d'invités, les invités à l'église, au repas, au vin d'honneur...

Je reconnais que je ne pensais pas au début faire un truc si complexe, mais je prends goût à me creuser la tête.

Merci.
Expert Programmation

Et tu as besoin de 5 textbox pour saisir le numéro de téléphone de tes invités :pfff: 
.
.
.
:lol: 

Si le but du jeu est de faire la liste de tes invités, alors t'as tout faux.

Si au contraire ce n'est qu'un prétexte pour apprendre à te servir d'Excel, c'est une très bonne chose.

Si c'est pour apprendre à programmer, attention jeune homme, on y prend vite goût. Et c'est ta jeune fiancé qui va se languir ...

Bon plus sérieusement. Excel n'est pas adapté à la conception d'interface de saisie. Au contraire, tout est prévu pour que cette saisie se fasse directement dans les cellules. Qu'importe, on peut quand même insister.

Sinon, pour gérer une liste un peu complexe, on peut utilise une petite base de données, genre Access. C'est un peu trop gros pour ce que tu te proposes de faire, mais tu peux y trouver l'intérêt d'apprendre à t'en servir. Dès qu'il y a plus de 65536 éléments dans une liste, on doit abandonner Excel de toutes façons. M'enfin, je ne pense pas que même au vin d'honneur il y aura autant de monde ;) 

Reste une autre solution, si tu aimes les zolis écrans de saisie : VB. Lui, il est fait pour ça. En plus, dans VB, on peut stocker les données dans une base Access par exemple, et les restituer dans une feuille Excel par exemple. Ce n'est vraiment pas difficile, surtout que tu as déjà taté de VBA.

Quelque soit ton choix, ce site est là pour t'aider. Mais n'en demande pas trop à Excel ;) 

La bise à ta fiancée
(Rhooooooo !)

Le but du jeu est bien de faire la liste, de les comptabiliser, et de pouvoir les trier par critères (noms, âges...).

Quand j'aurai réussi à faire tout ça , chapeau !!!

Je rassure ma fiancée (comme si elle allait venir lire ça...), ce n'est pas un prétexte pour apprendre à coder. Je n'en ai pas vraiment l'utilité, à part ce que je fais en ce moment, et je ne prévois pas de me marier tous les ans. Et puis de toutes façons j'aurai déjà mon fichier :-)

Bien que je n'aie pas plus de 65536 invités, je vais donc tenter avec VB, mais je ne sais pas du tout comment commencer. De longues heures sur Google en perspective... :pt1cable: 
Est ce qu'il faut faire des Userform comme dans Excel ? Comment je crée la base de données ? Est ce que je dois faire un "Tableau" comme dans Excel ?
Tout plein de questions...

Et pas de VB au boulot... Dommage.

Merci pour l'aide passée, et l'aide à venir... :sweat: 
Expert Programmation

Je suis bien embêté avec toi ! Je ne sais plus trop quoi te dire.

M'enfin, pourquoi ce besoin de faire des userforms alambiqués ?
Saisis le nom, l'âge et le numéro de téléphone dans ta feuille, tout simplement :spamafote: 
Une fois tes données dans ta feuille, Excel saura te les trier sans l'once d'une ligne de macro.

Cela dit, si ça t'amuse !

----------------------------------

Oui, en VB on fait des UserForms. On appelle ça des Forms, tout court. D'ailleurs quand tu ouvres un nouveau projet, une Form est déjà créée, c'est le fenêtre principale. Et pour stocker les données, on peut utiliser un fichier plat (fichier texte de données, genre CSV), une base de données .MDB, un classeur Excel ( :D  ) ...

Le truc, c'est que je veux que quelqu'un d'autre puisse remplir la liste, facilement, sans mettre n'importe quoi dans les cases, sans supprimer des données par erreur...

Donc le fait d'avoir des userforms, ça me permet de contrôler les données. Mais il y a surement d'autres moyens beaucoup mieux pour fair ça, sauf que je ne les connais pas.
Je l'avais dit : je débute...
Expert Programmation

Ah, mais débuter en programmation, ça ne veut pas dire débuter en bureautique.
Tu pourrais savoir maîtriser les feuilles et les formules Excel sans bien connaître VBA.

Voilà ce que nous allons faire.
Tu vas créer un nouveau projet dans VB.
Avec quatre gros boutons :
  • Voir la liste
  • Ajouter dans la liste
  • Modifier dans la liste
  • Supprimer de la liste
  • Quitter
    Tu remarqueras que ça fait cinq. :D 

    Ça y est ?
    Expert Programmation

    Le code du bouton Quitter, c'est facile :
    1. Unload Me


    Le code pour voir la liste, le voilà :
    1. Dim XL As Object
    2. Dim WB As Object
    3. Set XL = CreateObject("Application.Excel")
    4. Set WB = XL.Workbooks.Open(<ton_fichier_excel>)
    5. XL.Visible = True


    Maintenant, crée-toi trois beaux écrans de saisie pour l'ajout, la modification et la suppression.

    Merci pour ce début.

    Histoire de ne pas partir n'importe où, les écrans de saisie dont tu parles sont bien des nouveaux Forms ?

    J'ai donc créé les boutons et ajouter le code correspondant, mais j'ai des erreurs.
    En double cliquant sur le bouton, le "titre" du code se met tout seul (Exemple bouton Supprimer) :
    1. Private Sub Supprimer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
    mais j'ai une erreur dessus : Instruction non valide dans un espace de nom (Idem pour tous les boutons).

    Sur le code pour voir la liste que tu m'as donné, j'ai les erreurs suivantes :
    - Une instruction 'Class' doit se terminer par un 'End Class' correspondant
    - 'End Sub' attendu
    - Les instructions d'assignation 'Let' et 'Set' ne sont plus prises en charge
    - Balise de fin manquante dans l'élément (sur (<ton_fichier_excel> ) ) Est ce que je dois mettre l'extension.xsls ?
    - '<' ouvrant attendu pour une balise XML (après End Sub)

    Est ce qu'il faut régler toutes ces erreurs pour "tester" le programme ?

    Merci.
    Expert Programmation

    Arffff :/  :( 
    Et merdum ! :fou: 

    C'est plus du VB, c'est du VB .Net.
    C'est foutu :(  (Sauf à se mettre aussi au .Net :sarcastic:  )

    Je le redis, je suis bien embêté avec toi.
    Je ne sais plus quoi te proposer.

    Tu en demandes trop à Excel et je ne vais pas t'apprendre TOUS les langages de programmation. D'un, je ne les connais pas tous (désolé de briser le mythe :lol:  ), de deux, je ne suis pas sûr que ça t'emballe.

    Bon... Et si j'essaie un VB plus ancien (je peux prendre lequel ?), ça pourrait le faire ?
    Sinon, tant pis, je vais continuer à en demander trop à Excel :lol: , au risque de me faire jeter des pierres !!! :na: 

    Merci.

    P.S : c'est pour ça alors que je suis tombé sur une aide hier : Pourquoi la précision ".NET" est-elle importante ? :D 

    Bonjour,
    Me voila prêt aux commandes d'un VB 6.0 tout neuf.
    J'ai donc créé comme tu m'avais dit mes 4 (5) boutons, les écrans de saisie pour la création, modification et suppression des invités, et ajouter le code sur le bouton pour ouvrir ces écrans.

    Par contre il y a une erreur quand je mets le code que tu m'as donné pour voir la liste. Je l'ai modifié avec mes infos, mais je ne suis pas sûr de la syntaxe pour mon fichier excel :
    1. Private Sub Voir_Click(Index As Integer)
    2. Dim XL As Object
    3. Dim WB As Object
    4. Choix.Hide
    5. Set XL = CreateObject("Excel.Application")
    6. Set WB = XL.Workbooks.Open(Liste_d_invités.xlsx)
    7. XL.Visible = True
    8. End Sub


    Et après ...? je bloque

    Un peu plus de détails. (Je suis parti voir Shrek sans m'étendre dans les explications :D  ).

    J'ai donc préparé les écrans pour entrer les données, mais je ne sais pas comment lier les différents champs à remplir avec des infos.
    Ex : j'ai une combobox "Nom". Dans Excel a combobox se "remplit" avec des infos sur plusieurs cellules, et je pouvais lier la combobox avec une autre cellule. Là, je ne sais pas quoi en faire.
    Idem pour les textbox.

    Autre chose : dans VB 2010, il y a un calendrier dans lequel on peut choisir une date (ex pour une date de naissance). On peut faire ça dans VB 6.0 ?

    Merci.
    Expert Programmation

    Ligne 6, je pense que tu devrais soit utiliser une variable de type string, soit lui mettre une chaîne de caractères à la place du nom de fichier à ouvrir. [:patch]

    Bon, alors ça, c'est pour voir le fichier. C'est vu ?

    Alors on va faire la même chose pour lire une seule valeur.
    1. Dim XL As Object
    2. Dim WB As Object
    3.  
    4. Set XL = CreateObject("Excel.Application")
    5. Set WB = XL.Workbooks.Open("liste.xlsx")
    6.  
    7. Edit1.Text = WB.Worksheets("invité").Range("A1")
    8.  
    9. WB.Close
    10. XL.Quit
    T'as tout compris ?

    --------------------------

    Comme tu attends d'être à la maison pour vérifier, j'avance un peu sans toi ;) 

    Faut-il être con pour rouvrir à chaque fois le même fichier.
    Et si au lieu de ça, on l'ouvrait une bonne fois pour toute ?
    Faut juste que l'utilisateur ne ferme pas Excel :spamafote: 

    Je ne trouve pas le contrôle Calendar :( 

    J'ai oublié de préciser : l'erreur que j'ai sur le code que tu m'as donné est sur la ligne : (ActiveX can't create object)
    1. Set XL = CreateObject("Application.Excel" )


    Dans l'autre code, pour lire une seule valeur, à quoi correspond le Edit1.text ?

    Merci.

    Salut,

    Où est-ce que je peux trouver tes exemples ? Je ne trouve que des trucs sur Excel... :( 

    Merci pour le calendar. Il fallait le trouver que c'était mscal.ocx ;) 

    J'ai effectivement renommer mes contrôles, je vais donc pouvoir coder tout ça.

    Merci.

    Edit : Je viens de trouver ton exemple ( celui de Microsoft ;)  ) sur "Comment faire pour automatiser Excel à l'aide de VB". Je vais tester ça plus tard.
    1. Option Explicit
    2.  
    3. Private Sub Command1_Click()
    4. Dim oXL As Excel.Application
    5. Dim oWB As Excel.Workbook
    6. Dim oSheet As Excel.Worksheet
    7. Dim oRng As Excel.Range
    8.  
    9.  
    10. 'On Error GoTo Err_Handler
    11.  
    12. ' Start Excel and get Application object.
    13. Set oXL = CreateObject("Excel.Application")
    14. oXL.Visible = True
    Expert Programmation

    Quand je disais "Mes exemples", ce sont ceux que je te donnais dans ce topic-ci. J'avais écrit CreateObject("Application.Excel" ) au lieu de CreateObject("Excel.Application" ) :( 
    Comme j'ai tout édité pour remettre les choses d'équerre, je te proposais de tout relire.

    Comme par ailleurs t'es un garçon débrouillard, ... ben t'as trouvé tout seul. :) 

    OK pour l'exemple. Je n'avais pas vu ton erreur en fait... :) 

    Autres questions :
    - Est ce qu'on peut remplir les cellules du fichier Excel sans l'ouvrir ?
    - Est ce qu'on doit enregistrer le fichier Excel avant de le fermer ? Avec un truc du style
    1. XL.Save

    - Est ce que je dois mettre le code pour lire les valeurs, sur un seul bouton (exemple : "valider" sur le form où l'utilisateur remplit les données) :
    1. Private Sub Valider_Click()
    2. Dim XL As Object
    3. Dim WB As Object
    4. Set XL = CreateObject("Excel.Application")
    5. Set WB = XL.Workbooks.Open("C:\Users\Aurélien\Documents\mariage_carbonac_2011\Gestion\Liste.xlsx")
    6. Prénom.Text = WB.Worksheets("invité").Range("B2")
    7. Adresse.Text = WB.Worksheets("invité").Range("K2")
    8. XL.Visible = True
    9. WB.Close
    10. XL.Quit
    11. End Sub


    ou une ligne par textbox / combobox ?

    - pour remplir les combobox, vaut il mieux utiliser des additem ou une liste de mots dans excel ? sachant que je voudrais que l'utilisateur puisse ajouter un nom à la combobox avec un bouton ?

    Je m'explique. L'utilisateur choisit un nom de famille dans une combobox. Si le nom n'y est pas, il clique sur "Ajouter un nom", qui l'ajoutera dans la combobox. Comme ça il l'aura pour les invités suivants..

    Merci (pour avoir lu tout ça et pour les futures réponses ;)  ) :sleep: 
    Expert Programmation

    BEBER1212 a dit :
    OK pour l'exemple. Je n'avais pas vu ton erreur en fait... :) 

    Autres questions :
    - Est ce qu'on peut remplir les cellules du fichier Excel sans l'ouvrir ?
    M'enfin ! Bien sûr que oui.

    - Est ce qu'on doit enregistrer le fichier Excel avant de le fermer ?
    M'enfin ! Bien sûr que oui.
    Avec un truc du style
    1. XL.Save
    M'enfin ! Bien sûr que non. Ce n'est pas Excel que tu enregistres, mais le classeur.

    - Est ce que je dois mettre le code pour lire les valeurs, sur un seul bouton (exemple : "valider" sur le form où l'utilisateur remplit les données) :
    1. Private Sub Valider_Click()
    2. Dim XL As Object
    3. Dim WB As Object
    4. Set XL = CreateObject("Excel.Application")
    5. Set WB = XL.Workbooks.Open("C:\Users\Aurélien\Documents\mariage_carbonac_2011\Gestion\Liste.xlsx")
    6. Prénom.Text = WB.Worksheets("invité").Range("B2")
    7. Adresse.Text = WB.Worksheets("invité").Range("K2")
    8. XL.Visible = True
    9. WB.Close
    10. XL.Quit
    11. End Sub
    Je crois que tu peux te passer de la ligne 8.
    Eh, on avait pas dit qu'on ouvrait le classeur une bonne fois pour toute ?


    ou une ligne par textbox / combobox ?
    Pas compris

    - pour remplir les combobox, vaut il mieux utiliser des additem ou une liste de mots dans excel ? sachant que je voudrais que l'utilisateur puisse ajouter un nom à la combobox avec un bouton ?
    Au choix. Mais tu peux faire les deux.

    Je m'explique. L'utilisateur choisit un nom de famille dans une combobox. Si le nom n'y est pas, il clique sur "Ajouter un nom", qui l'ajoutera dans la combobox. Comme ça il l'aura pour les invités suivants..

    Merci (pour avoir lu tout ça et pour les futures réponses ;)  ) :sleep: 

    Je n'arrive pas à "appeler" mon fichier excel, pour ne pas copier son emplacement a chaque fois. J'ai testé un truc mais ça ne fonctionne pas (Subscript out of range) :
    1. Set WB = XL.Workbooks("C:\Users\Aurélien\Documents\mariage_carbonac_2011\Gestion\Liste.xlsx")

    Je ne comprends pas ce qui bug...

    Quand on remplit les cellules du fichier excel avec les différentes textbox, est ce qu'on doit enregistrer le fichier (même s'il n'est pas ouvert) ?

    Merci.
    Expert Programmation

    :/ 
    Qu'est-ce que tu appelles "ouvert" ? Tu veux dire visible à l'écran ?

    1. Set XL = CreateObject("Excel.Application" )
    Ceci ouvre l'application Excel. Sa fenêtre n'est pas forcément visible. Mais si tu vas dans le gestionnaire des tâches, tu y verras une ligne Excel.

    1. Set WB = XL.Workbooks.Open("toto")
    Ceci ouvre le classeur. Si Excel n'est pas visible, lui non plus !

    Voila le code que j'ai, mais il y a toujours l'erreur "Subscript out of range" sur la ligne 5 :
    1. Private Sub Valider_Click()
    2. Dim XL As Object
    3. Dim WB As Object
    4. Set XL = CreateObject("Excel.Application")
    5. Set WB = XL.Workbooks("C:\Users\Aurélien\Documents\mariage_carbonac_2011\Gestion\Liste.xlsx")
    6. WB.Worksheets("Invité").Range("B2") = Prénom.Text
    7. End Sub

    :( 

    Bonjour Zeb, et les autres,

    Encore une fois, MERCI !!!

    J'ai donc fait tout ce que tu m'as donné, en adaptant ça à mon fichier, mes noms de textbox, boutons et autres...
    Pour info, mon form1 :


    Mon form2 (Option de visualisation) :


    J'ai bien essayé de me débrouiller avec ça, mais j'ai encore quelques petits problèmes.

    J'ai un souci sur le bouton "Valider" de mon Form2, lorsque je souhaite ajouter un invité :
    Variable not defined sur xlDown de :
    1. Case taAdd
    2. If ws_liste.Cells(1, 1).Value = "" Then
    3. m_Ligne = 1
    4. Else
    5. m_Ligne = ws_liste.Cells(1, 1).End(xlDown).Row + 1
    6. End If
    7. SaveDataToExcel
    8. Case taUpd
    9. SaveDataToExcel
    10. Case taDel
    11. ws_liste.Rows(m_Ligne).Delete
    12. WB.Save


    Je ne comprends pas pourquoi l'erreur concerne une variable sur xlDown alors que c'est une expression "connue" dans VB, non ?

    Du coup je n'arrive pas à tester si l'ajout d'un invité dans Excel fonctionne. Peux-tu me filer un coup de main là dessus s'il te plaît ?

    Grâce à tout ce que tu m'as donné, je découvre la fonction Case, pour modifier le Form. Très pratique, moi qui avait fait dans mon programme précédent des copier/coller des textbox.

    Après, je ne comprends pas tout, mais le fait que ça bloque sur "Valider" me gêne pour tout comprendre (Mes faibles compétences en programmation m'obligent à déchiffre tout ça pas à pas :pt1cable:  ).

    Merci.

    Expert Programmation

    Et non, xlDown est connu de ... XL (excel).
    Deux solutions.

    Soit tu ajoutes Excel aux références de ton projet, mais dans ce cas seule la version d'Excel de ton poste pourra être utilisée.

    Soit tu considères que ce n'est qu'une constante qu'il te suffit de déclarer. Pour connaître sa valeur, utilise VBA/Excel :
    1. MsgBox xlDown
    Expert Programmation

    Pour ta constante : +1
    Je crois que tu progresses plus vite que tu ne le crois toi-même ;) 

    Pour tes vivas : j'applaudirai les espagnols quand leurs basques, leurs catalans et tous leurs gaillards sauront jouer au ballon ovale, comme leurs compatriotes respectifs savent si bien le faire de l'autre côté des Pyrénées.

    Je n'arrive pas à remplir ma combobox appelée "Nom" avec des données de mon fichier Excel, feuille "Noms". J'ai essayé :
    1. Private Sub Nom_Change()
    2. Nom.RowSource = WB.Worksheets("Noms").Range("A1:A19")
    3.  
    4. End Sub
    mais ça ne fonctionne pas...et je ne trouve pas ma réponse sur le net.

    Merci.

    Bon, et bien non. J'ai essayé deux méthodes (quasi similaires), mais ça ne fonctionne pas :
    1. Private Sub Nom_Change()
    2. Dim c As Range
    3. Nom.Clear
    4. For Each c In WB.Worksheets("Noms").Range("A1:A10")
    5. If c.Value = "" Then Exit For
    6. Nom.AddItem c.Value
    7. Next
    8. End Sub

    et
    1. Private Sub Nom_Change()
    2. For Each cell In WB.WorkSheets("Noms").Range("A1:A50")
    3. Nom.AddItem cell.Value
    4. Next
    5. End Sub


    Je ne vois pas ce qui cloche. Ma combobox "Nom" reste avec le text "Combobox1"... :( 
    Lassé par la pub ? Créez un compte