Soucis d'encodage... mauvaise exécution

Bonjour à tous et toutes )

J'espère que vous avez passé de belles fêtes de Noël... et en attendant celles du 1er de l'an... j'ai encore besoin de vos lumières...

Je suis sur ce code depuis hier... et je m'agace fortement...

Ce que j'ai au départ avant VBA :

  • Des colonnes où sont répertoriées des ventes (exemple : colonne C = top vente N°1 ; colonne D = top vente N°2, etc...)
  • Des colonnes dédiées à un seul article... avec donc sur la seconde ligne en constante la référence de l'article... (exemple : la colonne T concerne exclusivement l'article 789123)

Actuellement : par exemple les valeurs des cellules de la colonne T sont "True" si elles répondent aux conditions et "False" sinon (pour ne pas avoir de cellule vide sinon d'autres calculs postérieurs ne se font pas)

Donc j'ai la formule : si(ou(C3 = T2;D3=T2;E3=T2);"True";"False")

Ce qui fonctionne à merveille sauf que j'ai beaucoup de colonne et de ligne...

Donc je cherche à faire la même chose avec VBA....

Et là j'ai quelques petits soucis qui commencent à me rendre folle...

1 - La ligne 2 doit restée inchangée... c'est pas le cas... pourtant j'ai défini la plage à partir de la ligne 3... Il y a un truc que j'ai pas du bien comprendre...

2 - Normalement il ne devrait y avoir que pour la colonne "T" un résultat... mais c'est pas le cas...

3 - J'ai pas la dernière ligne qui est calculée...

Je vous joint le fichier avec un exemple ... en sachant qu'il est très petit par rapport à l'original... et vous pourrez tester vous même les divers soucis... (pas de bouton raccourci, c'est la seconde macro dans le module)

Et le code qui m'agace...

Alors si vous avez des idées du pourquoi du comment et des modifications à apporter (si possible en m'expliquant afin que je progresse un peu... merci)

Merci d'avance...

Belle Journée à tous & toutes...

Voici donc le code :

Sub Variable_x_valeur_True()

Dim PDy2 As Range

Dim DerL As Long

Dim Cell As Range

Dim x As Long

Const vbX01 As Long = 789123

DerL = Range("B" & Rows.Count).End(xlUp).Row

Set PDy2 = Range("A3:W" & DerL)

For Each Cell In PDy2

If Cell(0, 3) = vbX01 Or Cell(0, 4) = vbX01 Or Cell(0, 5) = vbX01 Then

Cell(0, 20) = "True"

Else

Cell(0, 20) = "False"

End If

Next Cell

End Sub

9wbf.xlsm (19.64 Ko)

Bonjour,

Ci-joint ton fichier test ...

Ai-je correctement compris ... ou pas ???

14wbf.xlsm (18.79 Ko)

James

Oui c'est cela... et quand la réponse n'est pas "True" alors il doit y avoir écrit "False"... ou un symbole... bref pas de cellule vide dans ces colonnes sinon après j'aurai des soucis pour d'autres formules... et je suis loin d'être experte vba... vu que là ça fait deux jours que je m'agace....

Si tu peux m'aider c'est très sympa en tout cas....

Merci d'avance

Salut Lilly,

Donc nous sommes d'accord ... pas besoin de macro ...

Ci-joint ton fichier test avec la formule appliquée à tous les articles ...et une MFC pour bien identifier les True ...

12wbf.xlsm (19.17 Ko)

Re....

heu.... si... la macro est nécessaire...

Là, il n'y a que quelques lignes et colonnes...

Manuellement (avec fonction si qui marchait) poids du fichiers en excel 2010... 21000 kgs... et plus d'une heure d'exécution des calculs après ajout des dernières données...

Je n'ai pas que ces quelques colonnes sur ce fichier... en plus de celles-ci qui sont en réel beaucoup plus nombreuses (une par article) j'ai aussi plusieurs colonne avec des recherchev ..... des nbsi.ens... et j'en passe...

Alors petit à petit je passe du excel de base au vba... au fur et à mesure que j'apprends... mais là... je coince dur...

La solution est probablement toute simple... mais je ne la voie pas...

Re,

Je peux te proposer une macro ...

Est-ce-que la structure de ton vrai fichier est semblable àcelui que tu as posté ...

.... oui.... y compris la dispo des colonnes... je me suis juste contenté de remplacer les données et d'effacer les colonnes non nécessaires pour ce soucis là....

et puis si je veux comprendre les codes et arrêter de me ... c'est mieux je pense de garder la même structure...

Si tu peux m'aider c'est super...

Là depuis 3h du mat... ça fait long... à tourner en rond....

Merci beaucoup d'avance....

Re,

Sur la base de ton fichier test ... ta macro ... avec quelques commentaires explicatifs ... okazou

11wbf.xlsm (25.99 Ko)

Tu es bien Bond en vba...

C'est cela...

sauf que je comprends pas... cette ligne là.... (pas bu assez de café...)

v = Application.Match(Cells(2, j).Value, Range(Cells(i, 3), Cells(i, 19)), 0)

Bon, je connais Match juste pour l'avoir vu dans certains post lors des recherches mais c'est plus que flou... au niveau de l'utilité... ou plutôt comment l'utiliser à bon escient...

Alors si j'ai bien compris comment cette ligne de code fonctionne Range(Cells(i,3),Cells(i,19)) c'est la plage où s'effectue la recherche ???

Cells(2,j).Value c'est l'objet recherché ??? et le zéro je suppose que c'est pour "valeur exacte"...

Est-ce cela ?

Si oui ... pour l'objet recherché... comme la référence de l'article me sert aussi pour d'autres calculs dans X autres colonnes... est-il possible d'utiliser une constante ?....

Quoiqu'il en soit MERCI BEAUCOUP POUR TON AIDE PRECIEUSE....

Et si je ne te recroise pas ici d'ici là, je te souhaite de très belles fêtes de fin d'année.... et plein de belles choses pour 2015...

encore &

Re,

Je ne sais vraiment pas ... si tu as besoin d'explication complémentaire ... car tu as tout saisi ...

Match permet de trouver la position d'un élément dans une plage donnée ...

Dans ton cas précis, la fonction est légèrement détournée ... si Match ne trouve rien, c'est False ...et s'il trouve c'est True ...

L'avantage de ne pas utiliser une constante mais Cells(2,j) ... c'est que la constante n'est valable que pour la colonne j ... et dès que la valeur de j change, la constante s'adapte automatiquement...

Bah... je viens de regarder... sur l'aide en ligne de vba... à priori non pour utiliser une constante... ce qui semble en fait logique puisque une constante doit être constante... donc... j variant... pas de constante...

Donc je vais faire sans... en me faire surtout un pense bête "logique" quand je serais à l'autre bout des colonnes....

Encore une fois

Je met le petit "v"...

Au plaisir de suivre tes post et bons conseils....

Re,

La seule chose que je disais c'est que la constante semble bien être le code article ... qui change à partir de la colonne T ...

Mais je n'ai certainement qu'une vue partielle de ton véritable fichier ...

De toutes les façons ... Merci pour tes remerciements ...

Excellentes Fêtes de Fin d'Année

Rechercher des sujets similaires à "soucis encodage mauvaise execution"