Précédent   Forum du club des développeurs et IT Pro > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 20/11/2012, 00h32   #1
janakka-horus
Invité de passage
 
Inscription : mai 2007
Messages : 36
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 36
Points : 1
Points : 1
Par défaut Formulaire saisie facture

Bonjour,

Je voudrai créer un formulaire de saisie de facture. J'ai commencer par ce formulaire (voir copie du fichier que j'ai creer) mais je bloque lorsque je veux saisir le détail des charges;
En effet mon formulaire de saisie de facture comprend au moins deux lignes. C'est a dire que la première ligne que je dois saisir correspond a l'identification du fournisseur et de l'identification de la facture à savoir la date de la facture le nom du fournisseur le n° de facture, le mode règlement de la facture et le montant TTC de la facture.
La deuxième ligne correspond au détail de la facture, au taux de tva, et du montant HT de la facture.

Ma question est comment dois je faire pour pour que le code charge et le montant HT soit saisi sur la deuxième ligne après la ligne identification.

pour info voici le code que j'utilise pour le formulaire

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Private Sub CommandButton1_Click()
Dim Ctrl As Control
Dim r As Integer
Dim t As Integer
Dim DerLigne As Integer
 
With Worksheets("Feuil1")
DerLigne = .Range("c6000").End(xlUp).Row + 1
 
For Each Ctrl In UserForm1.Controls
 
r = Val(Ctrl.Tag)
 
If r > 0 Then Feuil1.Cells(DerLigne, r) = Ctrl
Next
 
End With
 
TextBox1 = ""
End
 
End Sub
Merci pour l'aide que vous pouvez m'apporter
Fichiers attachés
Type de fichier : rar ESSAIE FORM.rar (19,4 Ko, 41 affichages)
janakka-horus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2012, 07h28   #2
Daranc
Membre Expert
 
Avatar de Daranc
 
Inscription : janvier 2007
Messages : 1 300
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 1 300
Points : 1 427
Points : 1 427
Tu veux dire que de ton USF tu remplis des "Textbox " qui doivent s'écrire sur deux ligne dans la feuille?
si c'est le cas
fait deux petits tableaux en mémoire
Code :
dim Ligne_1(1 to 13) as variant
et
Code :
dim ligne_2( 1 to 13) as variant
tu les remplis avec tes valeurs de textbox
et tu les poses chacun sur leur plage
Code :
1
2
range(plage1).value= ligne_1
range(plage2).value= ligne_2
après tu peut une fois ceci bien assimilé passer sur un seul tableau de deux ligne Tablo( 1 to 2, 1 to 13)
__________________
Cordialement
Daranc
Daranc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2012, 09h18   #3
gFZT82
Expert Confirmé
 
Homme
Retraité
Inscription : avril 2011
Messages : 1 617
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Retraité

Informations forums :
Inscription : avril 2011
Messages : 1 617
Points : 3 594
Points : 3 594
Bonjour,

Les TextBox sont repérées avec des tags . Il te suffit donc de sélectionner la ligne suivant ces numéros.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Private Sub CommandButton1_Click()
Dim Ctrl As Control
Dim r As Integer
Dim DerLigne As Long, Ligne As Long
    With Worksheets("Feuil1")
        DerLigne = .Range("B" & Rows.Count).End(xlUp).Row + 1
        For Each Ctrl In UserForm1.Controls
            r = Val(Ctrl.Tag)
            If r > 0 Then
                Select Case r
                Case 7, 11, 13, 14
                    Ligne = DerLigne + 1
                Case Else
                    Ligne = DerLigne
                End Select
                Feuil1.Cells(Ligne, r) = Ctrl
            End If
        Next
    End With
End Sub
Cordialement.
gFZT82 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 20/11/2012, 10h57   #4
janakka-horus
Invité de passage
 
Inscription : mai 2007
Messages : 36
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 36
Points : 1
Points : 1
@ gFZT82

Merci pout ton aide. Mais cela ne marche pas lorsque je veux saisir plusieur factures a la suite.
Les factures précédentes sont effacées par les factures suivantes.
de plus les montants Débits et Crédit de la ligne identification restent vident.

Aurais tu une solutions.
Merci pour ton aide car je suis vraiment débutant en VBA.

@ Daranc

Comment fait on pour créer deux tableau en mémoire.
Je ne saisi pas.

Merci
janakka-horus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2012, 13h54   #5
gFZT82
Expert Confirmé
 
Homme
Retraité
Inscription : avril 2011
Messages : 1 617
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Retraité

Informations forums :
Inscription : avril 2011
Messages : 1 617
Points : 3 594
Points : 3 594
Citation:
Cela ne marche pas lorsque je veux saisir plusieurs factures a la suite.
Les factures précédentes sont effacées par les factures suivantes.
Ce n’est pas anormal car la recherche de la dernière ligne renseignée était effectuée sur la colonne B (n° de pièce). Or ce numéro n’est pas renseigné via le formulaire (je ne sais pas si c’est volontaire).
La dernière ligne renseignée est maintenant définie avec la dernière cellule de la plage utilisée, ce qui devrait résoudre le problème.
Citation:
les montants Débits et Crédit de la ligne identification restent vides.
J’ai modifiés les tags afin de pouvoir déterminer la ligne et la colonne correspondantes.
Exemples :
le tag de la TextBox1 / DATE est maintenant 1-3 (ligne 1 – colonne 3).
le tag de la TextBox12/ Code TVA est maintenant 2-11 (ligne 2 – colonne 11).

Cordialement.
Fichiers attachés
Type de fichier : xls ESSAIE FORM8_bis.xls (44,5 Ko, 25 affichages)
gFZT82 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 20/11/2012, 15h21   #6
janakka-horus
Invité de passage
 
Inscription : mai 2007
Messages : 36
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 36
Points : 1
Points : 1
Super ça marche parfaitement.
J'ai deux autres question.?
Si je veux saisir plus de deux ligne, c'est à dire 3 ligne de charges. est il possible de créer un formulaire qui s'adapte en fonction de cela. En effet j'ai des factures qui peuvent avoir 1 ou plusieurs type de produit. Donc il faudrait que j'adapte mon formulaire en fonction.

Autre et dernière question est il possible de copier automatiquement la date, le libellé et les période début et fin sur les ligne suivantes sans que j'ai a les ressaisir.

En effet j'ai rajouter des ligne de saisies supplémentaires. mais cela me laisse des lignes vides lorsque je n'utilise pas toutes les ligne comme tu peux le constater sur le fichier ci dessous.

en tout cas merci pour ton aide si précieuse.


Merci
Fichiers attachés
Type de fichier : xls ESSAIE FORM8_bis.xls (50,5 Ko, 6 affichages)
janakka-horus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2012, 17h02   #7
gFZT82
Expert Confirmé
 
Homme
Retraité
Inscription : avril 2011
Messages : 1 617
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Retraité

Informations forums :
Inscription : avril 2011
Messages : 1 617
Points : 3 594
Points : 3 594
Dans la solution jointe, on ne touche pas à ce qui est déjà fait, ce qui permet de conserver la même logique de traitement avec une identification des lignes et colonnes par les tags.
On rajoute un traitement pour supprimer les lignes inutiles.
On rajoute un traitement pour copier les dates et libellés.

Cordialement.
Fichiers attachés
Type de fichier : xls ESSAI FORM8_ter.xls (45,5 Ko, 15 affichages)
gFZT82 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 20/11/2012, 22h24   #8
janakka-horus
Invité de passage
 
Inscription : mai 2007
Messages : 36
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 36
Points : 1
Points : 1
merci beaucoup pour ton aide ça marche impeccable.

Quel code dois je utiliser pour que la textbox1 ne contient que des date sous le format dd/mm/aaaa.
C'est a dire si on tape 01/1/12 ou cela me converti en 01/01/2012

Merci
janakka-horus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2012, 22h59   #9
gFZT82
Expert Confirmé
 
Homme
Retraité
Inscription : avril 2011
Messages : 1 617
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Retraité

Informations forums :
Inscription : avril 2011
Messages : 1 617
Points : 3 594
Points : 3 594
Code :
1
2
3
4
5
6
7
8
9
10
11
12
        For Each Ctrl In UserForm1.Controls
            If Ctrl.Tag <> "" And Ctrl <> "" Then
                r = CInt(Split(Ctrl.Tag, "-")(1)) 'N° de colonne
                OffsetLigne = Split(Ctrl.Tag, "-")(0) + 1 'Décalage ligne
                Select Case r
                Case 3, 9, 10
                    Feuil1.Cells(LigneAjout, r).Offset(OffsetLigne, 0) = CDate(Ctrl)
                Case Else
                    Feuil1.Cells(LigneAjout, r).Offset(OffsetLigne, 0) = Ctrl
                End Select
            End If
        Next
Cordialement.
gFZT82 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 23/11/2012, 00h58   #10
janakka-horus
Invité de passage
 
Inscription : mai 2007
Messages : 36
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 36
Points : 1
Points : 1
Je souhaiterai que le n° de piece s'incremente automatiquement.
Comment dois je faire?

Merci
janakka-horus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2012, 07h07   #11
Philippe Tulliez
Expert Confirmé Sénior
 
Homme Philippe Tulliez
Formateur Office et développeur VBA (Excel, Access et Word)
Inscription : janvier 2010
Messages : 3 085
Détails du profil
Informations personnelles :
Nom : Homme Philippe Tulliez
Localisation : Belgique

Informations professionnelles :
Activité : Formateur Office et développeur VBA (Excel, Access et Word)

Informations forums :
Inscription : janvier 2010
Messages : 3 085
Points : 6 972
Points : 6 972
Bonjour,

Ceci va certainement t'aider VBA / Fonction - Incrémentation de n°
__________________
Philippe Tulliez
http://philippe.tulliez.be
Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)

Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
Dernier article : Excel – Créer un affichage personnalisé sans VBA
Mes contributions : Fonction Incrémentation d'un n° (Compteur) - Procédure de tri pour Excel 2003-2010
Philippe Tulliez est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2012, 09h45   #12
gFZT82
Expert Confirmé
 
Homme
Retraité
Inscription : avril 2011
Messages : 1 617
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Retraité

Informations forums :
Inscription : avril 2011
Messages : 1 617
Points : 3 594
Points : 3 594
Bonjour,

Plusieurs adaptations sont nécessaires :
Dans l’Userform1, ajout de la TextBox27 pour le numéro de pièce.
A l’initialisation de l’Userform1, le numéro de pièce est calculé puis affiché dans la TextBox27.
A chaque validation de saisie, ce numéro est copié dans la feuille puis recalculé et affiché pour préparer la saisie suivante.

Cordialement.
Fichiers attachés
Type de fichier : xls ESSAI FORM8_ter.xls (62,0 Ko, 20 affichages)
gFZT82 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/11/2012, 00h51   #13
janakka-horus
Invité de passage
 
Inscription : mai 2007
Messages : 36
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 36
Points : 1
Points : 1
Citation:
Envoyé par gFZT82 Voir le message
Bonjour,

Plusieurs adaptations sont nécessaires :
Dans l’Userform1, ajout de la TextBox27 pour le numéro de pièce.
A l’initialisation de l’Userform1, le numéro de pièce est calculé puis affiché dans la TextBox27.
A chaque validation de saisie, ce numéro est copié dans la feuille puis recalculé et affiché pour préparer la saisie suivante.

Cordialement.
Merci beaucoup pour ton aide precieuse
janakka-horus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2013, 21h47   #14
janakka-horus
Invité de passage
 
Inscription : mai 2007
Messages : 36
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 36
Points : 1
Points : 1
bonjour

Je souhaiterai savoir comment faire pour que les textbox :
- Nom Fournisseur, Libellé, N° de factures, Période début, Période fin soit en format texte
- Date soit en format date
- Montant Débit et Montant crédit soit en format nombre.

Ceci est important car ensuite ses données sont injectées directement dans le logiciel de compta. Le mauvais format crée une erreur.

Merci pour tout
janakka-horus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2013, 09h49   #15
gFZT82
Expert Confirmé
 
Homme
Retraité
Inscription : avril 2011
Messages : 1 617
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Retraité

Informations forums :
Inscription : avril 2011
Messages : 1 617
Points : 3 594
Points : 3 594
Bonjour,

Les valeurs des TextBox sont au format texte.
Pour les utiliser sous un type différent, tu dois les convertir :
- avec CDate pour la conversion des dates
- avec CDbl pour les Débits/Crédits.

Cordialement.
gFZT82 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 15/01/2013, 10h44   #16
janakka-horus
Invité de passage
 
Inscription : mai 2007
Messages : 36
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 36
Points : 1
Points : 1
Bonjour,
Merci a nouveau pour ta réponse.
Pourrais tu me dire pour la date si c'est bon à partir de ce que j'ai fais.
En fait mon but c'est que lorsque j'ai saisie une facture par le formulaire et que je clique droit sur la cellule libellé (par exemple) le format cellule doit être Texte et non standard car lorsque j'injecte une facture dans le logiciel comptable cela me créer une erreur dû au mauvais format.

encore merci
Fichiers attachés
Type de fichier : xls ESSAI FORMulaire_ter.xls (71,0 Ko, 10 affichages)
janakka-horus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2013, 12h45   #17
gFZT82
Expert Confirmé
 
Homme
Retraité
Inscription : avril 2011
Messages : 1 617
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Retraité

Informations forums :
Inscription : avril 2011
Messages : 1 617
Points : 3 594
Points : 3 594
Citation:
mon but c'est que lorsque j'ai saisie une facture par le formulaire et que je clique droit sur la cellule libellé (par exemple) le format cellule doit être Texte et non standard car lorsque j'injecte une facture dans le logiciel comptable cela me créer une erreur dû au mauvais format.
Je ne vois pas l'intérêt d'effectuer ce traitement.
Si dans ta feuille initiale les colonnes sont formatées correctement, la copie des données converties au format souhaité ne doit pas poser problème.
Inutile donc d'effectuer un traitement complémentaire.

Cordialement.
gFZT82 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 15/01/2013, 15h56   #18
janakka-horus
Invité de passage
 
Inscription : mai 2007
Messages : 36
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 36
Points : 1
Points : 1
Ok je vais essayer.
Il ne me reste plus qu'a creer une combox que je souhaiterai te soumettre au niveau du nom fournisseur et du code fournisseur. C'est a dire que si je tape le nom fournisseur le code fournisseur doit apparaitre automatiquement et inversement.
Je voudrai savoir aussi est il possible de faire une concatenation dans la textbox libellé à partir du nom fournisseur et de la date de la facture.

Dans la feuille 2 j'ai crée une table qui contient la liste des Fournisseurs ainsi que leur codes afin d'aliment la Combox1 "Nom Fournisseur" et la Combox2 "Code Fournisseurs".
Colonne A = Code Fournisseur
colonne B = Nom Fournisseur.
j'ai tapé ce code mais cela ne marche pas .
Pouvez vous me dire ce qui cloche ? Cela me marque "Erreur de Compilation : Déclaration existante dans la portée en cours"

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Private Sub UserForm_Initialize()
    With Worksheets("Feuil1")
        DerLig = .Range("B" & Rows.Count).End(xlUp).Row
        If DerLig > 1 Then
            Me.TextBox27.Value = .Range("B" & DerLig).Value + 1
        Else
            Me.TextBox27.Value = 1
        End If
    End With
 
    Dim tablo, DerLig As Integer
 
     With Worksheets("Feuil2")
    DerLig = .Range("B63566").End(x1up).Row
    tablo = .Range("B2:B" & DerLig)
 
    ComboBox1.List = tablo
    End With
 
 
End Sub
A terme je souhaiterai que si je renseigne le Nom Fournisseur cela me donne son code Fournisseur et inversement.
janakka-horus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2013, 16h32   #19
gFZT82
Expert Confirmé
 
Homme
Retraité
Inscription : avril 2011
Messages : 1 617
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Retraité

Informations forums :
Inscription : avril 2011
Messages : 1 617
Points : 3 594
Points : 3 594
Pour renseigner la ComboBox1
Code :
1
2
3
4
5
6
7
8
Private Sub UserForm_Initialize()
Dim tablo, DerLig As Integer
    With Worksheets("Feuil2")
        DerLig = .Range("B63566").End(xlUp).Row
        tablo = .Range("B2:B" & DerLig)
        ComboBox1.List = tablo
    End With
End Sub
La ComboBox2, je ne la vois pas dans ton code.

Citation:
Il ne me reste plus qu'a créer une combox que je souhaiterai te soumettre au niveau du nom fournisseur et du code fournisseur. C'est a dire que si je tape le nom fournisseur le code fournisseur doit apparaitre automatiquement et inversement.
Le plus simple, c’est de remplacer la TextBox "Nom Fournisseur" par une ComboBox qui contiendra la liste des noms. La TextBox "Code Fournisseur" pourra être supprimée puisque ce code est associé au nom fournisseur. Pour renseigner la feuille avec ce code, il suffira de lire le code associé dans la liste.
Si besoin, tu peux effectivement créer 2 ComboBox et lier les deux listes pour permettre de sélectionner indifféremment le nom ou le code fournisseur.
Citation:
Je voudrais savoir aussi est il possible de faire une concaténation dans la textbox libellé à partir du nom fournisseur et de la date de la facture.
Si tu souhaites que le libellé soit formé simplement par la concaténation du nom fournisseur et de la date de la facture, tu peux supprimer la TextBox "libellé" de ton formulaire.
Ensuite, tu rajoutes la ligne de code
Code :
Feuil1.Cells(LigneAjout, 6).Offset(OffsetLigne, 0) = TextBox2.Text & " " & Format(TextBox1.Value, "mm/yyyy")
Cordialement.

J'oubliais de t'indiquer où se trouvait l'erreur :
Ne pas confondre End(xlUp) et End(x1up)

Cordialement.
gFZT82 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 15/01/2013, 19h52   #20
janakka-horus
Invité de passage
 
Inscription : mai 2007
Messages : 36
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 36
Points : 1
Points : 1
J'ai ecris ca comme code mais cela ne marche pas.

Code :
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
Private Sub ComboBox1_DropButtonClick()
Dim tablo, DerLig As Integer
    With Worksheets("Feuil2")
        DerLig = .Range("B63566").End(xlUp).Row
        tablo = .Range("B2:B" & DerLig)
        ComboBox1.List = tablo
    End With
 
    With Worksheets("Feuil2")
    ComboBox2.ListIndex = ComboBox1.ListIndex
 
    End With
End Sub
 
 
Private Sub ComboBox2_DropButtonClick()
Dim tablo, DerLig As Integer
    With Worksheets("Feuil2")
        DerLig = .Range("A63566").End(xlUp).Row
        tablo = .Range("A2:A" & DerLig)
        ComboBox1.List = tablo
    End With
 
 With Worksheets("Feuil2")
    ComboBox1.ListIndex = ComboBox2.ListIndex
 
    End With
 
End Sub
J'ai du mal a savoir d’où vient le probleme. Je joins le fichier au cas ou.
Merci
Fichiers attachés
Type de fichier : xls ESSAI FORMulaire.xls (78,0 Ko, 26 affichages)
janakka-horus est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 21h44.


 
 
 
 
Partenaires

Hébergement Web