Modifier une macro (Excel 2007)

Bonjour,

Nous avions fait créer pour notre boutique un fichier excel pour les comptes fidélité de nos clients.

Nous avons en colonne A B et C les noms, prénoms et adresse mails de nos clients. Ensuite de la colonne D à W nous avons les achats de nos clients présentés ainsi: D et E: achat 1 (D=la date et E=le montant de l'achat), F et G: achat 2... et ainsi de suite jusqu'à V W pour le 10ème achat).

Une macro a été mise en place avec un bouton "ajouter achat". Cela nous permet une fois que nous avons cliqué sur le nom de notre cliente d'ajouter automatiquement un achat avec la date du jour. Lorsque que les 10 achats sont effectués appuyer une nouvelle fois sur ce bouton permet de basculer tous les achats sur une autre feuille d'archives pour que nous puissions faire le calcul de pourcentage de remise et recommencer un nouveau compte à zéro.

Nous avions pris l'habitude d'ajouter des commentaires chaque fois qu'un compte était terminé sur la cellule du nom du client pour indiquer le montant de sa remise et si celle-ci a été faite ou non. Malheureusement le trop grand nombre de commentaire à plusieurs fois occasionné un bug et nous avons à chaque fois perdu tous ces commentaires...

Nous avons donc décidé de procéder différemment et d'ajouter à partir de la colonne X les messages que nous mettions avant en commentaire(X pour la remise de la première carte terminée, Y pour la seconde etc). Seulement un problème se pose: lorsqu'un compte est terminé et lors du passage de tous les achats dans la feuille d'archive nous perdons les messages que nous avions ajouté à partir de la colonne X (et ils ne rebasculent même pas vers la feuille d'archive).

J'espère que je suis suffisamment claire mais j'aimerais ne pas être obligée d'ajouter notre fichier qui contient les adresses mail et parfois les numéros de téléphone de nos clients.

Je pense que le problème de toute façon est au niveau de la macro mais je n'y connais pas grand chose et ne sais pas exactement ce qu'il faudrait modifier sans faire de bêtises!

Voici la macro en question:

Sub AjoutAchat()

Dim MtAchat As Single, MtRemise As Single

Dim DLigA As Long

' Récupérer la ligne de sélection

Lig = Selection.Row

' Mémoriser le nom du client

NomClt = Range("A" & Lig) & " " & Range("B" & Lig)

NCol = Cells(Lig, Columns.Count).End(xlToLeft).Column + 1

' on récupérer la ligne de sélection

Lig = Selection.Row

' Mémoriser le nom du client

NomClt = Range("A" & Lig) & " " & Range("B" & Lig)

NCol = Cells(Lig, Columns.Count).End(xlToLeft).Column + 1

' Si la dernière colonne remplie est la 23ème = le client à fait 10 achats

If NCol > 3 + 20 Then

MtAchat = Application.WorksheetFunction.SumIf(Range("D2:W2"), "Montant", Range("D" & Lig & ":W" & Lig))

MtRemise = MtAchat * 10 / 100

' Afficher le message

MsgBox "Le client à droit à 10% de remise" & vbCr _

& "Montant total achat = " & Format(MtAchat, "#,##0.00") & vbCr _

& "Remise = " & Format(MtRemise, "#,##0.00"), vbInformation, "REMISE ACCORDEE"

' Inscrire le montant sur la ligne

Range("X" & Lig).Value = Format(Now(), "dd/mm/yyyy")

Range("Y" & Lig).Value = CDec(MtRemise)

' On archive les achats du client

DLigA = Sheets("Archives").Range("A" & Rows.Count).End(xlUp).Row

Sheets("BdDClt").Range("A" & Lig & ":Y" & Lig).Copy _

Destination:=Sheets("Archives").Range("A" & DLigA + 1)

Range("D" & Lig & ":Y" & Lig).ClearContents

Else

UsF_Achat.Show

End If

End Sub

J'imagine qu'il faudrait modifier quelque chose sur la fin, dans cette partie:

DLigA = Sheets("Archives").Range("A" & Rows.Count).End(xlUp).Row

Sheets("BdDClt").Range("A" & Lig & ":Y" & Lig).Copy _

Destination:=Sheets("Archives").Range("A" & DLigA + 1)

Range("D" & Lig & ":Y" & Lig).ClearContents

Mais je ne sais vraiment pas comment faire!!

L'idée serait donc de garder exactement le même fonctionnement qu'avant mais en gardant intacte mes colonnes X, Y, Z AA... une fois les 10 achats effectués.

Merci infiniment à toute personne susceptible de me venir en aide!

Bonjour et bienvenue sur le forum

Il sera difficile de te venir en aide si tu ne joins pas ton fichier;

Tu pourrais joindre un fichier allégé avec quelques dizaines de lignes et des colonnes où tu auras effacé (mais pas supprimé) les données sensibles...!

Bye !

Après différents tests je m'aperçois que le problème est légèrement différent de ce que je pensais: Le fais d'avoir ajouter des informations dans les colonnes X et suivantes fait "croire" au fichier que la ligne est finie (en gros que les 10 achats sont faits).

Donc dès le moment où un client à déjà rempli un compte et que donc on a ajouté des informations après la case du dernier achat; dès que nous ajoutons un nouvel achat tout rebascule vers le dossier d'archive...

Bonjour,

Il faut clarifier ta construction... Les colonnes X et Y servent insérer le montant de la remise après calcul de celle-ci, ce qui naturellement effacera tes commentaires. Il faut donc que tu réserves ces 2 colonnes et commente à partir de Z...

Il ne faut en outre plus rechercher la dernière colonne servie de la droite vers la gauche, car on tombe sur tes commentaires qui font croire que le nombre d'achats requis est atteint. Il faut chercher dans l'autre sens pour tomber sur les colonnes intermédiaires vides ou simplement aller tester si la colonne W est occupée...

Il y a aussi quelque problème avec les dates... J'émets presque tous les jours la recommandation de bannir toute utilisation de la fonction Format pour affecter une date à la feuille Excel... L'effet en est que certaines de tes dates sont insérées en texte en non en tant que dates, et dans celles qui sont insérées en tant que dates, il n'est pas dit que certaines n'aient pas subies une inversion mois/jour. On convertit les dates pour s'assurer de leur bonne insertion dans Excel.

Il y aurait encore quelques petits problèmes à revoir mais l'essentiel est là...

Cordialement.

Heu... OK, mais en pratique comment je mets ces changements en place?

Et oui effectivement nous avions déjà remarqué que nous avions parfois une inversion du mois et du jour sur les dates mais ce n'est pas un problème majeur pour nous.

Donc reprenons: "Les colonnes X et Y servent insérer le montant de la remise après calcul de celle-ci, ce qui naturellement effacera tes commentaires. Il faut donc que tu réserves ces 2 colonnes et commente à partir de Z..."

En gros je laisse ces deux colonnes vides? et décale tout ce que nous y avions écris 2 colonnes plus loin? Je ne comprends pas trop "servent insérer le montant de la remise après calcul". Avant que nous ajoutions nos commentaire dans ces colonnes elles étaient inutilisées...

Ensuite:" Il ne faut en outre plus rechercher la dernière colonne servie de la droite vers la gauche, car on tombe sur tes commentaires qui font croire que le nombre d'achats requis est atteint. Il faut chercher dans l'autre sens pour tomber sur les colonnes intermédiaires vides ou simplement aller tester si la colonne W est occupée..."

Bon alors là je suis larguée!! En pratique je suis sensée faire comment?

Re,

Il me semblait nécessaire que tu comprennes ce dont il est question avant de commencer à tripatouiller le code...

Ton code fait notamment :

    NCol = Cells(Lig, Columns.Count).End(xlToLeft).Column + 1

Il cherche la dernière colonne utilisée en partant de la dernière colonne de la feuille (XFD, 16384), donc de la droite vers la gauche (ainsi que l'indique d'ailleurs le paramètre xlToLeft). S'il rencontre en X sont commentaire, il s'arrêtera là, colonne 24, ajoute 1 et affectera à variable NCol la valeur 25 censée représenter le numéro de la dernière colonne utilisée.

La valeur étant supérieure à 23, il bascule sur le calcul de la remise...

    Range("X" & Lig).Value = Format(Now(), "dd/mm/yyyy")
    Range("Y" & Lig).Value = CDec(MtRemise)

et affectation de la date et du montant aux colonnes X et Y, ce qui efface ton commentaire éventuel.

Entre parenthèses, pour la date ici :

    Range("X" & Lig).Value = Date

Voilà qui suffit, Date renvoie la date du jour, si tu as besoin de l'heure, tu prends Now qui renvoie la date et l'heure, sinon Date suffit, et ces fonction renvoie une valeur date et n'ont besoin d'aucun autre habillage. Le format est l'affaire du format de cellule, Excel s'en charge !

[Je n'aime tout de même pas le Range sans rattachement expplicite à sa feuille, mais on verra ça plus tard.]

Ensuite, le code copie la ligne de A à Y sur ta feuille Archives. Si tu y veux les commentaires, il faut d'abord les placer à partir de Z, puis allonger la ligne copiée.

edit :

En pratique je suis sensée faire comment?

Commence par assimiler ce dont il est question... ensuite on arrangera le code en fonction de tes choix !

Franchement je vais avoir un peu de mal à tout assimiler parce que les codes c'est du chinois pour moi!!! En théorie je crois que j'ai à peu près compris le principe mais honnêtement les "x1toleft" "Ncol" et autres formules ne me parlent absolument pas.

L'idée ce serait de pouvoir continuer d'ajouter des achats (grâce au bouton en question) jusqu'au 10ème achat. Que ces 10 achats soient toujours basculés vers l'onglet archive et que l'on puisse dans notre fichier normal (pas dans les archives) ajouter manuellement dans une colonne prévue à cette usage un message pour qu'on sache le montant de la remise et si elle a ou non été effectuée. (pas de commentaire avec l'option commentaire de excel puisque l'abus de ces commentaires fini par faire buggué le tout).

Ainsi nous voudrions garder le système tel qu'il est actuellement mais pouvoir ajouter des colonnes correspondant aux précédents comptes déjà finis sans interférer avec le compte fidélité en cours. (c'est à dire ne pas refaire basculer le compte fidélité en cours dans les archives si il y a un commentaire à la fin de ce compte alors que le compte en cours n'a que 2 ou 3 achats, ni faire disparaître nos fameux commentaires des dernières colonnes si par exemple le 3ème compte fidélité arrive à sa fin).

J'essaie d'être la plus claire possible dans mes explications pour que vous compreniez nos besoin mais j'avoue ne pas me sentir à la hauteur pour intégrer les explications techniques liées aux codes, à la macro et tout ce qui va avec!!

Tu comprends tout de même que X et Y étant utilisés, il faut te reporter en Z pour tes ajouts.

Rien de bien compliqué, la macro n'a pas prévu tes commentaires, on va les intégrer pour que tous les éléments fassent bon ménage... mais pour l'heure la priorité arrive de passer en cuisine pour moi . A+

Le truc c'est que pour moi les colonnes X et Y n'étaient pas utilisées justement (sauf sur le l'onglet archive) mais oui du coup si elles le sont je comprends bien qu'il ne faut pas que je les utilise pour mes commentaires et que je décale tout ça de deux colonnes.

Du coup j'avais commencé à écrire ce message avant de recevoir ta dernière réponse:

"Par exemple sur le fichier joint, j'ai ajouter en colonne X de la ligne 3 un commentaire indiquant que le 1er compte fidélité à été terminé et que la remise a été faite. Le second compte quand à lui est rempli entièrement, le client vient d'effectué son 10ème achat. Si je clique sur le bouton bleu "ajout achat" toute la ligne ligne 3 va basculer vers les archives (excepté la cellule 3X qui va tout bonnement être effacée )

Dans ce cas précis je voudrais que tout ce passe de la même manière à l'exception de l'effacement de cette cellule 3X (et des suivantes si j'avais plusieurs comptes fidélité précédemment finis)

Ensuite sur la ligne suivante, j'ai ajouté en cellule 4X un commentaire indiquant que le 1er compte est terminé et que nous avons une remise à offrir à notre cliente. Mais si cette dernière ne souhaite pas l'utiliser sur son prochain achat et que nous voulons donc rajouter un achat sur son 2ème compte; lorsque je clique sur le bouton "ajout achat" toute la ligne 4 est basculée en archive alors que je n'avais qu'un seul achat sur ce second compte et encore une fois mon commentaire en cellule 4X est effacé

J'ai essayé de mettre mon commentaire en cellule 4Z plutôt qu'en X4 et là mon commentaire n'est pas effacé mais en revanche ça continue de me basculer ma ligne qui n'est pas terminée en archive!!

GRRRRR!!!"

Donc là je comprends bien que le 1er problème évoqué est dû à l'utilisation de la colonne X plutôt qu'à la Z en revanche ça ne règle pas le reste de mon soucis de basculement vers les archives quand la ligne n'est pas complète si un commentaire est ajouté (même en colonne Z)

En tout cas merci beaucoup pour toutes les explications et l'aide apportée qui je l'espère finiront par régler mon problème!

Bonne popotte, bon appétit et bonne soirée!

Moi je termine ma journée dans une heure et ne reviens que lundi après-midi mais n'hésite pas à m'envoyer ton aide d'ici là, je serai ravie de commencer ma semaine de taff en m'arrachant les cheveux sur ce foutu compte fidélité!!!

J'utilise quel fichier pour les rectifs, le premier ou le dernier que tu as mis ?

Vois si cela convient : insertion de deux colonnes (X et Y) avant tes commentaires, inclusion des commentaires éventuels dans les données transférées sur Archives, mais effacement seulement de la ligne de D à Y...

Cordialement.

Merci je vais voir ce que ça donne et te tiens informé!

C'est impec!!! Merci infiniment!!!!

Rechercher des sujets similaires à "modifier macro 2007"