XL 2016 recherche mot exact

Frank Bellaisch

XLDnaute Nouveau
Bonjour à tous et merci d'avance à ceux qui pourront m'aider.

Sur le tableau ci-joint, je dois calculer des sommes selon les années et un code spécifique. J'ai écrit une formule mais la recherche par mot ne se fait pas sur le mot exact. Donc si je cherche R1, il va prendre R11, R12 etc etc ce que je ne veux pas.
Je suis totalement bloqué.
Merci de vos conseils.
bonne journée
 

Pièces jointes

  • calcul tonnage.xlsx
    9.6 KB · Affichages: 18

job75

XLDnaute Barbatruc
Pouvez-vous être plus précis ?

Le fichier que vous avez présenté a 2 tableaux : C4: D6 et B12:E34.

La durée d'exécution de la macro est proportionnelle au nombre de cellules du premier et au nombre de lignes du second.

Combien de valeurs comme R1 sont recherchées en général et combien d'années pour le 1er ?
 

job75

XLDnaute Barbatruc
Pourquoi ne répondez-vous pas aux questions posées ?

Pas question de communiquer en dehors du forum, déposez un fichier anonymisé.

Cela dit ce qui prend beaucoup de temps c'est l'instruction InStr(Q(k, 2).Text, P(1, j))

Avec ce fichier (3) et ce code la durée d'exécution est divisée par 3 :
VB:
Sub MAJ()
Dim P As Range, Q As Range, i&, j%, k&, v1, v2, n%
Set P = [B3].CurrentRegion
Set Q = [B11].CurrentRegion
Application.ScreenUpdating = False
For i = 2 To P.Rows.Count
    For j = 2 To P.Columns.Count
        P(i, j) = ""
        For k = 2 To Q.Rows.Count
            If (Q(k, 2) = P(1, j) Or Year(Q(k, 2)) = P(1, j)) And P(1, j) <> "" Then
                v1 = Q(k, 3).MergeArea(1) 'en cas de cellule fusionnée
                If IsNumeric(CStr(v1)) And P(i, 1) <> "" Then
                    v2 = Q(k, 4).MergeArea(1) 'en cas de cellule fusionnée
                    n = InStr(v2, P(i, 1))
                    If n Then If Not IsNumeric(Mid(v2, n + Len(P(i, 1)), 1)) _
                        Then P(i, j) = P(i, j) + v1
                End If
            End If
Next k, j, i
End Sub
 

Pièces jointes

  • calcul tonnage(3).xlsm
    18.8 KB · Affichages: 3

job75

XLDnaute Barbatruc
C'est vraiment n'importe quoi, il y a des trous partout et plus du tout de cellules fusionnées.

J'ai quand même adapté la macro :
VB:
Sub MAJ()
Dim P As Range, Q As Range, Pcc%, Qrc&, i&, j%, k&, v1, v2, n%
Set P = [F5:I7] 'à adapter
Set Q = Range("F14:I" & Range("F" & Rows.Count).End(xlUp).Row) 'à adapter
Pcc = P.Columns.Count
Qrc = Q.Rows.Count
Application.ScreenUpdating = False
For i = 1 To P.Rows.Count
    For j = 1 To Pcc
        P(i, j) = ""
        If P(i, 0) <> "" And P(0, j) <> "" Then
            For k = 2 To Qrc
                If (Q(k, 1) = P(0, j) Or Year(Q(k, 1)) = P(0, j)) Then
                    v1 = Q(k, 2).MergeArea(1) 'en cas de cellule fusionnée
                    If IsNumeric(CStr(v1)) Then
                        v2 = Q(k, 4).MergeArea(1) 'en cas de cellule fusionnée
                        n = InStr(v2, P(i, 0))
                        If n Then If Not IsNumeric(Mid(v2, n + Len(P(i, 0)), 1)) _
                            Then P(i, j) = P(i, j) + v1
                    End If
                End If
            Next k
        End If
Next j, i
End Sub
 

Pièces jointes

  • registre déchets XL download(1).xlsm
    19.1 KB · Affichages: 4

Frank Bellaisch

XLDnaute Nouveau
Oui, j'ai été obligé de créer un nouveau tableau car le poids était supérieur à 1Mo et le forum m'interdisais de poster. J'ai essayé de compresser sans succès. Du coup, en copiant collant, les cellule fusionnées ont disparu et je n'ai pas corrigé. Toutes mes excuses. Merci pour votre travail.
 

Discussions similaires

Statistiques des forums

Discussions
312 305
Messages
2 087 084
Membres
103 459
dernier inscrit
Arnocal