Extraire une donnée en fonction de plusieurs valeurs

Rootdown

XLDnaute Junior
Extraire une donnée en fonction de plusieurs variables dans deux tableaux

Bonjour,
j'ai un blocage que je ne saisi pas.
Je vous expose :
Deux tableaux avec des données en commun.

En fonction d'une valeur du premier (dans l'exemple, si je suis en semaine 2),
je veux vérifier si des produits identiques sont dans le deuxième tableau, en extraire les quantités et rapatrie dans le premier.
Ma recherche se fait si la semaine est 2, et sur 4 colonnes (doivent correspondent : espèce, variété, couleur et fournisseur).

J'étais plutôt content de moi.
Et puis finalement : "Erreur de compilation, fonction ou Sub non défini".
J'ai pas l'impression d'utiliser des fonctions très compliquer mais ça ne fonctionne pas :(
Si quelqu'un veut bien m'aiguiller. Merci par avance.
 

Pièces jointes

  • Test recherche.zip
    15.1 KB · Affichages: 50
  • Test recherche.zip
    15.1 KB · Affichages: 50
  • Test recherche.zip
    15.1 KB · Affichages: 50
Dernière édition:

Robert

XLDnaute Barbatruc
Repose en paix
Re : Extraire une donnée en fonction de plusieurs valeurs

Bonjour Rootdown, bonjour le forum,

la syntaxe exacte pour faire référence à un onglet est
Worksheets("Autre")
Worksheets("Planning")
Tu as oublié tantôt le k tantôt le s et les guilemets " avant et après le nom de l'onglet.

Une fois ces erreurs corrigées, ta macro fonctione mais je vais y regarder de plus près pour voir si on ne peu pas aussi simplifier ton code.
 

Rootdown

XLDnaute Junior
Re : Extraire une donnée en fonction de plusieurs valeurs

Effectivement, merci Robert.
A force de chercher, on en voit plus rien même l'évidence :rolleyes:

Une fois tout ça corriger ça fonctionne presque.
les données qui ne sont pas en semaine se colore en noir, ca c'est ok,
mais la valeur que je veux pour les produits de semaine ne se copient pas.
:confused:
 

Pièces jointes

  • Test recherche2.zip
    16.5 KB · Affichages: 41

Rootdown

XLDnaute Junior
Re : Extraire une donnée en fonction de plusieurs valeurs

Bon ca y est ca fonctionne.
J'avais un décalage dans une colonne et la variable quantité n'etait pas déclaré.
Merci de m'avoir débloque.
Je joint ma version qui marche.
Et si il y a effectivement moins tordu que ce que j'ai fait je suis preneur :)
 

Pièces jointes

  • Test recherche3.zip
    16.6 KB · Affichages: 47
  • Test recherche3.zip
    16.6 KB · Affichages: 48
  • Test recherche3.zip
    16.6 KB · Affichages: 49

Robert

XLDnaute Barbatruc
Repose en paix
Re : Extraire une donnée en fonction de plusieurs valeurs

Bonjour Rootdown, bonjour le forum,

Je ne comprends pas pourquoi toutes ces variables publiques mais comme je n'ai pas le contexte, j'imagine que tu t'en sers pour d'autres macros et j'ai laissé tel quel.
J'ai juste supprimé les Select (sélection d'onglets) qui ralentissent le code en les remplassant par des With. Juste un petit doute sur la variable quantite récupérée à la colonne N mais je ne suis pas sûr de l'onglet. J'ai mis Autre tu modifieras éventuellement.
 

Pièces jointes

  • Rootdown_v02.xls
    64.5 KB · Affichages: 96

Rootdown

XLDnaute Junior
Re : Extraire une donnée en fonction de plusieurs valeurs

Merci Robert,
effectivement ça va beaucoup plus vite sans la sélection d'onglet.
Je ne pensais pas que ca jouait autant, je ferais beaucoup plus attention maintenant.

Pour les variables public, a vrai dire, je sais pas comment les mettre autrement ?
Et non elles ne sont pas utiliser par ailleurs.
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Extraire une donnée en fonction de plusieurs valeurs

Bnjour Rootdown, bonjour le forum

un autre code sans utiliser autant de variables...
Code:
Sub test()
Dim cel1 As Range 'déclare la variable cel1 (CELlule 1)
Dim cel2 As Range 'déclare la variable cel2 (CELlule 2)
Dim p As Worksheet 'déclare la variable p
Dim a As Worksheet 'déclare la variable a
 
Set p = Sheets("Planning") 'définit la variable p
Set a = Sheets("Autre") 'définit la variable a
 
For Each cel1 In p.Range("A2:A" & p.Range("A65536").End(xlUp).Row) 'boucle 1 sur toutes les cellules éditée de la colonne A (onglet "Planning")
    If cel1.Offset(0, 4).Value = 2 Then 'condition 1 : si la semaine est 2
        For Each cel2 In a.Range("A2:A" & a.Range("A65536").End(xlUp).Row) 'boucle 2 sur toutes les cellules éditée de la colonne A (onglet "Autre")
            'conditions 2 : 'si les valeurs des colonnes B, C et D sont identiques et que la colonne F ("Planning") est identique à E ("Autre")
            If cel1.Offset(0, 1).Value = cel2.Offset(0, 1).Value And _
                cel1.Offset(0, 2).Value = cel2.Offset(0, 2).Value And _
                cel1.Offset(0, 3).Value = cel2.Offset(0, 3).Value And _
                cel1.Offset(0, 5).Value = cel2.Offset(0, 4).Value Then
                cel1.Offset(0, 6).Value = cel2.Offset(0, 5) 'récupère la quantité
            End If 'fin de la condition 2
        Next cel2 'prochaine cellule édité de la colonne A (boucle 2)
    Else 'sinon (condition 1)
        cel1.Offset(0, 6).Interior.ColorIndex = 1 'colore la cellule de la colonne G ("Planning") en noir
    End If 'fin de la condition 1
Next cel1 'prochaine cellule éditée de la colonne A ("Planning")
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 582
Messages
2 089 922
Membres
104 307
dernier inscrit
Diet