Copier une cellule en fonction de deux conditions

Bonjour à tous,

J'aurai besoin de vous sur un sujet pour lequel je ne suis pas assez compétent.

Je vous explique mon problème, dans la première feuille, j'aurai le nom, le prénom et l'équipe à laquelle ils appartiennent. J'ai aussi une date à laquelle on doit étalonner leur appareil. Et j'aimerais que dans les autres feuilles appelées par le numéro de leur équipe s'affichent les personnes de l'équipe en question qui ont une date qui va expirer dans le mois.

Je vous joins un exemple du fichier, dans le fichier, je n'ai mis qu'une seule équipe, mais il y en aurait plusieurs.

Merci d'avance,

Cordialement.

5exemple.xlsx (17.62 Ko)

Colle ça dans n'importe quelle feuille que tu vas créer, pour n'importe quelle équipe.

Attention, le nom de la feuille doit absolument correspondre au nom de l'équipe écrit dans le tableau de la feuille GLOBAL

Private Sub Worksheet_Activate()

    nom_equipe = ActiveSheet.Name

    Dim Ws_global As Worksheet
    Dim Ws_equipe As Worksheet
    Set Ws_global = ThisWorkbook.Worksheets("GLOBAL")
    Set Ws_equipe = ThisWorkbook.Worksheets(nom_equipe)

    Ws_equipe.Range("A2:Z5000").ClearContents

    Dim tab_data() As Variant
    derlig_global = Ws_global.Range("A" & Rows.Count).End(xlUp).Row
    If derlig_global = 1 Then                                           
        MsgBox "Aucun nom n'a été saisi"
        Exit Sub
    End If

    tab_data = Ws_global.Range("A2", "D" & derlig_global)

    date_limite = Date + 30 

    For i = LBound(tab_data, 1) To UBound(tab_data, 1)    
        If tab_data(i, 3) = nom_equipe Then
            If CDate(tab_data(i, 4)) < date_limite Then
                derlig_equipe = Ws_equipe.Range("A" & Rows.Count).End(xlUp).Row
                Ws_equipe.Range("A" & derlig_equipe + 1).Value = tab_data(i, 1) & " " & tab_data(i, 2)
            End If
        End If
    Next i

End Sub

Merci BibuNesco pour ta réponse.

Je pense que l'on est pas loin de la réponse idéale, mais quand je mets la page de code dans les feuilles, Excel m'indique qu'il y a une erreur d'incompatibilité (13) je ne sais pas ce qu'elle veut dire.

probleme

Cordialement.

Il faut que la colonne "Date" du tableau ne soit remplie qu'avec des données au format Date, c'est à dire XX / XX / XX, sinon le CDate qui converti la valeur en Date ne fonctionnera pas.

Je crois avoir compris le problème, mais je ne sais pas le résoudre.
Tu m'as envoyé le fichier, j'ai voulu ajouter des colonnes devant celle de la date. Du coup, ça n'a plus marché, car les cellules n'étaient plus au même format.

Pourrais-tu me dire comment changer la colonne du programme ? Et quand la cellule est vide, c'est possible qu'elle ne soit pas comptabilisée ?

Cordialement.

En partant du tableau qui était donné la colonne des dates était la quatrième colonne, c'est pour ça que dans mon CDate j'indique "CDate(tab_data(i,4))", 4 étant l'indice de la quatrième colonne.

Il faut juste changer la valeur ici pour qu'elle corresponde à l'index de colonne actuel pour les dates.

Concernant une colonne avec une date vide, je ne sais pas, il faudrait faire quelques tests, mais techniquement si aucune date n'est indiquée cela veut dire que l'opérateur ne devra jamais faire d'étalonnage, donc on peut imaginer un code qui supprime automatiquement la ligne si la date n'est pas renseignée.

Oui c'est bien ce que je me disais du coup, j'avais fait le test et VB me met une erreur d'exécution 9. Quand je tape If CDate(tab_data(i, 8)) < date_limite Then, on me dit que l'indice n'appartient pas à la sélection.

Renvoyez moi le fichier pour que je puisse voir ce qui ne va pas, ça sera plus pratique pour moi :)

Bonjour, voici le fichier avec la modif.

3exemple.xlsm (26.33 Ko)

Bonjour,

Le problème est que le tableau s'initialise en prenant les données entre la colonne A et la colonne D, ainsi il ne possède que 4 colonnes.

Du coup lui demander une valeur située à la 8ème colonne .. il n'aime pas trop.

Il faut juste changer l'initialisation du tableau, de cette manière :

tab_data = Ws_global.Range("A2", "D" & derlig_global)

Remplacé par :

tab_data = Ws_global.Range("A2", "H" & derlig_global)

Normalement ça devrait être bon

C'est ce que j'avais fais mais ça ne fonctionné pas du coup j'ai mis la colonne M, et là ça fonctionne.

Merci beaucoup. Il me reste encore des choses à compléter pour que le fichier soit parfait.

Je me permet donc de te demander si tu savais s'il était possible de changer la valeur du prochain étalonnage.

Dans le fichier actuel, j'aimerais rajouter une colonne dans la feuille "EQUIPE 1", cette colonne me donnerai la prochaine date à laquelle il faut faire un étalonnage. Et est ce possible de faire basculer cette date dans la feuille "GLOBAL" devant le bon nom et prénom. Pour ensuite remettre à jour, la liste des personnes à étalonner.

Je m'excuse de te prendre autant de temps.

Cordialement.

Rechercher des sujets similaires à "copier fonction deux conditions"