Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2013 recherche dans feuilles de données

fakry

XLDnaute Nouveau
Bonjour,
Je me suis crée un petit programme excel pour me rechercher des données en fonction de la cellule choisie je voudrai qu'il me remplisse les colonnes ou apparaissent Ca et Cs.
Le problème c'est que mon fichier le fait mais il est trop lent (j'ai l'impression qu'il perd du temps).
A la première itération il remplit toutes les lignes , alors que je voudrais qu'il remplisse juste chaque ligne en fonction du paramètre donné dans microwave.
Or pour le moment il voit le premier paramètre et va remplir toutes les cases du tableau.

Est ce que quelqu'un pourrait m'envoyer une version améliorée de ce que je demande ?

Merci.

Partage de gros fichier - Page de téléchargement

Utilisateur : rl6el71w
Mot de passe : vc5i1auh
 

fakry

XLDnaute Nouveau
Re : recherche dans feuilles de données

En gros B1 correspond à P ou FP
B2 à P/FP
B3 à HP/UHX
B4 à GP ou KP
B5 et B6 ne sont pas utilisés

En gros chaque degré donne une valeur de Ca et Cs lu dans une des feuilles Excel.
Le programme fait déjà ce que je veux faire mais il est lent j ai l impression de faire des boucles inutiles.

En gros il faudrait que le programme ne remplisse que les colonnes O,P,S,T,Y,Z,AD,AE,AI,AJ,AN,AO , il a parfois tendence a remplir d'autres colonnes et à effacer mes formules .

Est ce clair ?
 
Dernière modification par un modérateur:

thebenoit59

XLDnaute Accro
Re : recherche dans feuilles de données

Avec les explications c'était plus simple

Le code en détail :

Code:
Option Explicit
Dim InitFait As Boolean, InitDico As Boolean
Dim w As Workbook
Dim f1 As Worksheet, f2 As Worksheet, f3 As Worksheet, f4 As Worksheet
Dim r1, r2, r3, r4
Dim d As Object

Sub Initialisation_Generale()
    Set w = ThisWorkbook
    Set f1 = w.Sheets("B1"): Set f2 = w.Sheets("B2")
    Set f3 = w.Sheets("B3"): Set f4 = w.Sheets("B4")
    r1 = f1.Range("a5:d366"): r2 = f2.Range("a5:d366")
    r3 = f3.Range("a5:d366"): r4 = f4.Range("a5:d366")
    InitFait = True
End Sub

Sub Initialisation_Dictionnaire()
Dim i As Integer
    Set d = CreateObject("scripting.dictionary")
    For i = LBound(r1) To UBound(r1): d(r1(i, 1)) = i: Next i
    InitDico = True
End Sub

Sub Recherche()
Dim i As Integer, j As Integer
Dim tableau
With Sheets("MO")
    For i = 16 To .[b65000].End(xlUp).Row
        Select Case .Cells(i, 2).Value
            Case "P ou FP"
                tableau = r1
            Case "P/FP"
                tableau = r2
            Case "HP/UHX"
                tableau = r3
            Case "GP ou KP"
                tableau = r4
        End Select
            For j = 14 To 39 Step 5
                On Error Resume Next
                .Cells(i, j).Offset(, 1).Value = tableau(d(.Cells(i, j).Value), 2)
                .Cells(i, j).Offset(, 2).Value = tableau(d(.Cells(i, j).Value), 3)
            Next j
        Next i
End With
End Sub

Sub Recherche_Ca_Cs()
    If Not InitFait Then Initialisation_Generale
    If Not InitDico Then Initialisation_Dictionnaire
    Recherche
End Sub

Sub Masquer_Colonnes()
Dim j As Integer
With Sheets("MO")
    For j = 15 To 40 Step 5
        .Columns(j).Resize(, 2).Hidden = True
    Next j
End With
End Sub

Sub Afficher_Colonnes()
Dim j As Integer
With Sheets("MO")
    For j = 15 To 40 Step 5
        .Columns(j).Resize(, 2).Hidden = False
    Next j
End With
End Sub

Sub Nettoyer_Ca_Cs()
Dim i As Integer, j As Integer
With Sheets("MO")
    i = .[b65000].End(xlUp).Row
    For j = 15 To 40 Step 5
        .Cells(16, j).Resize(i, 2).ClearContents
    Next j
End With
End Sub
 

Pièces jointes

  • Micro_ondes_charges_v0.2.xlsm
    616.8 KB · Affichages: 29

Discussions similaires

Réponses
6
Affichages
550
Réponses
27
Affichages
903
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…