Effacer une plage de cellules en fonction de la valeur d’une cellule
Bonjour,
J’interviens pour le compte d’une PME qui récupère des biens d’occasion, les retape si besoin est, et les revend. Parmi les personnes qui nous apportent les biens, il y a des particuliers et de Stés commerciales. Il n’est pas rare que des particuliers viennent 4 ou cinq fois dans le même mois nous apporter des objets. Certains de ces particuliers ne veulent pas être payé à chaque dépose de biens. Ils souhaitent le paiement à la quinzaine ou au mois.
Nous sommes donc obligés de mémoriser ces apports, et de les traiter lorsque le paiement est demandé.
C’est l’objet du fichier Base apports multiples.
Nous établissons un bon d’apport et l’enregistrons dans l’onglet : En_cours_apports_multiples ».
Dans la partie haute du tableau (lignes 1 à 46), nous enregistrons chacun des apports. La base est triée, d’après le nom de l’apporteur, puis en fonction de la date de l’apport.
Dans la partie centrale (lignes 47 à 73), nous totalisons par apporteur ses apports.
Dans la partie basse (lignes 74 à 76), nous rapatrions les données qui nous sont nécessaires au paiement. Cela est fait en inscrivant dans la partie centrale, un « x « devant le nom de l’apporteur à payer. Il est à noter que ces données, sont exportées vers un autre fichier, avec lequel nous imprimerons le bon récapitulatif des apports et traiterons les données afin de permettre la tenue du Livre de Police, puisque l’entreprise doit tenir un tel registre.
Ma question est la suivante :
» comment dans la partie haute du tableau (lignes A2 à A46) puis-je effacer les plages de cellules qui correspondent à l’apporteur que l’on vient de régler, pour les colonnes A à U ? ».
Les plages de cellules ainsi effacées seront rejetées après la dernière plage renseignée, puisqu’à chaque nouvelle inscription, cette partie du tableau est retriée.
La plage de cellules dans la partie « solde », correspondant à celles qui viennent d’être effacées, sera de ce fait mise à zéro. Là encore un tri à mettre en place, par analogie au tri qui existe déjà, repositionnera cette plage de cellules après la dernière plage de cellules renseignée.
A noter que dans la colonne V, j’ai fait figurer un n° d’ordre, qui est aussi rapatrié dans la partie centrale et dans la partie basse du tableau. Cette colonne n’est pas triée lors de l’enregistrement dans la base.
Cet élément est peut-être utile à la résolution du problème.
Merci par avance de vos propositions de solutions.
Bonjour 1636alain, le forum,
comment dans la partie haute du tableau (lignes A2 à A46) puis-je effacer les plages de cellules qui correspondent à l’apporteur que l’on vient de régler, pour les colonnes A à U ?
Une proposition....à tester...
Cordialement,
Bonjour,
Bien sur que la solution fonctionne et bien . Je remercie xorsankukai très vivement. Ceci dit, comme je suis nul dans le domaine, je ne comprend pas comment cela fonctionne et si je dois apporter une simple modification je crains que la solution ne soit pas pérenne.
Le transfert vers l'autre fichier ne fonctionne plus, mais cela est normal, car il faut que je revoie les lignes de code qui font référence au fichier transmis, dont j'ai changé le nom avant de l'envoyer sur le forum.
Encore merci et très cordialement
N'existe-t-il pas une solution plus basique et plus appréhensible pour un nul comme moi ? Je ne comprend rien à celle qui m'a été proposée, même si elle fonctionne. Je ne vois même pas comment voir le code associé au bouton créé. Si j'ai ultérieurement l'obligation de procéder à une modification, je crains le pire.
Merci d'avance.
Cordialement
Bonjour 1636alain, le forum,
Je ne comprend rien à celle qui m'a été proposée, même si elle fonctionne
- Alt + F11 ouvre l'éditeur vba
- Dans module 3, le code du bouton:
Sub Rectangleàcoinsarrondis1_Cliquer()
UserForm1.Show
End Sub- Il permet d'afficher le formulaire UserForm1.
- La liste de la combobox Choix est établie à partir de la première colonne du tableau de la feuille Paramètres (tableau structuré, si tu ajoutes des données , elles sont prises en compte).
Private Sub UserForm_Initialize()
Me.Choix.List = Sheets("parametres").ListObjects(1).ListColumns(1).DataBodyRange.Value
End Sub- Le code du bouton valider efface les données les données du tableau de la feuille en cours multiples puis écrit toutes celles dont le nom diffère de la combobox.
- Les variables d'ajustement sont donc la plage (actuellement A2:U46) et le nombre de colonnes (actuellement 21).
Cordialement,
Bonjour,
Je remercie encore vivement xorsankukai d’avoir consacré du temps à ma demande. La solution fonctionne mais elle me paraît peu appréhensible vue ma nullité en la matière.
De plus, j’ai trop simplifié, le fichier anonymisé que j’ai transmis et cela a un effet. La liste déroulante proposée pour sélectionner l’apporteur dont on veut effacer les données, ne me paraît pas pertinente : dans la réalité, il y a déjà 644 occurrences d’apporteur et leur nombre ira grandissant. De plus, le nom de l’apporteur dont on veut effacer les données est celui inscrit dans la cellule B86. On n’a donc pas à le chercher.
Pour contourner ces difficultés, j’ai écrit une macro : « effacement_données », qui doit sans doute être une « horreur » pour les initiés. Bien évidemment elle ne fonctionne pas correctement.
Par exemple la sélection de la valeur « ALBAN » qui est en cellule B86, va effacer 25 lignes sur les 28 initiales, dont les plages de cellules A à U, comportant la valeur « ALBAN », mais pas que. Et c'est bien là le problème.
Les 3 lignes restantes sont bien triées par la macro, en fonction du nom de l’apporteur, puis de la date de son apport.
Quelqu’un peut-il corriger la partie de la macro défaillante ? Je joins une autre version du fichier.
D’avance je le remercie.
Cordialement