Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
Bonjour à tous!
J'ai un petit problème je ne connais pas du tout le langage VBA et je doit concevoir une macro! Cette macro doit archiver le tableau de la feuille ''Facture'' vers la feuille ''Archive'' ce que j'avais réussi à faire, mon problème est que je ne veut pas qu'il soit modifiable une fois rendu dans archive parce que présentement il archive les formule aussi, il faudrait qu'il archive seulement les donnée (Résultat de la formule)
Voici le fichier joint!
Merci d'avance!
Votre aide est vraiment apprécier!
Salut,pour l'archivage je verrai plus un archivage d'une facture par ligne ce qui laisse de la marge sur 2007
tu peux rendre ta veuille invisible ( xlSheetVeryHidden ) avec un mot de passe pour verrouillage
J'aimerais vous comprendre malheureusement ce n'est pas le cas!
Pour ce qui est de la feuille invisible je ne peut pas faire ca car cette feuille sera
éventuellement partager sur internet à mes vendeurs! puis pour l'archive je disais que je voulais archiver le tableau mais je disais cela car je pense que sa serait plus simple mais j'aimerais beaucoup mieux archiver seulement certaine case dans la feuille archive. Ex: archive va toujours à la suite de l'autre donc il me créer 2 ligne si c'est payé en 2 paiement 4 ligne si 4 paiement... et la ligne serait comme suit :
Date de chèque / Prenom / Nom / Montant du chèque.
Je n'ai aucun problème à ce que la feuille archive ne soit pas dans le même classeur sa serait même plus facile pour moi pour partager les archive sur internet
Salut ronamatmar et le forum
Ta macro (je suppose) légèrement modifiée :
Code:
Private Sub CommandButton2_Click()
Dim Lg As Long
With Sheets("Archive")
Lg = .Cells(Rows.Count, "A").End(xlUp).Row
[A1:F24].Copy
.Range("A" & Lg + 25).PasteSpecial xlPasteValues
.Range("A" & Lg + 25).PasteSpecial xlPasteFormats
.Activate
.Range("D7").Activate
End With
End Sub
La définition de Lg : le calcul s'adaptera à la version (avant 2007, ou à partir de 2007).
Je ne copie pas une selection (toujours problématique) mais une plage définie.
Je ne colle pas des cellules, mais leurs valeurs et leur format.
La macro est là, pour que tu puisses reconnaître le code.
Mais ton idée de sauvegarde est un peu fausse : Tu n'a pas besoin de copier/coller ton "formulaire", mais les valeurs changeantes qu'il contient.
Archive :
A : Nom
B : Prénom
C : montant des versements
D : Total
E, G, I, K, M, O : dates versements
F, H, J, L, N, P : montants versements (Sur la feuille Facturation, les cellules F7:F12 devraient être dans un format personnalisé de type AAAA/MM/JJ, pour être en cohérence avec le texte de la cellule F6)
Avantage :
- une ligne = un enregistrement
- tu peux facilement faire du "travail" sur tes enregistrements (statistiques, graphes, etc...)
- Tu peux avoir plus d'enregistrements par feuilles
Inconvénients :
- Tu ne peux pas visualiser directement, comme à la saisie, les données
- Il faut que tu transformes ton formulaire, pour la saisie et la consultation :
Pour le code c'est vraiment super sa fonctionne!
Si je voudrais ne pas copier le tableau au complet mes certaines cellules et que je suis le principe que Gorfael a expliqué A=nom b=prenom c,e,g,i,k,m,p= date de versement et que d,f,h,l,n,q=montant par versement. Quel serait la macro qui figerait les donnée car je serais capable par formule d'ammené les donnée au case approprié mais aussitot que je changerait les donnée dans facturation archive changerait aussi! J'espère être asser clair!
Gorfael merci beaucoup!
Merci des réponses!
Et vive les forum excel pour les néophites comme moi!
Salut ronamatmar et le forum
J'ai commencé à modifier ton fichier. Mais ne disposant que de la version Excel 2003, je suis obligé de convertir le fichier en xls et ça m'a créer quelques soucis.
Je commence à peine et je suis à plus de 580 ko => j'ai donc zippé, et le fichier sera vraisemblablement le seul que je joindrais, le reste (formule et/ou code des macro pourra être facilement transmis dans les postes.
La feuille archive :
J'ai créé les titres. Tu retrouveras facilement ce que j'avais mis dans le poste précédent, décalé d'une colonne.
J'ai créé en colonne A une colonne qui va servir d'identifiant (comme sur une base de données), permettant d'être sûr que la ligne concerne bien la facturation voulu, même si un même client a acheté 3 fois la même chose. Il va falloir déterminer ce code. s'il n'y en a pas déjà un, une "simple" incrémentation de numéro d'ordre suffira.
La feuille facturation : j'ai commencé, mais comme je ne suis pas d'accord avec toi, j'ai remanié les formules. Et comme je ne les connaissais pas, il a fallut que je les "désassemble" pour les comprendre.
C15 : c'est la somme des totaux des feuilles "Logi-clic" (H15) et "Cour et autre" (I13)
On va rester sur ton exemple : C15=1076,59
Ores, avec ton calcul, tu as 3 mensualités de 358,86. C'est peut-être normal chez toi, mais chez moi ça coince : 3×358,86=1076,58
Donc, c'est pour ça qu'il y a 2 mensualités à 358,86, et la dernière à 358,87.
Mais comme je ne suis ni comptable, ni employé par ta société, c'est à toi que revient le devoir de trancher 😛
F7:F12 : si j'ai bien compris, on paye une mensualité le jour de l'édition, puis une première le mois de l'installation, puis tous les mois. je n'ai changé que le format pour l'instant.
Simplement, ça me gène d'avoir des dates de versements de 0 (F10:F12 dans l'exemple). On fait quoi ? Pour moi, il faut les supprimer (un simple si(colonne C=0;""; décaler.mois) suffit.
Les boutons : Je les ai remplacer par des boutons issus de la barre d'outils "boîte à outils contrôle" => il sont prévus pour gérer des macros et le code est dans le module lié à la feuille. Ils sont aussi renommés.
Pour le bouton enregistrer : avant de valider l'enregistrement, il faut savoir ce qu'on doit vérifier : Là je ne vérifie que la présence de nom et de prénom.
Alors va falloir me dire ce qui est essentiel :
Total<>0 (on a choisi) au moins un article ou un cours) ?
La date en F8, par rapport à F7 ?
Comme il n'y a que 3 saisies, on ne peut réellement tester que les trois cellules à entrée manuelle.
L'archivage, pour moi, doit comporter tout les éléments que j'ai déjà cités précédemment, les formules pouvant être changés dans le temps (ce qui nous oblige à avoir un module de consultation différent de celui de la saisie, sous peine d'être obligé de recréer les formule).
Tout à fait en dehors de mon domaine de compétence, je pense qu'il faut voir le côté juridique : chaque fois qu'il y a le mot facturation, ça me donne des boutons : il y a souvent des différences entre ce qu'il semble logique de faire et ce qu'on est obligé de faire.
A+
Premièrement la case c7 dans ''Facturation'' doit être le versement plus les cours car les client peuvent payer logi-clic en plusieur versement mais pas les cours. Pour la question des versement qui donnais un sous de plus au total je ne savais pas comment faire alors j'avais laisser tomber car ce n'est pas dramatique mais tant mieux car je vois que c'est déjà fait. Dans l'archive je n'est pas besoin $ par versement, seulement $ du 1er 2ème ... et j'ai du rajouter une liste déroulante dans facturation pour le vendeur. Pour pouvoir enregistrer la case Nom doit être rempli et le total doit être supérieur à 0$! Ce que j'ai fait est que j'ai ajouter ma liste Vendeur et j'ai changer Versement par vendeur dans Archive. J'ai aussi ôter la protection sur les 2 premières feuilles. J'ai aussi créer une formule SI pour les dates de chèque car je ne voulais pas avoir des dates qui apparaissaient pour rien. Il restera à rétablir les versement pour l'histoire de cour qui ne peut être payer qu'en un seule paiement soit le premier et évidemment l'archive.
Salut ronamatmar et le forum
J'ai un petit problème : ton fichier me fait des misères. Je ne sais pas à quoi c'est dû, mais c'est pas grave.
Je viens juste de commencer sur ton dernier fichier. En espèrant que ça va dans le sens de tes remarques :
Feuille "Logi-clic" :
Ta as des formule de la forme D7 : =SI(C7=1;B7)
Personnellement ça me gène de voir une erreur ou Faux, Vrai.
Comme je ne suis pas utilisateur de ton fichier, ce n'est sans doute pas nécessaire d'avoir autre chose que 1 en colonne C. Pour moi elle devrait servir à définir le nombre d'unité de produit. Ce qui me donnerait une formule du type =SI(C7>0;B7*C7;0)
et tu copies jusqu'à F13. Petite remarque : il faut être le plus feignant possible, et ne s'occuper que de ce qu'on a besoin de savoir. Utiliser l'égalité (=3) t'impose le traitement des autres chiffres (4,5 et 6), alors qu'on a juste besoin de savoir qu'on a plus de 2 versements.
Si tu avais 25 versement, je te dis pas la galère 😉
Déplace tes vendeurs :
en B60 "Vendeurs" à partir de B61 les noms
Dans la boîte de dialogue "Définir un nom, tu sélectionnes vendeur, et dans Fait référence à, tu colles :
mettre à partir de 60, c'est juste que j'aime les nombres facilement mémorisable.
Ta liste de vendeur est devenue dynamique : que tu en ajoutes ou en enlève => la liste s'adapte... à condition de ne pas laisser de ligne vide dans la plage B61:B70
DECALER( => sert décaler la référence de vendeur
Facturation!$B$60; => B60
1; => Une ligne : B61
0; => 0 colonne => B61 : La référence commence à B61 et contient
NBVAL(Facturation!$B$61:$B$70); => nombre de valeurs de B61 à B70 : x lignes
1) => la référence contient 1 colonne
Pour ton exemple, Vendeur devient (chez moi) : B61:B65 (5 noms).
Bon, je l'ai faite dynamique, parce que les vendeurs peuvent augmenter ou diminuer
Pour "nombre_paiement", comme c'est fixe, autant faire une liste fixe. Pas besoin d'y toucher.
Juste une remarque : émailler les feuilles de listes, ça me gène un peu. Toutes les mettre au même endroit est plus logique. Dans le même esprit, les faire toutes démarrer sur la même ligne est mieux... mais ce n'est qu'une opinion personnelle.
Maintenant on passe aux macros :
Code:
Private Sub Cde_Enregistrer_Click()
'Déclaration des variables =======================
Dim F_S As Worksheet, F_D As Worksheet
Dim Cel As Range, Lig As Long, Col As Integer
'MEI (mise à l'état initial) =====================
Set F_S = Sheets("Facturation") 'feuille source
Set F_D = Sheets("Archive") 'feuille destination
Lig = F_D.Cells(Rows.Count, "B").End(xlUp).Row + 1 'On détermine une seule ligne de destination
'Validité de l'enregistrement ===================
'Prénom ------------------------------------------
If [C2] = "" Then ''si la cellule du prénom est vide alors
MsgBox "Vous avez oublié de préciser le Prénom !", vbCritical, "Erreur de Saisie" 'Message d'erreur
[C2].Activate 'activer la cellule du prénom
Exit Sub 'sortir de la macro
End If
'Nom ---------------------------------------------
If [C3] = "" Then
MsgBox "Vous avez oublié de préciser le Nom !", vbCritical, "Erreur de Saisie"
[C3].Activate
Exit Sub
End If
'Vendeurs ----------------------------------------
If [C4] = "" Then
MsgBox "Vous avez oublié de préciser le Vendeur !", vbCritical, "Erreur de Saisie"
[C4].Activate
Exit Sub
End If
'Vendeurs ----------------------------------------
If [F9] = "" Or [F9] < [F8] Then
MsgBox "il y a un problème de date !", vbCritical, "Erreur de Saisie"
[F9].Activate
Exit Sub
End If
'Enregistrement ===================================
F_D.Cells(Lig, "B") = F_S.[C2] 'nom
F_D.Cells(Lig, "C") = F_S.[C3] 'Prenom
F_D.Cells(Lig, "D") = F_S.[C4] 'vendeur
F_D.Cells(Lig, "E") = F_S.[C16] 'total
Col = 5
For Each Cel In F_S.[C8:C13]
Col = Col + 1
F_D.Cells(Lig, Col) = Cel 'v_1
Col = Col + 1
F_D.Cells(Lig, Col) = Cel.Offset(0, 3) 'v_1
Next Cel
'Calcul de A ======================================
F_D.Cells(Lig, "A") = WorksheetFunction.Max(F_D.Columns(1)) + 1
'RAZ ==============================================
Call Cde_Vider_Click
End Sub
Private Sub Cde_Vider_Click()
Sheets("Logi-clic").Range("C6:C21,H19").ClearContents
Sheets("Cour et autre").Range("C5:C27").ClearContents
Sheets("Facturation").Range("C2:C4,F9").ClearContents
End Sub
Il y a deux boutons :
- Cde_enregistrer : lance l'archivage et une RAZ
- Cde_Vide : lance une RAZ
Je n'ai pas commenté mes code : je trouve qu'ils sont clairs. Mais si tu as des questions n'hésite pas. Il vaut mieux insister que d'avoir un code non compris : c'est toi qui en fera la maintenance et les modifs.
A+
Bonjour à tous!
Le code marche, c'est impecable, Merci beaucoup. Le meilleur dans tous sa, est que je comprend le code et je serai capable de faire des modifs au besoin. Je n'ai plus que 2 questions: la première étant, éventuellement j'aurai à partager la feuille archive sur internet alors je voulais savoir comment faire l'archivage (même format, même donnée, même nom ...) mais dans un autre classeur. Est-ce que la macro doit être toute refait ou juste une petite modification s'impose?
Ma deuxième question est serait'il trop compliquer qu'à la suite des versement 1.2.3 .. et date 1.2.3 ... dans archivage que l'on puisse mettre les choix d'achat du client! EX: logi-clic de base, Inventaire, et cour W-e-a. Lorsque l'on clique sur enregistrer toute les cases avec un 1 renvoie le nom du produit dans archivage. Généralement une facture n'a jamais plus de 6 ou 7 produits.
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.