Recherche avec multi conditions - VBA

Fermé
Victoria1975_3175 Messages postés 4 Date d'inscription mardi 1 novembre 2022 Statut Membre Dernière intervention 21 novembre 2022 - 1 nov. 2022 à 16:43
yg_be Messages postés 22733 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 avril 2024 - 3 nov. 2022 à 10:56

Bonjour à toutes et tous, 

Petit nouveau sur le site, je me lance dans la programmation VBA.

Je dois mettre en place une base tarifaire. Celle-ci sera liée aux tarifs envoyés par les fournisseurs (environ une centaine)

Je bloque sur la recherche conditionnelle.

J'ai deux cas de figure:

1) Je dois rapatrier le tarif le plus élevé d'un article d'un fournisseur sur la base tarifaire

2) Je dois rapatrier en fonction du conditionnement (palette de 100, palette de 50, piece unitaire, ...) les prix.

Je pensais pour le 1er point (mais cela ne marche pas) à la formule suivante:

Sub EssaiFournisseur()

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).RowFor 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) ThenSheets("Donnees").Range("AE" & n) = Sheets("Nicoll").Range("U" & m)

End If

Next

Next

End Sub

Merci de votre aide

J'ai joint un fichier dont les chiffres ont été changés

3 réponses

yg_be Messages postés 22733 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 avril 2024 1 477
1 nov. 2022 à 17:21

bonjour,

Peux-tu prendre soin de partager un code correct?  Les lignes 11 et 19 sont bizarres.

Tiens aussi compte de ceci: https://codes-sources.commentcamarche.net/faq/11288-poster-un-extrait-de-code

Tu montres un code sans expliquer en quoi son comportement ne te convient pas.

0
Victoria1975_3175 Messages postés 4 Date d'inscription mardi 1 novembre 2022 Statut Membre Dernière intervention 21 novembre 2022
2 nov. 2022 à 03:27

Bonjour, 

Merci pour votre mail. Comme je débute en VBA et sur ce site, je ne maitrise pas encore tout loin de là. 

Je m'en excuse. Le code ne me convient pas car il ne fonctionne pas. Je l'ai un peu modifié comme vous pouvez le voir néanmoins quand je l'exécute il m'indique erreur de compilation erreur de syntaxe.

Merci pour votre aide

Sub EssaiNicollprixv2()
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
0
yg_be Messages postés 22733 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 avril 2024 1 477
2 nov. 2022 à 10:09

Quelle erreur de syntaxe, à quelle ligne?

Merci de préciser le langage (basic) quand tu postes du code VBA.

0
Victoria1975_3175 Messages postés 4 Date d'inscription mardi 1 novembre 2022 Statut Membre Dernière intervention 21 novembre 2022
3 nov. 2022 à 03:08

Bonjour, 

La ligne 13 poserait problème. Sans doute y a-t-il d'autres lignes qui poseraient soucis.

J'ai du mal à exprimer la conditionnalité multiple (exemple si p < q et que la réf qui est contenue dans la feuille Donnees est égal à la référence présente dans la feuille Nicoll alors l'ordinateur doit aller chercher et rapporter le prix contenu dans U de Nicoll et la mettre à AE de Donnees au niveau correspondante à la réf article.

Sinon, l'ordinateur doit aller chercher le contenu de R dans Nicoll pour la mettre en AE de Donnees

Encore une fois merci de votre aide.

0
yg_be Messages postés 22733 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 avril 2024 1 477
3 nov. 2022 à 10:56

C'est quoi ce "Elself"?  Le cinquième caractère doit être un i.

0