Gestion de grande plage de donnée

Bonjour tout le monde,

Je suis novice et bloc sur un problème depuis un bon moment...

Sur une feuille (excel EN 2012), j'ai dans la colonne A des pièces mécaniques (type 00000x, 5chiffres + 1lettre), à certains endroits dans la colonne B, il y a des "2" au format numérique 2 décimales.

Sur la plage D2 : K2000, j'ai un arbre de construction. Ce que j'aimerais c'est comparer ces deux plages de la manière suiavante :

pour chaque case de la plage D2 : K2000

  • si le contenu est aussi dans la colonne A ET la valeur de B vaut 2, alors la cellule devient verte
  • si le contenu est aussi dans la colonne A mais la valeur de B est différente de 2 alors la cellule est orange
  • si le contenu n'appartient pas a la liste :
- si la valeur est du type 5 chiffres + 1 lettre alors la cellule devient rouge

- si la valeur est un texte quelconque alors :

- si la case juste au dessus à gauche est vide alors la cellule prend la même couleur que la au dessus

- sinon la case prend la même couleur qui est dans la cellule juste au dessus à gauche

C'est un peu compliqué mais je pense qu'avec le ficheir c'est plus compréhensible !

11public.xlsx (124.59 Ko)

Et voici le début de code que j'ai mais qui est incomplet !

Sub test()

Dim ref

Application.ScreenUpdating = False

With Sheets("Sheet3")

For i = 2 To .Range("A" & .Rows.Count).End(xlUp).Row

On Error Resume Next

ref = .Range("D2:J2002").Find(.Range("A" & i), LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows).Address

If .Range("B" & i).Value = 2 Then

Worksheets("Sheet3").Range(ref).Interior.Color = RGB(0, 255, 0)

Else: Worksheets("Sheet3").Range(ref).Interior.Color = RGB(255, 0, 0)

End If

Worksheets("Sheet3").Range(ref).Borders.Weight = xlThin

Next

End With

End Sub

Si qq'un pouvait m'aider ca serait le top !!

Merci d'avance !!

Bonjour,

Solution par MFC, non VBA dans son principe... mais pas tout à fait sans !

Une fonction personnalisée permet de pointer la cellule de référence pour la coloration, en ce qui concerne ta dernière catégorie.

La fonction que j'ai nommé CELREF, si le libellé commence par un caractère alphabétique renvoie la cellule sur laquelle la MFC doit s'aligner, et sinon se renvoie elle-même.

Dans les 3 MFC, la référence D2 (cellule supérieure gauche de la plage d'application de la MFC qui sert à définir la condition pour toute la plage) est remplacée par CELREF(D2) qui permet d'inclure les cellules texte pur...

A voir.

Cordialement.

C'est nickel merci beaucoup !!!

J'étais dessus depuis hier matin le temps commençait a être long ...!

Maintenant plus qu'à comprendre ! ^^

Merci beaucoup et a bientôt peut être

Bonjour à tous,

Comme je viens de finir la macro (en retard... ) je poste, ça te fera une 2nde possibilité.

Il y a peut-être des points à reprendre mais comme la structure est là te devrais pouvoir adapter pour les détails si besoin.

eric

9public.xlsm (135.36 Ko)

Pas de problème si tu as besoin d'infos, mais les formules sont classiques...

Avant de concocter CELREF, j'avais essayé de modifier les formules avec des fonctions habituelles mais cela aboutissait visiblement à une formule trop complexe pour la MFC...

...et salut Eric !

Merci également !!

Vu que je ne connais pas très bien, quest ce qui est le mieux en terme de rapidité de calcul la méthode complète en VBA ou mi vba mi MCF ?

La colonne A va tendre a s'alonger chaque jour c'est pour ca que je me méfie des temps de calcul !

Merci pour votre aide !

Les MFC peuvent être gourmandes. Tant que ça ne te pose pas de problème de réactivité tu peux garder.

Elles alourdissent un peu plus le classeur (taille) et peuvent ralentir l'ouverture si recalcul.

La macro tu attends un bon coup le temps que ça se fasse mais après tu es tranquille. Juste à penser à la relancer en cas de modifs.

OK je vais songer a tout ca merci !

eriiic, j'aurais une question sur le vba ?

Depuis le début je travail sur un docuement crach test avant de propager dans mon document final

J'aimerais adapter le code dans mon document final, la source est la feuille "Import production data" et l'arbre en question se trouve dans la feuille "production tree"

j'ai modifié le code comme suit mais ma feuille reste vierge blanche...

Private Sub CommandButton2_Click()

Dim ref As Range, ok As Boolean

Dim i As Long, col As Long

Application.ScreenUpdating = False

With Sheets("Import production data")

For i = 2 To .Range("A" & .Rows.Count).End(xlUp).Row

For col = 10 To 19

If .Cells(i, col) <> "" Then

Set ref = Worksheets("Import production data").Range("A:A").Find(Worksheets("production tree").Cells(i, col), LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows)

If ref Is Nothing Then

If Worksheets("production tree").Cells(i, col) Like "#####?" Then

Worksheets("production tree").Cells(i, col).Interior.Color = vbRed

ElseIf Len(Worksheets("production tree").Cells(i, col)) > 0 Then

If col > 10 Then

If Worksheets("production tree").Cells(i - 1, col - 1) = "" Then

Worksheets("production tree").Cells(i, col).Interior.Color = Worksheets("production tree").Cells(i - 1, col).Interior.Color

Else

Worksheets("production tree").Cells(i, col).Interior.Color = Worksheets("production tree").Cells(i - 1, col - 1).Interior.Color

End If

End If

End If

Else

If ref.Offset(, 1).Value = 2 Then

Worksheets("production tree").Cells(i, col).Interior.Color = vbGreen

Else

Worksheets("production tree").Cells(i, col).Interior.ColorIndex = 44

End If

End If

End If

Next col

Next i

End With

End Sub

Qu'est ce que j'aurais mal fait ?

Merci d'avance !

1) quand tu mets un code il faut l'indenter et utiliser la balise code.

Là c'est un paté imbuvable qu'on n'a pas envie de lire.

2) sans fichier impossible de répondre. Et préciser le pourquoi des modifs, qu'on n'ait pas tout à essayer de (mal) deviner.

Désolé pour ma mise en page

En revanche j'ai réussit a trouvé j'avais inversé deux nom de pages !

Du coup merci de l'aide !

Rechercher des sujets similaires à "gestion grande plage donnee"