Creer une formule ou macro pour recherche de donnés automatique

Bonjour à tous,

Voilà j'ai encore besoin de votre aide.

Je voudrais faire une recherche auto dans l'ensemble du fichier.

J'ai besoin que sur la feuille "PLANCHE" les donnés des autres feuilles se mettent à jour automatiquement pour toute la semaine dès qu'on inscrit une date.

J'ai besoin que les données de B2 se placent a côté des données "LTA "de la colonne B se mettent dans la feuille "PLANCHE" dans les case correspondantes au jour, seulement si une date est inscrit dans la colonne C

données d'une des feuilles

capture

d'une autre feuille

capture

Dans ce tableau

capture

Et faire ca pour toute les feuilles du fichiers. même celles que nous créerons plus tard.

en gros prendre toute les données des différentes feuilles et les copier dans "la planche" à partir du moment ou la date est la même.

j'espère avoir été suffisament clair.

Je vous joint mon fichier de départ.

un grand merci à tous pour votre aide

8test.xlsx (184.48 Ko)

Bonsoir OnlyOneKris, bonsoir le forum,

Tout d'abord j'ai noté que le tableau dans certains onglets ne commençaient pas à la ligne 1 et je l'ai pris en compte dans le code en supprimant la ligne 1 si elle était vide. Ensuite, des onglets différents ont le même pays de destination (par exemple ENV AF et ENV 7C, BEG ASL et BEG JU). Je ne comprenais pas pourquoi je n'obtenais pas les même résultats que toi pour le 23/12/2019 et bien c'est à cause de ça. Tu n'as visiblement pas passé tous les onglets en revue...

Le code a placer dans le composant VBA : Feuil1(PLANCHE)

Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans l'onglet "PLANCHE"
Dim DR As Date 'déclare la variable DR (Date de Référence)
Dim D(6) As Date 'déclare le tableau de 7 variables D (Dates)
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TV As Variant 'déclare la variable TV (Tableau des valeurs)
Dim PD As String 'déclare la variable PD (Pays de Destination)
Dim DL As Date 'déclare la variable DL (Date de la Ligne)
Dim JS As Byte 'déclare la variable JS (Jour Semaine)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)

If Target.Address <> "$A$1" Then Exit Sub 'si le changement a lieu ailleurs qu'en A1, sort de la procédure
Range("A1").CurrentRegion.Offset(3, 0).ClearContents 'efface les anciennes données
DR = DateSerial(Year(Range("A1").Value), Month(Range("A1").Value), Day(Range("A1").Value)) 'définit la date de référence DR
For I = 0 To 6 'boucle sur 7 jours
    D(I) = DR + I 'définit la date D(I)
Next I 'prochain jour de la boucle
For Each O In Worksheets 'boucle 1 : sur tous les onglets O du classeur
    If Not O.Name = "PLANCHE" Then 'condition 1 : si le nom de l'onglet n'est pas "PLANCHE"
        'si la ligne 1 est vide, supprime la ligne 1
        If Application.WorksheetFunction.CountBlank(O.Rows(1)) = Application.Columns.Count Then O.Rows(1).Delete
        PD = IIf(UCase(O.Range("B2").Value) = "STOCK", "", O.Range("B2").Value) 'définit le pays de destination PD
        If PD <> "" Then 'condition 2 : si PD n'est pas vide
            TV = O.Range("A1").CurrentRegion 'définit la tableau des valeurs TV
            For I = 5 To UBound(TV, 1) 'boucle 2 : sur toutes les lignes I du tableau des valeurs TV (en partant de la 5ème)
                DL = DateSerial(Year(TV(I, 3)), Month(TV(I, 3)), Day(TV(I, 3))) 'définit la date de la ligne DL
                For JS = 0 To 6 'boucle 3 : sur les 7 jours de la semaine
                    If DL = D(JS) Then 'condition 3 : si la date de la ligne DL est égale la la date D(JS)
                        'définit la cellule de destination DEST en fonction du jour de la semaine JS
                        Set DEST = Cells(Application.Rows.Count, 2 * JS + 1).End(xlUp).Offset(1, 0)
                        'renvoie dans DEST le pays de destination PD si le LTA n'est pas vide ou égal à 0
                        DEST.Value = IIf(TV(I, 2) = "" Or TV(I, 2) = 0, "", PD)
                        'renvoie dans DEST décalée d'un colonne à droite le LTA s'il n'est pas vide ou égal à 0
                        DEST.Offset(0, 1).Value = IIf(TV(I, 2) = "" Or TV(I, 2) = 0, "", TV(I, 2))
                        Exit For 'sort de la boucle 3
                    End If 'fin de la condition 3
                Next JS 'prochain jour de la semaine de la boucle 3
            Next I 'prochaine ligne de la boucle 2
        End If 'fin de la condition 2
    End If 'fin de la condition 1
Next O 'prochain onglet de la boucle 1
End Sub

Le fichier :

Salut Thau Thème,

Un grand merci ça marche super.

Oui selon les jours de la semaine certaines destinations changent de compagnie, c'est pour ca qu'il y a plusieurs feuilles avec la mêmes destinations. Mais il n'y aura jamais les mêmes dates sur les deux.

Je suis désolé j'ai oublié une colonne très importante la D.

Il faut que les commentaires de la colonne D des feuilles aillent dans la colonne C de la Planche a coté des LTA. J'ai rajouté une colonne "com" sur la planche, ducoup ca décale tout.

Ca te dérange pas de la modifier de nouveau ?

en tout cas merci bcp

Bonne journée

3test-xlsx.xlsm (215.25 Ko)

Re,

En pièce jointe la version 2...

Tu es un tueur !!!

un grand MERCI tu as assuré

et bon dimanche à toi

Rechercher des sujets similaires à "creer formule macro recherche donnes automatique"