Recherche dans des feuilles de données
fakry
Messages postés
1
Date d'inscription
Statut
Membre
Dernière intervention
-
f894009 Messages postés 17277 Date d'inscription Statut Membre Dernière intervention -
f894009 Messages postés 17277 Date d'inscription Statut Membre Dernière intervention -
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.
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 que quelqu'un pourrait m'envoyer une version améliorée de ce que je demande ?
Merci.
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.
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 que quelqu'un pourrait m'envoyer une version améliorée de ce que je demande ?
Merci.
Sub Macro1() Dim cel As Range 'déclare la variable cel (CELlule) Dim Ca1 As Range 'déclare la variable Ca (Recherche Dim Cs1 As Range 'déclare la variable Ca (Recherche Dim Ca2 As Range 'déclare la variable Ca (Recherche Dim Cs2 As Range 'déclare la variable Ca (Recherche Dim i As Integer Dim f As Integer With Sheets("MO") 'prend en compte l'onglet "AVANT" (à adapter à ton cas) 'boucle sur toutes les cellules éditées cel de la colonne A (en partant de la ligne 2) f = Range("K2").Value For i = 16 To 16 + f For Each cel In .Range("N" & i & ":AM" & i & .Cells(Application.Rows.Count, 1).End(xlUp).Row) 'définit la recherche r (recherche la valeur de la cellule en partie dans la colonne A de l'onglet "BASE") If Range("B" & i).Value Like "P ou FP" Then Set Ca1 = Sheets("B1").Columns(1).Find(cel.Value, , xlValues, xlPart) Set Cs1 = Sheets("B1").Columns(1).Find(cel.Value, , xlValues, xlPart) 'si il existe au moins une occurrence trouvée, place dals la colonne I de cel la valeur de la colonne C de r If Not Ca1 Is Nothing Then cel.Offset(0, 1).Value = Ca1.Offset(0, 1).Value If Not Cs1 Is Nothing Then cel.Offset(0, 2).Value = Cs1.Offset(0, 2).Value Else If Range("B" & i).Value Like "P/FP" Then Set Ca1 = Sheets("B2").Columns(1).Find(cel.Value, , xlValues, xlPart) Set Cs1 = Sheets("B2").Columns(1).Find(cel.Value, , xlValues, xlPart) 'si il existe au moins une occurrence trouvée, place dals la colonne I de cel la valeur de la colonne C de r If Not Ca1 Is Nothing Then cel.Offset(0, 1).Value = Ca1.Offset(0, 1).Value If Not Cs1 Is Nothing Then cel.Offset(0, 2).Value = Cs1.Offset(0, 2).Value Else If Range("B" & i).Value Like "HP/UHX" Then Set Ca1 = Sheets("B3").Columns(1).Find(cel.Value, , xlValues, xlPart) Set Cs1 = Sheets("B3").Columns(1).Find(cel.Value, , xlValues, xlPart) 'si il existe au moins une occurrence trouvée, place dals la colonne I de cel la valeur de la colonne C de r If Not Ca1 Is Nothing Then cel.Offset(0, 1).Value = Ca1.Offset(0, 1).Value If Not Cs1 Is Nothing Then cel.Offset(0, 2).Value = Cs1.Offset(0, 2).Value Else If Range("B" & i).Value Like "GP ou KP" Then Set Ca1 = Sheets("B4").Columns(1).Find(cel.Value, , xlValues, xlPart) Set Cs1 = Sheets("B4").Columns(1).Find(cel.Value, , xlValues, xlPart) 'si il existe au moins une occurrence trouvée, place dals la colonne I de cel la valeur de la colonne C de r If Not Ca1 Is Nothing Then cel.Offset(0, 1).Value = Ca1.Offset(0, 1).Value If Not Cs1 Is Nothing Then cel.Offset(0, 2).Value = Cs1.Offset(0, 2).Value Else If Range("B" & i).Value Like "*B5*" Then Set Ca1 = Sheets("B5").Columns(1).Find(cel.Value, , xlValues, xlPart) Set Cs1 = Sheets("B5").Columns(1).Find(cel.Value, , xlValues, xlPart) 'si il existe au moins une occurrence trouvée, place dals la colonne I de cel la valeur de la colonne C de r If Not Ca1 Is Nothing Then cel.Offset(0, 1).Value = Ca1.Offset(0, 1).Value If Not Cs1 Is Nothing Then cel.Offset(0, 2).Value = Cs1.Offset(0, 2).Value Else If Range("B" & i).Value Like "*B6*" Then Set Ca1 = Sheets("B6").Columns(1).Find(cel.Value, , xlValues, xlPart) Set Cs1 = Sheets("B6").Columns(1).Find(cel.Value, , xlValues, xlPart) 'si il existe au moins une occurrence trouvée, place dals la colonne I de cel la valeur de la colonne C de r If Not Ca1 Is Nothing Then cel.Offset(0, 1).Value = Ca1.Offset(0, 1).Value If Not Cs1 Is Nothing Then cel.Offset(0, 2).Value = Cs1.Offset(0, 2).Value End If End If End If End If End If End If Next cel 'prochaine cellule de la boucle Next End With 'fin de la prise en compte de l'onglet "AVANT" End Sub
A voir également:
- Recherche dans des feuilles de données
- Fuite données maif - Guide
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Comment faire un livret avec des feuilles a4 - Guide
- Bruler des feuilles de laurier - Guide
- Trier des données excel - Guide
1 réponse
Bonjour,
macro "simplifiee", a tester, vu que sans de donnees .....!!!!!!
macro "simplifiee", a tester, vu que sans de donnees .....!!!!!!
Sub Macro1() Dim cel As Range 'déclare la variable cel (CELlule) Dim Ca1 As Range 'déclare la variable Ca (Recherche Dim Cs1 As Range 'déclare la variable Ca (Recherche Dim Ca2 As Range 'déclare la variable Ca (Recherche Dim Cs2 As Range 'déclare la variable Ca (Recherche Dim i As Integer Dim f As Integer With Sheets("MO") 'prend en compte l'onglet "AVANT" (à adapter à ton cas) 'boucle sur toutes les cellules éditées cel de la colonne A (en partant de la ligne 2) f = .Range("K2").Value For i = 16 To 16 + f For Each cel In .Range("N" & i & ":AM" & i & .Cells(Application.Rows.Count, 1).End(xlUp).Row) 'définit la recherche r (recherche la valeur de la cellule en partie dans la colonne A de l'onglet "BASE") If Range("B" & i).Value Like "P ou FP" Then Set Ca1 = Sheets("B1").Columns(1).Find(cel.Value, , xlValues, xlPart) Set Cs1 = Sheets("B1").Columns(1).Find(cel.Value, , xlValues, xlPart) 'si il existe au moins une occurrence trouvée, place dals la colonne I de cel la valeur de la colonne C de r If Not Ca1 Is Nothing Then cel.Offset(0, 1).Value = Ca1.Offset(0, 1).Value If Not Cs1 Is Nothing Then cel.Offset(0, 2).Value = Cs1.Offset(0, 2).Value ElseIf Range("B" & i).Value Like "P/FP" Then Set Ca1 = Sheets("B2").Columns(1).Find(cel.Value, , xlValues, xlPart) Set Cs1 = Sheets("B2").Columns(1).Find(cel.Value, , xlValues, xlPart) 'si il existe au moins une occurrence trouvée, place dals la colonne I de cel la valeur de la colonne C de r If Not Ca1 Is Nothing Then cel.Offset(0, 1).Value = Ca1.Offset(0, 1).Value If Not Cs1 Is Nothing Then cel.Offset(0, 2).Value = Cs1.Offset(0, 2).Value ElseIf Range("B" & i).Value Like "HP/UHX" Then Set Ca1 = Sheets("B3").Columns(1).Find(cel.Value, , xlValues, xlPart) Set Cs1 = Sheets("B3").Columns(1).Find(cel.Value, , xlValues, xlPart) 'si il existe au moins une occurrence trouvée, place dals la colonne I de cel la valeur de la colonne C de r If Not Ca1 Is Nothing Then cel.Offset(0, 1).Value = Ca1.Offset(0, 1).Value If Not Cs1 Is Nothing Then cel.Offset(0, 2).Value = Cs1.Offset(0, 2).Value ElseIf Range("B" & i).Value Like "GP ou KP" Then Set Ca1 = Sheets("B4").Columns(1).Find(cel.Value, , xlValues, xlPart) Set Cs1 = Sheets("B4").Columns(1).Find(cel.Value, , xlValues, xlPart) 'si il existe au moins une occurrence trouvée, place dals la colonne I de cel la valeur de la colonne C de r If Not Ca1 Is Nothing Then cel.Offset(0, 1).Value = Ca1.Offset(0, 1).Value If Not Cs1 Is Nothing Then cel.Offset(0, 2).Value = Cs1.Offset(0, 2).Value ElseIf Range("B" & i).Value Like "*B5*" Then Set Ca1 = Sheets("B5").Columns(1).Find(cel.Value, , xlValues, xlPart) Set Cs1 = Sheets("B5").Columns(1).Find(cel.Value, , xlValues, xlPart) 'si il existe au moins une occurrence trouvée, place dals la colonne I de cel la valeur de la colonne C de r If Not Ca1 Is Nothing Then cel.Offset(0, 1).Value = Ca1.Offset(0, 1).Value If Not Cs1 Is Nothing Then cel.Offset(0, 2).Value = Cs1.Offset(0, 2).Value ElseIf Range("B" & i).Value Like "*B6*" Then Set Ca1 = Sheets("B6").Columns(1).Find(cel.Value, , xlValues, xlPart) Set Cs1 = Sheets("B6").Columns(1).Find(cel.Value, , xlValues, xlPart) 'si il existe au moins une occurrence trouvée, place dals la colonne I de cel la valeur de la colonne C de r If Not Ca1 Is Nothing Then cel.Offset(0, 1).Value = Ca1.Offset(0, 1).Value If Not Cs1 Is Nothing Then cel.Offset(0, 2).Value = Cs1.Offset(0, 2).Value End If Next cel 'prochaine cellule de la boucle Next i End With 'fin de la prise en compte de l'onglet "AVANT" End Sub