Faits :
A.
Par appel d'offres du 12 juillet 2019, la commune B._ a lancé un marché public, en procédure ouverte, concernant le ramassage et le transport des déchets verts ménagers.
A._ SA (ci-après: l'intéressée, puis la recourante) avait répondu à cet appel d'offres et en avait été exclue par décision de l'intimée du 11 décembre 2019, au motif qu'elle ne s'était pas acquittée de ses cotisations sociales et de ses impôts, y compris la TVA, et qu'elle avait sciemment fourni des renseignements inexacts au pouvoir adjudicateur. Cette décision n'avait pas été contestée.
Le 2 juin 2020, la Commune B._ a décidé d'interrompre cette procédure d'appel d'offres et de la répéter. Sa décision n'a pas été attaquée.
B.
Le 8 mai 2020, la Commune B._ a lancé un nouvel appel d'offres, en procédure ouverte, concernant le même objet, soit la collecte des déchets verts ménagers, après avoir élaboré un nouveau cahier des charges en collaboration avec l'entreprise D._ Sàrl.
Quatre entreprises, parmi lesquelles A._ SA et C._ Sàrl, ont présenté une offre dans le délai imparti. L'intéressée a offert un prix de 219.35 fr./tonne hors taxe (HT). Sa proposition tendant à intégrer un système de détection des plastiques, pour 4.85 fr./tonne HT, a été retenue par le pouvoir adjudicateur, portant ainsi le prix offert à 224.20 fr./tonne HT. C._ Sàrl a offert un prix de 140 fr./tonne HT. Ses propositions tendant à l'ajout d'un système de pesage dynamique avec identification des containers et transmission des données, pour 12 fr./tonne HT, et à l'ajout du système de transfert de données online, pour 4 fr./tonne HT, ont été retenues par le pouvoir adjudicateur, portant ainsi le prix offert à 156 fr./tonne HT.
En tenant compte de ces prix, l'intéressée et C._ Sàrl ont obtenu les évaluations suivantes :
C._ Sàrl A._ SA Critères Pondération Note Note pondérée Note Note pondérée 1. Prix de la prestation 35 % 4.94 1.728 2.39 0.836 2. Aspects administratifs, service après-vente 30 % 4.00 1.200 3.87 1.161 3. Exigences techniques 25 % 4.30 1.075 4.30 1.075 4. Impacts environnementaux et sociaux, qualité de l'offre 10 % 3.60 0.360 3.97 0.397 Total 100 % 4.36 3.47
Par décisions du 23 juillet 2020, la Commune B._ a adjugé le marché à l'entreprise C._ Sàrl, pour le prix de 156 fr./tonne HT, et a informé l'intéressée de cette adjudication. L'intéressée a obtenu la moins bonne note des dossier présentés et a ainsi fini à la quatrième et dernière place (art. 105 al. 2 LTF).
Par arrêt du 26 janvier 2021, la Cour de droit public du Tribunal cantonal du canton de Neuchâtel (ci-après: Tribunal cantonal) a rejeté le recours formé par l'intéressée contre cette décision.
C.
Agissant par la voie du recours constitutionnel subsidiaire, A._ SA demande, sous suite de frais et dépens, au Tribunal fédéral d'annuler l'arrêt du Tribunal cantonal du 26 janvier 2021, de constater que la décision d'adjudication du 23 juillet 2020 est illicite et donc nulle et d'ordonner à la Commune B._ de mettre en oeuvre une nouvelle soumission, en procédure ouverte, d'un marché public concernant la collecte des déchets verts ménagers. Subsidiairement, elle requiert l'annulation de l'arrêt attaqué et le renvoi de la cause à l'autorité précédente pour nouvelle décision dans le sens des considérants. Elle demande également l'effet suspensif à son recours et qu'il soit partant fait défense à la Commune B._ de conclure un quelconque contrat avec la société C._ Sàrl en lien avec le marché en cause.
Par ordonnance du 2 mars 2021, le Président de la IIe Cour de droit public a rejeté la requête d'effet suspensif formulée par la recourante.
Le Tribunal cantonal renonce à formuler des observations, se réfère aux motifs de l'arrêt attaqué et conclut au rejet du recours. La Commune B._ conclut à l'irrecevabilité du recours constitutionnel subsidiaire et, subsidiairement, à son rejet. L'adjudicataire intimée ne s'est pas prononcée.
Considérant en droit :
1.
Le Tribunal fédéral examine d'office sa compétence (art. 29 al. 1 LTF) et contrôle librement et avec une pleine cognition la recevabilité des recours portés devant lui (ATF 141 II 113 consid. 1; 140 I 252 consid. 1).
1.1. Dans le domaine des marchés publics, un recours en matière de droit public n'est recevable, en vertu de l'art. 83 let. f LTF, qu'à la double condition que la valeur du mandat à attribuer soit supérieure ou égale aux seuils déterminants prévus à cet effet et que la décision attaquée soulève une question juridique de principe (ATF 141 II 113 consid. 1.2; 140 I 285 consid. 1.1). Il incombe à la partie recourante de démontrer la réalisation de ces deux conditions (cf. art. 42 al. 2 LTF; ATF 141 II 113 consid. 1.2), qui sont cumulatives (cf. ATF 141 II 14 consid. 1.2; 133 II 396 consid. 2.1; arrêt 2D_25/2018 du 2 juillet 2019 consid. 1.1, non publié aux ATF 145 II 249). En matière de marchés publics cantonaux, un recours constitutionnel subsidiaire peut toujours être déposé si les conditions de l'art. 83 let. f LTF ne sont pas réunies (ATF 141 II 113 consid. 1.2; 140 I 285 consid. 1.1). La recourante ne prétend pas que son recours soulèverait une question juridique de principe et une telle question n'apparaît pas d'emblée clairement. C'est par conséquent à juste titre qu'elle a choisi la voie du recours constitutionnel subsidiaire (cf. arrêt 2D_25/2018 du 2 juillet 2019 précité consid. 1.1).
1.2. En tant que partie à la procédure cantonale, la recourante dispose de la qualité pour recourir si elle peut justifier d'un intérêt juridique à obtenir l'annulation ou la modification de la décision attaquée (cf. art. 115 let. a et b LTF). La recourante, qui dénonce des vices graves, de nature formelle, et conclut à la mise en oeuvre d'une nouvelle procédure d'adjudication, dispose d'un intérêt juridiquement protégé à recourir. Dans un tel cas de figure, elle pourra en effet soumettre une nouvelle offre, avec des chances réelles de se voir attribuer le marché (cf. ATF 141 II 307 consid. 6.6).
1.3. Formé contre un arrêt d'un tribunal supérieur statuant en dernière instance cantonale (art. 86 al. 1 let. d et al. 2 et 114 LTF), le présent recours a été déposé en temps utile (le 1er mars est un jour férié dans le canton de Neuchâtel; art. 3 de la loi cantonale du 30 septembre 1991 sur le dimanche et les jours fériés [RS/NE 941.02]; art. 45 al. 2 et 100 al. 1, en lien avec l'art. 117 LTF) et dans les formes prescrites (art. 42 LTF). Il convient donc d'entrer en matière.
2.
2.1. Le recours constitutionnel subsidiaire ne peut être formé que pour violation des droits constitutionnels (art. 116 LTF). En vertu de l'art. 106 al. 2 LTF, applicable par renvoi de l'art. 117 LTF, les griefs y relatifs doivent être invoqués et motivés par la partie recourante, à savoir expressément soulevés et exposés de manière claire et détaillée, en précisant en quoi consiste la violation (cf. ATF 139 I 229 consid. 2.2).
2.2. Le Tribunal fédéral statue sur la base des faits établis par l'autorité précédente (art. 118 al. 1 LTF). Il peut néanmoins rectifier ou compléter les constatations de cette autorité si les faits ont été constatés en violation d'un droit constitutionnel (art. 118 al. 2 LTF cum art. 116 LTF), ce que la partie recourante doit démontrer d'une manière circonstanciée et précise, conformément aux exigences de motivation posées à l'art. 106 al. 2 LTF (par renvoi de l'art. 117 LTF; cf. supra consid. 2.1).
3.
Le Tribunal cantonal a retenu que la procédure de passation du marché en cause était entachée d'une violation du principe de la transparence, mais que celle-ci n'avait pas influencé l'adjudication. Une nouvelle soumission ayant selon lui conduit au même résultat, il a renoncé à ordonner la répétition de la procédure d'adjudication, afin de répondre au principe de célérité.
4.
La recourante fait valoir que le Tribunal cantonal a versé dans l'arbitraire en retenant que les vices constatés n'avaient pas influencé le résultat de l'adjudication et qu'une répétition de la procédure ne se justifiait pas. Selon elle, le constat d'une violation du principe de la transparence imposait la tenue d'une nouvelle procédure d'adjudication. En outre, elle considère que le Tribunal cantonal ne pouvait pas prévoir les prix qu'elle même et l'adjudicataire auraient mentionnés à l'issue d'un nouvel appel d'offres exempt des vices constatés. Cela relevait selon elle de la spéculation. Elle reproche de plus au Tribunal cantonal d'avoir pris en compte des offres de prix qui relevaient de deux procédures ouvertes différentes, soit le prix qu'elle avait elle-même indiqué dans l'appel d'offres de juillet 2019 et celui fixé par l'adjudicataire dans la procédure de mai 2020.
4.1. Le principe de transparence, dont la violation n'est en l'espèce pas remise en question par les parties (ce qui ne pourrait être examiné qu'en lien avec le grief d'arbitraire; cf. arrêt 2C_951/2019 du 16 juillet 2020 consid. 6.1), est notamment mentionné à l'art. 1 al. 2 let. c de la loi cantonale du 1er janvier 2011 sur les marchés publics (LCMP; RS/NE 601.72) et implique que le pouvoir adjudicateur décrive précisément ce qu'il attend des soumissionnaires. Il est important que les participants connaissent à l'avance toutes les informations minimales et utiles pour leur permettre de présenter une offre valable et correspondant pleinement aux exigences posées par le pouvoir adjudicateur (cf. ATF 143 II 553 consid. 7.7; 141 II 353 consid. 8.2.3; 125 II 86 consid. 7c). La transparence des procédures de passation des marchés n'est toutefois pas un objectif, mais un moyen contribuant à atteindre le but central du droit des marchés publics qui est le fonctionnement d'une concurrence efficace, garanti par l'ouverture des marchés et en vue d'une utilisation rationnelle des deniers publics (ATF 141 II 353 consid. 8.2.3 et références).
4.2. Le renouvellement de la procédure n'est possible qu'à titre exceptionnel et suppose un motif important, notamment en raison de l'importance du principe de célérité (cf. ATF 141 II 353 consid. 6.1 et références). Même s'il existe un juste motif ou un motif important, il appartient en premier lieu au pouvoir adjudicateur de décider s'il convient d'interrompre ou non la procédure, soit définitivement soit en la répétant ou en la renouvelant. En ce domaine, celui-ci dispose d'un large pouvoir d'appréciation (ATF 141 II 353 consid. 6.3 et références). La liberté d'appréciation de l'adjudicateur dans le choix des conséquences à tirer de l'existence d'un juste motif ou d'un motif important est toutefois limitée par le respect de la bonne foi et des principes généraux applicables au droit des marchés publics, notamment l'interdiction de discrimination entre les soumissionnaires, la proportionnalité, la transparence et l'interdiction de la modification du marché sur des éléments essentiels (ATF 141 II 353 consid. 6.4).
4.3. Une décision est arbitraire (art. 9 Cst.) lorsqu'elle contredit clairement la situation de fait, qu'elle viole gravement une norme ou un principe juridique clair et indiscuté ou qu'elle heurte d'une manière choquante le sentiment de la justice et de l'équité. Il n'y a pas arbitraire du seul fait qu'une solution autre que celle de l'autorité cantonale semble concevable, voire préférable. Pour qu'une décision soit annulée pour cause d'arbitraire, il ne suffit pas que sa motivation soit insoutenable; il faut encore que cette décision soit arbitraire dans son résultat (ATF 144 I 170 consid. 7.3 et les références).
4.4. Contrairement à ce que soutient la recourante, le seul constat d'une violation du principe de la transparence n'imposait pas nécessairement le renouvellement de la procédure d'adjudication (cf. supra consid. 4.1 s.). En revanche, il convient d'examiner si, comme elle le prétend, le Tribunal cantonal a abusé de son pouvoir d'appréciation en n'ordonnant pas une telle mesure.
4.4.1. Il ressort de l'arrêt attaqué qu'il " n'est pas exclu que la recourante aurait été incitée à présenter une offre acceptant toutes les exigences du cahier des charges en raison des contradictions internes et des incohérences qui ressortent de ce dernier [...], et que s'il avait été exempt de ces défauts, elle aurait présenté une autre offre ". Le Tribunal cantonal a ensuite relevé que la recourante avait affirmé que le prix de 158.75 fr./tonne, sans pesage individualisé, qu'elle avait proposé dans le cadre de l'appel d'offres de juillet 2019, lui aurait permis de remporter le marché. Selon lui, cela laissait entendre que, sans violation du principe de transparence, la recourante aurait proposé le même prix dans l'appel d'offres de mai 2020 que dans celui de juillet 2019. Se fondant sur les simulations effectuées par D._ Sàrl dans la procédure de recours menée devant lui, il a constaté que ce prix ne modifiait pas le résultat de l'adjudication, la note globale de la recourante restant inférieure à celle de l'adjudicataire. L'autorité précédente a partant considéré qu'un renouvellement de la procédure d'adjudication serait inutile et contraire au principe de célérité.
4.4.2. En l'occurrence, concernant les lacunes sur le plan de la transparence, le Tribunal cantonal a relevé en particulier les points suivants: l'examen des documents constituant l'appel d'offres ne permettait pas de se faire une idée précise quant à l'objet du marché. Le terme " notamment " utilisé au point 2 (Objet du marché) soulignait que la liste de tâches indiquées (collecte, nettoyage, transfert des données de pesage et établissement de statistiques) n'était pas exhaustive. Le marché portait ainsi également sur des éléments non-mentionnés, sans possibilité pour le soumissionnaire de connaître la nature ou l'importance des éléments inconnus auxquels il était fait allusion. Il existait en outre une contradiction entre un certain nombre de critères que l'autorité adjudicatrice exigeait dans un premier temps pour ensuite les relativiser et s'en distancer en laissant au soumissionnaire le choix de les accepter ou de les refuser (notamment concernant les points de collecte, leur nettoyage et les exigences techniques, en particulier en lien avec le pesage). Selon l'autorité précédente, les soumissionnaires se trouvaient face à une alternative dont les termes s'excluaient sans qu'ils soient en mesure d'opérer leur choix en connaissance de cause ni d'en apprécier les conséquences. En particulier, l'obligation de peser ne pouvait être comprise que par déduction et aucune indication n'était fournie sur ce point, que ce soit sur la nature du pesage (global par tournée ou individuel par container), le moment auquel il devait pouvoir intervenir (en continu au cours de la tournée, uniquement en fin de tournée) ou l'entité qui en était chargée (le soumissionnaire par le biais d'équipements divers sur ses véhicules, l'entreprise de valorisation par le biais de ses propres balances à véhicules). L'annexe 3 du cahier des charges contenait une série d'exigences à ce propos mais qui ne permettaient pas aux soumissionnaires de déterminer l'attente du pouvoir adjudicateur étant donné leur caractère optionnel (possibilité de les refuser).
4.4.3. Il ressort ainsi de l'arrêt querellé que la violation du principe de la transparence portait sur de nombreux points et ne se limitait pas, comme semble le retenir l'autorité précédente, à la question du pesage individualisé ou non. Chacune des zones d'ombre invoquée était susceptible d'influencer le prix. A titre d'exemple, il ressort de l'offre présentée par la recourante pour l'appel d'offres de mai 2020 que celle-ci a refusé les exigences concernant le nettoyage des points de collecte et qu'elle a obtenu pour ce poste la note 1, alors que les concurrents ont reçu la note 4 (art. 105 al. 2 LTF). Or, selon l'arrêt querellé, le critère du nettoyage figure, paradoxalement, d'une part au chiffre 2 du cahier des charges (Objet du marché), qui a un caractère impératif, et, d'autre part, à l'annexe 6, qui permet d'accepter ou non le critère. Le Tribunal cantonal précise que l'appel d'offres ne permettait pas de se faire une idée précise quant à l'objet du marché, ni d'opérer des choix en connaissance de cause ni d'en apprécier les conséquences. Sur le vu de l'arrêt attaqué, on ne voit pas qu'il eut été possible de dépeindre précisément l'appel d'offres tel qu'il aurait été sans les lacunes constatées.
Dans ces circonstances, l'autorité précédente ne pouvait pas, sans verser dans l'arbitraire, considérer que, en cas de nouvelle soumission, l'offre faite par la recourante serait similaire à celle faite pour l'appel d'offres de juillet 2019 et que celles des autres soumissionnaires ne différeraient pas de celles faites pour l'appel d'offres de mai 2020. Certes, la recourante a laissé entendre que si sa compréhension du marché n'avait pas été viciée par une violation du principe de transparence, elle aurait proposé le même prix dans l'appel d'offres de mai 2020 que dans celui de juillet 2019. Cette considération se référait toutefois à l'absence de précision concernant la nécessité d'un pesage individuel, mais pas aux autres lacunes mises en avant par l'autorité précédente.
4.5. Le Tribunal cantonal a ainsi abusé de son pouvoir d'appréciation en retenant que le renouvellement de la procédure, sans les vices constatés, n'aurait pas potentiellement permis à la recourante d'emporter le marché. La violation du principe de transparence imposait en effet dans le cas présent le renouvellement de la procédure d'adjudication. Seul ce moyen permettait aux soumissionnaires de présenter une offre correspondant pleinement aux exigences posées par le pouvoir adjudicateur et de faire leur choix en connaissance de cause. La décision d'adjudication du 23 juillet 2020, confirmée sur recours, est partant illicite.
5.
5.1. Les considérants qui précèdent conduisent à l'admission du recours. L'arrêt rendu le 26 janvier 2021 par le Tribunal cantonal est annulé. Il est constaté que la décision d'adjudication du 23 juillet 2020, confirmée sur recours, est illicite. Dans l'hypothèse où le contrat concernant le marché en cause n'aurait pas encore été conclu entre les parties intimées, la procédure d'adjudication ab ovoest annulée. La cause est renvoyée à la Commune B._ pour qu'elle procède, dans la mesure où elle le juge nécessaire, au renouvellement de la procédure d'adjudication en veillant à corriger les lacunes relevées par l'autorité précédente.
5.2. La Commune B._ qui succombe et dont l'intérêt patrimonial est en cause doit supporter les frais de la présente procédure (art. 66 al. 1 LTF). Elle versera en outre une indemnité à titre de dépens pour la procédure fédérale à la recourante, qui obtient gain de cause avec l'assistance d'un avocat (art. 68 al. 1 et 2 LTF). Ayant renoncé à se déterminer sur le recours, C._ Sàrl, qui n'a pas pris de conclusion, n'a pas à allouer de dépens à la recourante, ni à s'acquitter des frais judiciaires pour la présente procédure fédérale (cf. ATF 125 II 86 consid. 8).
5.3. La cause est renvoyée au Tribunal cantonal pour nouvelle décision sur les frais et dépens de la procédure devant lui (cf. art. 67 et 68 al. 5 LTF).
Par ces motifs, le Tribunal fédéral prononce :
1.
Le recours est admis, l'arrêt rendu le 26 janvier 2021 par le Tribunal cantonal du canton de Neuchâtel est annulé.
2.
Il est constaté que la décision d'adjudication du 23 juillet 2020 est illicite. La cause est renvoyée à la Commune B._ pour qu'elle procède au sens des considérants.
3.
Les frais judiciaires, arrêtés à 4'000 fr., sont mis à la charge de la commune B._.
4.
Une indemnité de dépens pour la procédure fédérale de 4'500 fr. à payer à la recourante est mise à la charge de la commune B._.
5.
La cause est renvoyée au Tribunal cantonal du canton de Neuchâtel afin qu'il statue à nouveau sur le sort des frais et dépens de la procédure accomplie devant lui.
6.
Le présent arrêt est communiqué au mandataire de la recourante, aux parties intimées et au Tribunal cantonal du canton de Neuchâtel.
Lausanne, le 30 août 2021
Au nom de la IIe Cour de droit public
du Tribunal fédéral suisse
Le Président : Seiler
Le Greffier : de Chambrier