Valeur d'une cellule d'une plage en fonction d'une autre cel

Bonjour,

J'ai fait un fichier Excel avec des formule imbriquées les unes dans les autres. Le fichier est lent.

Je voudrai faire une macro qui met une valeur dans toutes les cellules de la colonnes M en fonction des valeur de la colonne L.

Par exemple pour les cellules de la ligne 12:

Si L12 = "08h00" alors on met "Matin" dans M12; sinon

SI L12 = "12h00" alors on met "Matin" dans M12 sinon

SI L12 = 13h00 alors on met "Après-midi" dans M12

Sinon on ne met rien.

Je cherche à faire cette opération avec une macro pour toute les cellules de la plage suivante: Colonne M, ligne 1 à 2300.

Je vous remercie d'avance.

Bien Cordialement,

Bonjour

Pourquoi joindre un fichier :

Sur la charte du Forum

https://forum.excel-pratique.com/annonces/explications-et-regles-a-respecter-t13.html

Point 6 : • Pensez à joindre un fichier pour faciliter la compréhension du problème et augmenter les chances de vous faire aider (taille limite : 300ko, n'hésitez pas à compresser vos fichiers).

Cordialement

Bonjour,

J'avais évité de mettre un fichier dans le but de simplifier et donner l'idée générale. Car la formule est un peu plus complexe.

Mais si ça peut vous aider à comprendre, voici une version simplifiée.

Les colonnes grises je veux faire un code VBA qui renseigne directement les colonnes en gris. (Sans écrire des formules dans le cellules de la feuille).

Je vous remercie d'avance de votre aide,

Bien cordialement

16fichier-excel.xlsx (11.39 Ko)

Bonsoir,

Si tu commençais par mettre des valeurs horaires pour noter les heures cela simplifierait déjà largement les choses.

Pour qu'un classeur fonctionne bien, il faut commencer par bien le concevoir !

Cordialement.

Bonjour,

Merci pour la proposition, mais pouvez-vous m'aider à faire la macro?

Bien cordialement,

KAK a écrit :

Bonjour,

Merci pour la proposition, mais pouvez-vous m'aider à faire la macro?

Bien cordialement,

Lorsque j'examine un travail en cours, je prends en considération les choix faits par le concepteur, qui peuvent être très dissemblables des choix que j'aurais fait moi-même dans un projet similaire, mais je n'interviens nullement sur les choix qui relèvent d'une personnalisation dans la conception dès lors que l'on a des moyens équivalents de les traiter.

Par contre, pour ce qui est des choix qui ont pour effet de compliquer la réalisation et compliqueront également le fonctionnement, je considère qu'il convient d'infléchir les choix initiaux de façon à simplifier et alléger la réalisation comme le résultat final...

En conséquence, je n'apporte de contribution à la réalisation d'une macro que si j'estime que cette façon d'opérer peut s'avérer justifiable dans le cadre du projet vu globalement. Tant que cette justification ne m'apparaît pas...

Et si par ailleurs j'indique qu'un élément de choix devrrait être modifié dans le but d'une simplification et d'une rationalisation, j'attends que cette modification soit apportée avant tout autre chose...

Mais je n'empêche pas que l'on puisse considérer les choses autrement...

Cordialement.

Bonjour,

J'ai pas choisis le format heure car souvent il y'a des textes (matin, après midi, ...) dans la même colonne. Lorsqu'il y'a du texte, cela signifie que l'on ne connait pas l'heure ou qu'il n'y a pas d'heure imposée. Le programme final doit traiter chacune de ces informations. Voilà pourquoi j'ai gardé le format standard.

Mais si cela te pose un problème, voilà le fichier exemple avec les formats en heure.

Bien cordialement,

19fichier-excel.xlsx (11.42 Ko)

Une formule qui conviendra mieux :

=SI(ESTNUM(J9);SI(J9<13/24;"matin";"après-midi");SI(J9<>"";J9;""))

Pourquoi vouloir remplacer par une macro ? Pour supprimer les formules ?

Dans ton exemple tu as 2 colonnes (2 groupes de 2), avec en-têtes. Dans ta demande initiale tu fais état d'un seul groupe, et démarrant ligne 1 (donc sans en-tête).

Oui, les é groupes fonctionnent de la même façon. C'est juste pour montrer plus d'exemples et faciliter la compréhension.

Oui, je veux faire les macros et supprimer les formules dans les cellules. J'ai déjà fais le fichier avec des formules dans les cellules. Mais il y'a plusieurs utilisateurs (au moins 15 personnes) et beaucoup ne s'y connaissent pas avec Excel.

Je veux automatiser les colonnes en gris par une macro.

Je ne sais pas comment dire : pour chaque cellule d'une colonne grise (par exemple K), on regarde la valeur de la cellule verte en phase (cellule de la colonne J), et on fait

=SI(ESTNUM(J9);SI(J9<13/24;"matin";"après-midi");SI(J9<>"";J9;"")).

L'avantage des formules, c'est qu'elles sont en place et renvoient le résultat sans que les utilisateurs aient à intervenir.

Et on peut lorsque la situation ne variera plus écraser les formules par un simple copier-coller en valeurs pour alléger.

Une macro peut effectivement balayer une colonne, placer une valeur dans la colonne attenante. Elle demandera toutefois à être lancée sur commande, donc une intervention de l'utilisateur, et elle refera à chaque fois la totalité de la colonne !

Tu parles maintenant d'automatisation, ce qui ne figure dans aucun post précédent...

C'est autre chose ! Là il faut d'abord un classeur dont la structure soit rigoureusement identique à ton orginal, ce qui n'est pas du tout le cas de ton modèle selon tes dires...

Les groupes de colonnes ont la même structure dans le fichier final. Le fichier final est simplement plus grand et utilise plusieurs autre fonctions.

Pour le lancement de la macro, je ferai un bouton et les utilisateurs finaux auront juste à cliquer sur ce bouton.

J'ai déjà commencé mon code VBA mais je suis bloqué sur cette partie.

Bon ! On reste à la macro à déclencher...

Sub Kak()[list=][/list]
    Dim Tbl, n%, i%
    With ActiveSheet
        n = .Range("L" & .Rows.Count).End(xlUp).Row
        Tbl = .Range("L2:L" & n).Value2
        For i = 2 To UBound(Tbl)
            If Not IsEmpty(Tbl(i, 1)) Then
                If IsNumeric(Tbl(i, 1)) Then
                    n = Hour(Tbl(i, 1))
                    Tbl(i, 1) = IIf(n < 13, "matin", "après-midi")
                Else
                    Select Case LCase(Tbl(i, 1))
                        Case "matin", "après-midi"
                        Case Else: Tbl(i, 1) = Empty
                    End Select
                End If
            End If
        Next i
        .Range("M2:M" & UBound(Tbl)).Value = Tbl
    End With
End Sub

Compromis J'ai pris en compte les colonnes L et M citées dans ton premier post, mais j'ai considéré la présence d'une ligne d'en-tête, donc on part de la ligne 2. A toi d'adapter selon ton contexte...

Si tu t'intéresse à VBA, la structure de la macro est ultra-simple : on délimite la fin de la colonne L, on affecte la plage L2:L et fin à un tableau, on traite le tableau et on affecte le tableau à la plage M2:M...

Pour l'affectation au tableau on utilise Value2, c'est la même chose que Value dans la plupart des cas, sauf pour les dates et heures et les données monétaires, pour lesquelles on les récupère exclusivement sous leur valeur numérique (une garantie !).

Pour le traitement, on ne que substituer dans le tableau les valeurs prélevées à celles qu'on souhaite avoir en M. Il faut prendre quelques précautions.

On teste donc les valeurs "vides", pour les laisser de côté (parce qu'une valeur "vide" renvoie 0 en contexte numérique, qui serait donc évalué comme 0 heures, ce qui est à éviter).

Pour les valeurs "non vides" on considère d'abord les valeurs numériques, on en extrait l'heure et on remplace la valeur du tableau par la valeur correspondant à l'heure.

Pour les valeurs non numériques on conserve "matin" et "après-midi" (le test opère une conversion en minuscules pour tester, donc Matin et matin seront assimilés, mais apres-midi (sans accent) ou après midi (sans trait d'union) ne le seront pas). Et on vide le tableau de toute autre mention.

Cordialement.

Merci beaucoup,

ça marche sur le model. je vais l'adapter au fichier réel.

Encore une fois merci pour le temps que tu as pris pour moi.

Rechercher des sujets similaires à "valeur plage fonction cel"