Comparer une case à une colonne pour copier les éléments de la même ligne

Bonjour tout le monde,

J'adore utiliser Excel pour me faciliter et automatiser les choses, d'habitude j'arrive à trouver réponse à ma question sur les forums mais cette fois-ci pas de solution en vue, je viens donc poser la question directement.

Je fais du contrôle de tôles pour une boîte et je me suis fait un petit tableau de suivi pour ne pas me perdre, et ne pas avoir de doublons, etc.

Je dois envoyer un rapport journalier à mes chefs, onglet "Rapport Journalier".

Je souhaiterais comparer la colonne K de l'onglet "Suivi" à la date du jour, case G6 de l'onglet "Rapport Journalier", afin de recopier le numéro de tôle, colonne B de l'onglet "Suivi", dans la colonne B de l'onglet "Rapport Journalier".

Je souhaiterais également faire pareil pour les autres colonnes (25%, 50%, etc) en cochant avec un "X" dans leurs colonnes respectives, dans l'onglet "Rapport Journalier", car actuellement je le fais manuellement mais je me doute qu'il doit y avoir une fonction ou un mix de fonctions qui doit pouvoir résoudre mon problème.

Il y aurait également le total du nombre de tôles faites par jour, case E32 de l'onglet "Rapport Journalier", mais je ne vois pas comment le faire car je pensais utiliser la fonction "NBVAL" mais le fait de remplir les cases de fonctions d'appels fausse le résultat.

J'espère m'être fait comprendre, je sais que dans ma tête ça peut être clair mais au final c'est brouillon pour les autres.

Je vous remercie, bonne journée et bonne fin de week-end

Bonjour Thillas et bienvenu, bonjour le forum,

Je ne sais pas faire ça par formules. Je te propose une solution VBA avec le bouton Rapport Journalier. Comme VBA et les cellules fusionnées ne sont pas trop amis, j'ai modifié ton tableau de l'onglet Rapport Journalier. Une seule colonne pour les Numéro de Tôle, au lieu de deux fusionnées... J'ai aussi supprimé toutes les formules puisque tout se fait par VBA...

Le code du bouton :

Option Explicit

Private Sub CommandButton1_Click() 'bouton "Rapport Journalier"
Dim OS As Worksheet 'déclare la variable OS (Onglet Suivi)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim DJ As Date 'déclare la variable DJ (Date du jour)
Dim I As Integer 'déclare la variable I (Incrément)
Dim K As Integer 'déclare la variable K (incrément)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)

ActiveCell.Select 'enlève le focus au bouton
Me.Range("B8:I31").ClearContents 'efface d'éventuelles anciennes données
Set OS = Worksheets("Suivi") 'définit l'onglet suivi OS
TV = OS.Range("B2").CurrentRegion 'définit le tableau des valeurs TV
DJ = Me.Range("F6")(1, 1) 'définit la date DJ
For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV (en parant de la seconde)
    If TV(I, 9) = DJ Then 'condition : si la donnée ligne I colonne 9 de TV est égale à DJ
        K = K + 1 'incrémente K
        ReDim Preserve TL(1 To 7, 1 To K) 'redimensionne le tableau des lignes TL (7 lignes, K colonne)
        TL(1, K) = TV(I, 1) 'récupère le numéro de tôle ligne I colonne 1 de TV dans la ligne 1 de TL
        TL(2, K) = IIf(UCase(TV(I, 3)) = "OUI", "X", "") 'si la donnée ligne I colonne 3 de TV vaut "Oui", écrit "X" dans la ligne 2 de TL
        TL(3, K) = IIf(UCase(TV(I, 4)) = "OUI", "X", "") 'si la donnée ligne I colonne 4 de TV vaut "Oui", écrit "X" dans la ligne 3 de TL
        TL(4, K) = IIf(UCase(TV(I, 5)) = "OUI", "X", "") 'si la donnée ligne I colonne 5 de TV vaut "Oui", écrit "X" dans la ligne 4 de TL
        TL(5, K) = IIf(UCase(TV(I, 6)) = "OUI", "X", "") 'si la donnée ligne I colonne 6 de TV vaut "Oui", écrit "X" dans la ligne 6 de TL
        TL(6, K) = IIf(UCase(TV(I, 7)) = "OUI", "X", "") 'si la donnée ligne I colonne 7 de TV vaut "Oui", écrit "X" dans la ligne 6 de TL
        TL(7, K) = IIf(UCase(TV(I, 8)) = "OUI", "X", "") 'si la donnée ligne I colonne 8 de TV vaut "Oui", écrit "X" dans la ligne 7 de TL
    End If 'fin de la condition
Next I 'prochaine ligne de la boucle
Select Case K 'agit en fonction de K
    Case 0 'si K vaut 0
        MsgBox "Personne en tôle aujourd'hui !" 'message (à réécrire...)
    Case Else 'tous les autre cas
        'renvoie le tableau TL transposé dans la cellue B8 redimensionnée
        Me.Range("B8").Resize(K, 7).Value = Application.Transpose(TL)
End Select 'fin de l'action en fonction de K
End Sub

Le fichier :

10thillas-ep-v01.xlsm (72.71 Ko)

Bonjour à tous,

Je ne sais pas faire ça par VBA. Je te propose une solution formule.

Rectifié

Crdlmt

Bonjour le fil, bonjour le forum,

Je suis toujours impressionné par ce qu'arrivent à faire les formulistes ! C'est hallucinant...

@DjiDji, juste pour que ce soit parfait, il y a soucis avec la formule du total de tôle...

merci

Moi, tout ce que je sais faire en VBA, c'est initialiser une cellule de listes déroulantes en cascade !

Crdlmt

Je vous remercie, incroyable la rapidité.

Je vais étudier tout ça et essayer de comprendre le pourquoi du comment mais y a vraiment un fossé qui nous sépare.

Vous êtes des monstres

Rechercher des sujets similaires à "comparer case colonne copier elements meme ligne"