Microsoft 365 Recherche conditionnelle VBA

Jordan1

XLDnaute Nouveau
Bonjour,

Petit nouveau sur le forum et débutant en VBA, je dois réaliser une base de données tarifaire.
Celle-ci sera liée à des centaines de tarifs fournisseurs qui peuvent évoluer à tous moment.
Je coince sur la recherche conditionnelle multiple.
J'ai créé les lignes de codes suivantes mais l'ordinateur m'indique qu'il y a des problèmes de syntaxe et de compilation
au niveau de la ligne suivante Elself p < q And Sheets("Donnees").Range("P" & n) = Sheets("Nicoll").Range("C" & m) Then
Il y a sans doute d'autres erreurs car je suis totalement novice.
Vous trouverez ci-joint un tableau naturellement tous les prix sont faux et mis au hasard.

Merci de votre aide

VB:
Sub Essa()
Dim Ligne1 As Long, ligne2 As Long, Ligne3 As Long, ligne4 As Long
ligne2 = Sheets("Donnees").Columns(16).Find("*", , , , xlByColumns, xlPrevious).Row
Ligne1 = Sheets("Nicoll").Columns(3).Find("*", , , , xlByColumns, xlPrevious).Row
Ligne3 = Sheets("Nicoll").Columns(21).Find("*", , , , xlByColumns, xlPrevious).Row
ligne4 = Sheets("Nicoll").Columns(10).Find("*", , , , xlByColumns, xlPrevious).Row
For n = 1 To ligne2
For m = 1 To Ligne1
For p = 1 To Ligne3
For q = 1 To ligne4
If p > q And Sheets("Donnees").Range("P" & n) = Sheets("Nicoll").Range("C" & m) Then
Sheets("Donnees").Range("AE" & n) = Sheets("Nicoll").Range("U" & m)
Elself p < q And Sheets("Donnees").Range("P" & n) = Sheets("Nicoll").Range("C" & m) Then
Sheets("Donnees").Range("AE" & n) = Sheets("Nicoll").Range("R" & m)
End If
Next
Next
Next
Next
End Sub
 

Pièces jointes

  • Fichier test essai3.xlsm
    12.7 KB · Affichages: 4

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir,
Désolé, moi, je jette l'éponge.
J'ai pas mal travaillé sur des outils manipulant des prix, mais toujours j'avais une base de données gravée dans le marbre sur laquelle m'appuyer.
Mais quand je lis ça, je reste ébahi.
La clef commune serait la référence article du fournisseur pour 70% des cas. Dans 20% des cas, c'est le code EAN mais celui-ci peut ne pas être fiable. Dans 10% des cas cela pourrait être la référence article du fournisseur mais d'un autre article.
Je ne pourrais pas vous aider plus avant.
Mais inspirez vous donc du post #10, le recours à des formules dans les feuilles permettent souvent de bien accélérer les choses. D'autant que vous pouvez mettre vos formules au point avant de les installer dans le VBA mot pour mot avec FormulaLocal.
 

Jordan1

XLDnaute Nouveau
Bonsoir Sylvanu,
Tout d'abord, un grand merci pour ce que tu as fait
1)Je pensais envoyer à chaque fournisseur une trame dans laquelle se trouve le prix, conditionnement, ref article fournisseur et code EAN. Avec cela je devrais pouvoir mettre à jour la base articles. (voir exemple matrice fournisseur ci-dessous)
2) Je fusionne base articles et la feuille données
Pour faire ces deux points, j'utiliserai:
a) une macro (je préférerais une macro à une recherchev) par fournisseur avec un bouton de commande par fournisseur
b) une macro générale avec bouton de commande qui actionnerait l'ensemble des macro fournisseur

En ce qui concerne la relation prix et référence article, je suis entièrement d'accord avec toi, mes prédécesseurs avaient une autre logique. Je pensais qu'en mettant en place une colonne "clef de recherche" en plus d'une colonne "référence article du fournisseur" cela pourrait passer.
Il suffirait de mettre en clef de recherche la référence article fournisseur de l'article que l'on souhaite

Qu'en pensez-vous ?

Bonne soirée
 

Pièces jointes

  • Exemple matrice fournisseur.xlsm
    10.1 KB · Affichages: 7

xUpsilon

XLDnaute Accro
Bonjour,

On part là sur quelque chose d'assez poussé et un développement assez complet, notamment en termes d'optimisation, donc je ne pourrai pas avoir le temps de fournir une solution malheureusement.
Par contre, ce que je peux mentionner, c'est qu'en sortant au maximum la donnée de Excel (qui est un outil de visualisation avant d'être un outil de calcul), on arrivera probablement à un résultat plus rapide.

L'idée que j'ai en tête serait comme suit :
- un fichier Excel consolidé par quelques formules (références uniques, données vérifiées, bref une source fiable)
- un exécutable python, qui remplit des array sur base des données stockées dans les feuilles Excel (voir utilisation de la bibliothèque openpyxl), puis qui effectue les opérations "mathématiques"
=> De manière générale, moins vous faites de calculs sur Excel, mieux votre exécution se porte. Ce n'est pas pour rien que toute optimisation de VBA commence par désactiver la mise à jour du visuelle et le calcul automatique (Application.ScreenUpdating = False // Application.Calculation = xlManual)

Renseignez-vous, apprenez, mais il s'agit là d'une tâche assez complète, qui nécessiterait presque l'intervention d'un prestataire (pour comprendre tous les tenants et aboutissants des données que vous manipulez)

Bonne journée et bonne continuation,
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour,
je préférerais une macro à une recherchev
J'en conclus que vous n'avez pas pris la peine d'ouvrir et de comprendre la PJ #10.
Car pourquoi opposer fonction et VBA alors qu'elles peuvent s'entraider !
On définit une plage, on y colle un RechercheV, on laisse XL calculer ( ce qui sera toujours plus rapide que du VBA pur ) on récupère les valeurs, et on les colle, ce qui fait disparaitre les formules.

Vous reposez le même problème, sans plus d'informations avec un même fichier, totalement inexploitable au vu de votre demande.
Comme déjà dit, je jette l'éponge. Comme le dit xUpsilon, c'est un travail conséquent, ne serait ce que comprendre ce que vous voulez exactement sans jamais avoir ne serait ce que quelques lignes d'un fichier exploitable.
 

Statistiques des forums

Discussions
312 211
Messages
2 086 299
Membres
103 172
dernier inscrit
Aurelyan