Fonction If + Array

Bonjour à toutes et à tous,

Dans le but de modifier le contenu d'une cellule par rapport a sa référence j'ai écris cette macro:

Sub te12

For a = 2 To 1800

If Sheets("Extraction").Cells(d, 6).Value = 43606120 Then

Sheets("Extraction").Cells(d, 4).FormulaR1C1 = "TE1"

End If

Next

End sub

Pour expliquer plus clairement, je travaille sur SAP, dû à des informations mal saisie que je ne peux changer, je dois changer pour des articles précis le type qui est de base "TE2" en "TE1". Et comme j'ai masse référence pour lesquelles je dois changer cette donnée j'avais pensé à faire ceci pour la première ligne de macro

If Sheets("Extraction").Cells(d, 6).Value = Array ( tous mes articles) Then

Mais cela ne marche pas. Et dans le but d'alléger la macro - car actuellement j'ai ces 6 lignes de code pour chaque article - j'aurais besoin de votre science !

Merci par avance,

Amicalement,

Ybae

Bonjour,

Déjà que de bosser sur SAP ... ce n'est vraiment pas un cadeau ... mais là j'ai l'impression que tu continues à te compliquer la vie pour rien ....

Pas besoin de macro .... une simple formule ... et une copie ... et c'est fait ... non

Bonjour !

Merci de ta réponse,

Je vais être plus clair, en fait j'extrait une table de donnée tous les jours qui comporte 1600 lignes. Sur ces 1600 lignes de données je n'ai besoin que celle qui possède la référence "TE1". Cependant comme je disais certaines de ces données sont en référence "TE2" et je dois les changer en "TE1". Puis suite à ça j'ai quelques opérations qui se suivent et qui sont automatisées via macro pour que ça me prenne le moins de temps possible étant donné que j'actualise ces valeurs tous les jours. C'est donc pour ça que je suis à la recherche de la macro permettant d'automatiser selon l'article son changement de référence de "TE2" à "TE1". D'où ma recherche d'une macro If + Array.

J'espère avoir été plus clair !

Ci-joint mon fichier, seul les feuilles "Extraction", "Feuille int", "Feuille finale" sont utilisés via macro. Le reste concerne un autre problème dont je n'ai pas besoin d'aide :p.

En attente de votre réponse,

Cordialement,

Ybae

17classeur1.zip (295.71 Ko)

Bonjour,

Malheureusement ... je ne suis pas sûr de saisir la complexité de ton problème ...

Qu'est-ce-qui t'empêche d'utliser Ctrl H ...

Salut,

Et bien, la finalité du projet, c'est que ce fichier sera remis à la production et leur indiquera la date à laquelle ils devront produire telle pièce à telle date. Et je dois tout automatiser via macro pour leur facilité la tâche, donc en effet je pourrais faire un Alt+H mais je ne m'occuperai plus de ça quand sa sera finis ! D'où le besoin de la macro :p

Edit: Si tu veux, ils n'auront qu'à extraire la table chaque jour mis à jour, et lancer la macro complète qui leur sortira le TCD final! j'espère que c'est un peu plus clair !

Edit*: Comme les données de la feuille "Extraction" change tous les jours, le changement des références de TE2 à TE1 sera réinitialisé d'où le besoin de l'automatiser!

Re,

Sub Test()
    Feuil1.Columns("D:D").Replace What:="TE2", Replacement:="TE1"
End Sub

Merci de ta réponse,

- Je vais être chiant je le sens - Le problème c'est que cette macro doit être effectuer sur la feuille "Extraction". "TE1" signifie découpage fin et "TE2" assemblage. Si tu veux je ne dois filtrer que les articles en TE1 pour la planification de production du découpage fin. La feuille extraction contient tous les ordres de planification de production pour l'assemblage et le découpage fin. Mais comme je disais certains articles sont rebelles et sont notifiés en assemblage "TE2" au lieu de "TE1" découpage fin. D'où le besoin d'automatiser ça mais seulement pour certains article, pas tous !

j'espère que le brouillard se désépaissit ..

Cordialement,

Ybae

Re,

Sub Test()
  With Sheets("Extraction")
     For x = 2 To 1800
        If .Cells(x, 6).Value = 43606120 Then .Cells(x, 4).Value = "TE1"
     Next
   End With
End sub

Re,

Merci de ta parcitipation active James !

Cependant la macro que tu as marqué c'est celle du début que j'ai posté sur mon premier message !

Je voudrais mettre un array pour ne pas à avoir à l'écrire x fois pour tous les articles . Je suis en plein listing des articles qui doivent passer en TE1 et j'en ai déjà 17 et je n'en suis qu'au début .. D'où la volonté de mettre un array

Enfin si cela est possible à bon entendeur !

Cordialement,

Ybae

Re,

Oû se trouve ton Array ?

Faut-il le lire depuis une de tes feuilles ... ou faut-il l'expliciter directement dans le code ?

Re,

Justement, j'aimerais l'inclure dans le code pour ne pas à avoir à écrire le code pour chaque article

Je pensais donc à ça mais sa ne marche pas :

Sub test()

For d = 2 To 1800

If Sheets("Extraction").Cells(d, 6).Value = (Array(8327570, 43606120, 43613810, 43613710, etc etc) Then

Sheets("Extraction").Cells(d, 4).FormulaR1C1 = "TE1"

End If

Next

Re,

Code à tester ...

Sub Test()
Dim arComptes As Variant
Dim comptItem As Variant
Dim x As Long

arComptes = Array("8327570", "43606120", "43613810", "43613710")
  With Sheets("Extraction")
      For Each comptItem In arComptes
          For x = 2 To 1800
              If .Cells(x, 6).Value = comptItem Then .Cells(x, 4).Value = "TE1"
          Next x
      Next comptItem
  End With
End Sub

Re,

Merci de m'accorder autant de temps,

Je viens d'essayer mais le changement ne s'effectue pas, pourtant la macro ne rencontre pas de problème pour s'exécuter.

Étrange ?___?

Edit : Cela marche quand je met des valeurs simple du style "x" "y" "z" à la place des numéros d'article mais ça ne résout pas le problème :<

Re,

Probablement, il faut que tu vérifies si tes numéros de comptes sont du texte ou des nombres entiers ...

Rechercher des sujets similaires à "fonction array"