Recherche droite à gauche (car doublons dans les noms de colones)

Emmanuel31

XLDnaute Occasionnel
Bonjour à toutes et à tous. :)

Je cherche à faire des choses un peu compliquées (trop pour moi) mais qui me permettraient de gagner énormément de temps de traitement.

Je cherche comment faire (macro ou formule peu importe) afin de faire une recherche de la droite à la gauche d'un onglet qui me permettrons de faire des sommes en partant de la droite.
Vous n'avez pas compris ? c'est normal c'est pas si simple à expliquer ... :p


Essayons de schématiser : on me fournit un historique de semaines (Week 1, Week 2, ...) mais qui est inter-année.
J'ai donc plusieurs Week 1, Week 2, ... (3 car historique depuis 3 ans).

Je cherche à faire la somme des x dernières semaines (variable définie dans une cellule) depuis la dernière Week Y (variable définie dans une cellule).


Mais j'ai du mal car du coup il y a plusieurs Week Y ...

Comme c'est toujours compliqué de décrire un besoin, voici le fichier joint avec explication de ce qui est attendu.

Quelqu'un peut m'aider svp ?

Merci ;)
 

Pièces jointes

  • Classeur1.xlsm
    12.4 KB · Affichages: 41
  • Classeur1.xlsm
    12.4 KB · Affichages: 38
  • Classeur1.xlsm
    12.4 KB · Affichages: 46

vgendron

XLDnaute Barbatruc
Re : Recherche droite à gauche (car doublons dans les noms de colones)

Bonjour,
une piste pour commencer:
en supposant que tu as toujours que 3 années (à confirmer), tu peux définir la zone nommée (Année3) sur les week 1 2 3 4 de droite.
ensuite, tu cherches la position de la semaine cherchée dans cette zone avec equiv

maintenant. pour faire la somme de X semaines.....je cherche encore.. ;-)
 

Pièces jointes

  • Classeur1 (2).xlsm
    12.6 KB · Affichages: 36
  • Classeur1 (2).xlsm
    12.6 KB · Affichages: 30
  • Classeur1 (2).xlsm
    12.6 KB · Affichages: 34

Emmanuel31

XLDnaute Occasionnel
Re : Recherche droite à gauche (car doublons dans les noms de colones)

Merci pour ton aide !

Malheureusement, le fichier m'est fournit brut.
Je ne peux pas définir des noms (sinon j'aurais déjà rajouté l'année après le numéro de semaine pour faire beaucoup plus simple ;))

C'est ça qui est compliqué ... :mad:
 

ROGER2327

XLDnaute Barbatruc
Re : Recherche droite à gauche (car doublons dans les noms de colones)

Bonjour à tous.


À essayer en D7 :​
Code:
=SOMME(DECALER(A2;;MAX((A1:X1=D5)*COLONNE(A:X))-D6;;D6))
(Valider par Ctrl Maj Entrée !)​


Bonne journée.


ℝOGER2327
#7410


Mardi 24 Merdre 141 (Sainte Purge, sage-femme - fête Suprême Quarte)
22 Prairial An CCXXII, 3,9777h - camomille
2014-W24-2T09:32:48Z


P.s. : Pour adapter au cas réel, il faudra remplacer X par l'intitulé d'une colonne située à droite de la dernière colonne de données.
 
Dernière édition:

Nairolf

XLDnaute Accro
Re : Recherche droite à gauche (car doublons dans les noms de colones)

Salut Emmanuel31, vgendron,

Je te propose la formule matricielle suivante à mettre dans D7:
=SOMME(DECALER($A$2;;MAX(SI($B$1:$M$1=$D$5;COLONNE($B$1:$M$1);0))-$D$6;;$D$6))

Pense à valider la formule par "CTRL+SHIFT+ENTREE".

Pour résumer, la formule cherche la valeur du nom de semaine sur la colonne la plus à droite et fait la somme des cellules de la ligne 2 sur le nombre de semaines indiquées en amont (incluant la semaine demandée).


EDIT : Salut Roger, je crois que nous avons eu la même idée, c'est que ça doit être la bonne :)
 
Dernière édition:

Emmanuel31

XLDnaute Occasionnel
Re : Recherche droite à gauche (car doublons dans les noms de colones)

Bonjour mutzik.

Ces données me sont fournies telles quels.
J'ai demandé à la source de rajouter l'année avec la semaine, de sorte à avoir "week x year y" (auquel cas je n'aurais plus eu de soucis) mais cela n'est pas possible.
Je ne peux donc rien faire à part travailler sur ce formalisme de sortie ... :-(
 

Emmanuel31

XLDnaute Occasionnel
Re : Recherche droite à gauche (car doublons dans les noms de colones)

ARF ....

C'était bon classeur ouvert, mais une fois le second fichier fermé (la source), ça ne fonctionne plus ...

D'autant plus que je voulais rajouter le répertoire, nom du fichier et de l'onglet en variable mais ça devient infaisable :mad::mad:

=SOMME(DECALER('repertoire[fichier]onglet'!$B$6;;MAX(('repertoire[fichier]onglet'!A1:XX1=Feuil1!C4)*COLONNE('repertoire[fichier]onglet'!A1:XX1))-Feuil1!C6;;Feuil1!C6))
 

Victor21

XLDnaute Barbatruc
Re : Recherche droite à gauche (car doublons dans les noms de colones)

Bonjour, Emmanuel31, vgendron :)

Une autre approche ?
Peut-être en D7 :
=SOMME(INDIRECT(ADRESSE(2;-$D$6+2+DROITE($D$5;1)+(NB.SI($B$1:$M$1;$D$5)-1)*4)):INDIRECT(ADRESSE(2;1+DROITE($D$5;1)+(NB.SI($B$1:$M$1;$D$5)-1)*4)))

En attendant plus simple :)

Edit : Bonjour lézamis. Non rafraîchi (ce qui ne ferait pourtant pas de mal), j'en étais resté à la réponse de vgendron...
 
Dernière édition:

Robert

XLDnaute Barbatruc
Repose en paix
Re : Recherche droite à gauche (car doublons dans les noms de colones)

Bonjour le fil, bonjour le forum,

Visiblement très en retard sur ce coup, je t'envoie quand même une solution VBA avec le code ci-dessous :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)

Dim NS As Byte 'déclare la variable NS (Nombre de Semaines)
Dim PL As Range 'déclare la variable PL (PLage)
Dim NB As Byte 'déclare la variable NB (NomBre)
Dim R As Range 'déclare la variable R (Recherche)
Dim PA As String 'déclare la variable PA (Première Adresse)
Dim COL As Integer 'déclare la variable COL (COLonne)
Dim I As Integer 'déclare la variable I (Incrément)

If Application.Intersect(Target, Range("D5:D6")) Is Nothing Then Exit Sub 'si le changement a lieu ailleurs que dans la plage D5:D6, sort de la procédure
Set PL = Range("A1:" & Cells(1, Application.Columns.Count).Address(0, 0)) 'définit la plage PL
Select Case Target.Address(0, 0) 'agit en fonction de l'adresse de la cellule modifiée
    Case "D5" 'cas D5
        If Target.Value = "" Then Range("D7").Value = "": Exit Sub 'si la cellule est effacée, efface la somme, sort de la procédure
        If Range("D6").Value = "" Then Range("D7").Value = "": Exit Sub 'si D6 est vide, efface la somme, sort de la procédure
    Case "D6" 'cas D6
        If Target.Value = "" Then Range("D7").Value = "": Exit Sub 'si la cellule est effacée, efface la somme, sort de la procédure
        If Range("D5").Value = "" Then Range("D7").Value = "": Exit Sub 'si D5 est vide, efface la somme, sort de la procédure
End Select 'fin de l'action en fonction de...
I = 1 'initialise la variable I
Set R = PL.Find(Range("D5"), Range("A1"), xlValues, xlWhole) 'définit la recherche R
NB = Application.WorksheetFunction.CountIf(PL, Range("D5").Value) 'définit le nombre d'occurrences de la valeur en D5 dans la plage PL
If NB = 1 Then 'condition : si ne nombre d'occurrences trouvé est égal à 1
    COL = R.Column 'définit la colonne COL (de la première occurrence trouvée)
Else 'sinon
    On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)
    PA = R.Address 'définit l'adresse PA de la première occurrence trouvée (génère une erreur si aucune occurrence trouvée)
    If Err <> 0 Then 'condition : si une erreur a été générée
        Err.Clear 'supprime l'erreur
        MsgBox "Le texte de la recherche n'existe pas !" 'message
        Range("D5").Select 'séletionne D5
        Exit Sub 'sort de la procédure
    End If 'fin de la condition
    On Error GoTo 0
    Do 'exécute
        I = I + 1 'incrément I
        Set R = PL.FindNext(R) 'redéfinit la recherche R (occurrence suivante)
        If I = NB Then COL = R.Column 'si I est égale au nombre NB, définit la colonne COL (de la dernière occurrence trouvée)
    Loop While Not R Is Nothing And R.Address <> PA 'boucle tant qu'il existe de nouvelles occurrences ailleurs qu'en PA
End If 'fin de la condition
'calcul de la somme
Range("D7").Value = Application.WorksheetFunction.Sum(Range(Cells(2, COL - (CInt(Range("D6").Value) - 1)), Cells(2, COL)))
End Sub
Le Fichier :
 

Pièces jointes

  • Emmanuel_v01.xlsm
    25.8 KB · Affichages: 32

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 329
Membres
103 184
dernier inscrit
Di Martino