Temps de calcul trop long
Bonjour,
Je dois faire un tableur qui répertorie les dates de validité de formations, base de donnée extraite d'un logiciel interne.
J'utilise la commande "RECHERCHEVENS" via un VBA que j'ai récupérer sur internet mais avec mes 30 000 lignes de données pour l'instant, et ce nombre va augmenté chaque année, quand je lance le calcul ça prend 25/30 min.
Je voudrais savoir si il y avais moyen de simplifié le code VBA ou de faire une méthode de tris pour les formations pour simplifié le calcul sachant que pour la même formation il peux y avoir jusqu'à 4 nom possible.
je vous joint un doc miniature de mon travail actuel.(Je ne connais rien au VBA)
Dans l'attente de vous lire, Merci.
Bonjour,
Peux tu partager le code en dehors du fichier ?
Merci d'avance
Cordialement,
PARRISH
Bonjour je ne peux pas envoyer de lien pour l'instant je suis trop jeune sur le site
J'ai trouver une solution le voici
Il y a un icone de code quand vous ecrivez un message
Voici un exemple :
Function RECHERCHEVENS_OPT(ColonneValeur As Range, Critere1 As Variant, PlageRecherche1 As Variant, Critere2 As Variant, PlageRecherche2 As Variant, _
Optional Critere3 As Variant, Optional PlageRecherche3 As Variant, _
Optional Critere4 As Variant, Optional PlageRecherche4 As Variant, _
Optional Critere5 As Variant, Optional PlageRecherche5 As Variant) As Variant
'Auteur : https://www.linkedin.com/in/spilerstheo/
'Date : 01/2024
'Version optimisée de la fonction RECHERCHEVENS
Dim ws As Worksheet
Dim dataArray As Variant
Dim lastRow As Long, i As Long
Dim criteres(1 To 5) As Variant
Dim plages(1 To 5) As Range
Dim nbCriteres As Integer
' Préparation des critères et des plages
Set plages(1) = PlageRecherche1
Set plages(2) = PlageRecherche2
criteres(1) = Critere1
criteres(2) = Critere2
nbCriteres = 2
If Not IsMissing(Critere3) Then
Set plages(3) = PlageRecherche3
criteres(3) = Critere3
nbCriteres = 3
End If
' Répéter pour Critere4 et Critere5 si nécessaire
' Vérification des critères vides
For i = 1 To nbCriteres
If criteres(i) = "" Then
RECHERCHEVENS_OPT = "#VALEUR"
Exit Function
End If
Next i
' Chargement des données dans un tableau
Set ws = plages(1).Worksheet
lastRow = ws.Cells(ws.Rows.Count, plages(1).Column).End(xlUp).Row
dataArray = ws.Range(ws.Cells(1, plages(1).Column), ws.Cells(lastRow, plages(nbCriteres).Column))
' Parcours du tableau pour trouver les critères
For i = LBound(dataArray, 1) To UBound(dataArray, 1)
If dataArray(i, 1) = criteres(1) And dataArray(i, 2) = criteres(2) Then ' et ainsi de suite pour les autres critères
' Trouver la valeur correspondante dans ColonneValeur
If IsError(ColonneValeur.Cells(i).Value) Then
RECHERCHEVENS_OPT = "#N/A"
Else
RECHERCHEVENS_OPT = ColonneValeur.Cells(i).Value
Exit Function
End If
End If
Next i
' Si aucun résultat trouvé
RECHERCHEVENS_OPT = "Pas de correspondance"
End Function
Je vous laisse tester le code voir si cela marche pour vous (pense à faire une copie de vos fichiers avant)
Cordialement,
Parrish
Bonjour manuïa et
Bonjour Parrish,
Pas le temps, ni le courage de chercher à comprendre le code (et tu ne dis pas clairement ce que tu attends comme résultats !?)
Mais avec un simple Tableau Croisé Dynamique, j'obtiens ce qui suit :
Pour des Noms-Prénoms identiques et une même formation, on affiche la date la plus "grande"
Parrishe, merci
J'ai essayé le code, Ca me met le message d'erreur #NOM?
Bonjour U. Milité
je dois à terme afficher les formations que tout le monde de mon service a à jour et avoir une note d'information des personnes avec des formations périmer ou bientôt périmer, et il fraudais que ce document puisse ce mettre à jour automatiquement à chaque nouvel extraction.
je viens de découvrir grâce à vous le tableau je ne comprend pas comment vous pouvez obtenir ce tableau aucun ne m'es proposer de ce style, du coup si le tableau suffit ce serais possible de faire un regroupement sous un même nom les formations normal et recyclage pour ceux qui ont les deux et de triés les personnes aussi?
Re-bonjour,
Voici la configuration utilisée pour la liste de champs du TCD :
On peut sans doute utiliser aussi Power Query ... Difficile d'être plus précis à ce stade (par exemple : comment distinguer les formations "normales" des "recyclages" ? Les secondes sont celles où le mot "recyclage" figure ? Faut-il distinguer les "SST" des "ABCD" ?, etc.)
Peux-tu créer un fichier, sur base de ton premier exemple, avec différents cas de figure en entrée et les résultats attendus (avec des explications pour quelques cas) ?
J'ai réussis à faire le tableau mais ça ne colle pas vraiment mais pourquoi pas je vais creuser l'idée.
J'ai fait dans le doc ci-joins un exemple de ce que l'on ma demandé de faire avec quelque explications si ce n'est pas claire reviens vers moi.
Je pense vraiment qu'il ce sont trompés de personne en me demandant ça
Cordialement, merci pour l'aide.
Bonjour,
Désolé, mais ce n'est pas encore très clair :
- Où figure le "service", pour chacun (Magasins, Maintenance, etc.) ? Si l'info figure bien dans ton tableau de départ, ce champ peut figurer dans la zone de Filtre du TCD
- Quand tu dis du tableau que "ça ne colle pas vraiment", précise ce qui manque (on n'est pas dans ta tête
) - Au passage, si le code de la fonction personnalisée a été modifié, il faut utiliser la bonne syntaxe dans la feuille de calcul et donc, dans le cas présent
=RECHERCHEVENS_OPT( )
au lieu de=RECHERCHEVENS( )