Double condition pour remplissage automatique de cellules

Loisel

XLDnaute Nouveau
Bonsoir à tous

Après moult recherches, je n'ai pas réussi à mettre en forme certaines cellules de mon tableau
devant répondre à une double condition.

Je mets un extrait de fichier dans lequel j'ai fait figurer les différents cas envisagés.

Pouvez-vous m'aider à rédiger les formules qui me permettront de les réaliser ?
 

Pièces jointes

  • conditions.xlsx
    19.4 KB · Affichages: 48
  • conditions.xlsx
    19.4 KB · Affichages: 68
  • conditions.xlsx
    19.4 KB · Affichages: 68
Dernière édition:

Iznogood1

XLDnaute Impliqué
Re : Double condition pour remplissage automatique de cellules

Salut,

Raisonne dans l'autre sens :
si colonne H = agence et colonne F = Inter ou t/s
alors les colonnes AE AF AG AH AL seront égales à WWWW

si colonne H = agence et colonne F = brun
alors les colonnes AG AH AI AJ AK AL AM seront égales à WWWW

si colonne H = agence et colonne F = liens
alors les colonnes AE AF AI seront égales à WWWW

si colonne H = agence et colonne F = cdr
alors les colonnes AE AG AH AI AJ AK AL AM seront égales à WWWW
devient
AE égale à WWWW si (H = agence) et ((F=Inter) ou (F=T/s) ou (F=liens) ou (F=cdr))
De même pour AF : WWWW si (H = agence) et ((F=T/s) ou (F=Inter) ou ou (F=liens))
etc...

Ci joint un exemple pour AE.
 

Pièces jointes

  • conditions.xlsx
    20.6 KB · Affichages: 47
  • conditions.xlsx
    20.6 KB · Affichages: 59
  • conditions.xlsx
    20.6 KB · Affichages: 58

Loisel

XLDnaute Nouveau
Re : Double condition pour remplissage automatique de cellules

Bonjour Iznogood

La conception du tableau fait que je ne peux pas raisonner a contrario en inscrivant les formules dans les colonnes AE à AM.
De plus le tableau est évolutif.
Merci de m'avoir consacrer de votre temps.
Est-il possible de passer par une macro ?
 

Loisel

XLDnaute Nouveau
Re : Double condition pour remplissage automatique de cellules

Bonjour Iznogood, bonjour à tous

La difficulté des formules dans les colonnes AE à AM qui fonctionnent (un grand merci à vous Iznogood)
réside dans le fait que l'alimentation du tableau se fait via de multiples formulaires.
Je ne peux saisir les formules avant saisie du formulaire car l'alimentation du formulaire qui incrémente le tableau les fait disparaître (terme pas excelien)
Si j'écris les formules après, les données inscrites dans les colonnes AE à AM font être de fait supprimées.

D'où mon idée de passer par une macro mais cela ne doit pas être possible.

Je me suis donc dit que j'allais ajouter autant de colonnes reprenant pour chacune d'elles les formules adaptées.
Le résultat n'est pas concluant du tout.

Je ne sais plus par quel bout prendre mon problème.

Pouvez-vous m'apporter votre aide à nouveau ?
 

Pièces jointes

  • conditions-2.xlsx
    25.1 KB · Affichages: 37

Iznogood1

XLDnaute Impliqué
Re : Double condition pour remplissage automatique de cellules

Un petit exemple avec une macro
Appui sur le bouton "Mise à jour" pour remplir la colonne AE.

Code à compléter pour les autres colonnes.
 

Pièces jointes

  • conditions-2.xlsm
    32.2 KB · Affichages: 49

Loisel

XLDnaute Nouveau
Re : Double condition pour remplissage automatique de cellules

Merci encore Iznogood,

J'ai un problème dans le code des colonnes suivantes.
J'ai bien repris ton code que j'ai modifié ainsi

Range("AE2:AE" & Range("F2").CurrentRegion.Rows.Count).FormulaR1C1 = _
"=IF(AND(RC[-23]=""agence"",OR(RC[-25]=""Inter"",RC[-25]=""t/s"",RC[-25]=""liens"",RC[-25]=""cdr"")),""wwww"","""")"

Pour la colonne suivante , j'ai donc mis ceci et j'ai procédé de la même façon pour les suivantes.
Range("AF2:AF" & Range("F2").CurrentRegion.Rows.Count).FormulaR1C1 = _
"=IF(AND(RC[-23]=""agence"",OR(RC[-25]=""Inter"",RC[-25]=""t/s"",RC[-25]=""liens"")),""wwww"","""")"

Mais lorsque l'on clique sur le bouton de mise à jour, s'il n'y a aucun problème pour la colonne AE, les colonnes suivantes sont toutes décalées c'est à dire que l'on ne tape plus sur les conditions en H et F mais en I et G et ainsi de suite :(

J'ai un autre gros problème : la fin de la formule indique """" ce qui fait que les cellules qui existent dans les colonnes AE à AM si elles sont renseignées, sont mises après l'utilisation de la formule "à vide" :confused:

C'est à y perdre son latin :confused:
 
Dernière édition:

Iznogood1

XLDnaute Impliqué
Re : Double condition pour remplissage automatique de cellules

C'est normal.

Dans la formule : RC[-23]=""agence"" signifie "regarde 23 colonnes à gauche".
C'est correct pour pour la colonne AE (la colonne H est bien 23 colonnes à gauche de la colonne AE).
Ce ne l'est pas pour les suivantes !

Le plus simple est de saisir la bonne formule dans la première cellule.
Puis de lancer l'enregistreur de macro.
Enfin revalider la formule (F2 + Entrée)
Arrête l'enregistreur de macro et regarde le code généré : tu obtiens la formule correcte avec les bons décalages.
 
Dernière édition:

Loisel

XLDnaute Nouveau
Re : Double condition pour remplissage automatique de cellules

C'est bon, Iznogood

Je suis parvenue à faire l'ensemble de mes formules en vba correctement.

Reste la grosse épine de la suppression des données chiffrées figurant dans les colonnes AE à AM du tableau lors du lancement de la macro.

Connaitriez-vous un moyen de solutionner ces suppressions non souhaitées ?

Merci à vous
 

Iznogood1

XLDnaute Impliqué
Re : Double condition pour remplissage automatique de cellules

Logiquement, supprimer les données déjà inscrites ne devrait pas poser de problèmes puisqu'elles seront rempalcée par des valuers calculées correspondant aux conditions décrites.

Cependant, si tu modifies les valeurs "manuellement" et que tu veux conserver ces modifications, il faut modifier le code de la manière suivante :
Code:
Private Sub btnMAJ_Click()
    Dim r As Range
    For Each r In Range("F2").CurrentRegion.Rows.Count
        'Pour la colonne AE
        If r.Offset(0, 23).Value = "" Then r.Offset(0, 23).FormulaR1C1 = _
        "=IF(AND(RC[-23]=""agence"",OR(RC[-25]=""Inter"",RC[-25]=""t/s"",RC[-25]=""liens"",RC[-25]=""cdr"")),""wwww"","""")"
        'De même pour la colonne AF
        ' If r.Offset(0,24).value = "" Then r.Ofsset(0,24).FormulaR1C1 = ...
        'etc...
    Next r
End Sub
 

Loisel

XLDnaute Nouveau
Re : Double condition pour remplissage automatique de cellules

Bonsoir Iznogood

Dès le lancement de la macro, j'ai une erreur sur Private Sub... de votre code

Code:
Private Sub btnMAJ_Click()
    Dim r As Range
    For Each r In Range("F2").CurrentRegion.Rows.Count

Le message d'erreur est le suivant :

Erreur de compilation : For Each ne peut itérer que sur un objet Collection ou un tableau​

Pouvez-vous me dire comment éviter ce message ? Je suis bloquée et je ne peux aller plus loin :confused:
Ne sommes nous pas obligés d'indiquer le nom de la feuille sur laquelle la macro doit être exécutée ?

Code:
ActiveSheet.UsedRange.Rows.Count

J'ai une autre question à vous poser.
Dans votre fichier, vous avez mis le bouton de mise à jour directement sur le tableau, que va -t-il se passer si nous le mettons sur la feuil3 ?
 
Dernière édition:

Iznogood1

XLDnaute Impliqué
Re : Double condition pour remplissage automatique de cellules

Oups, erreur dans mon code.
Le code correct est

Code:
Private Sub btnMAJ_Click()
    Dim r As Range
    For Each r In Range("F2:F" & Range("F2").CurrentRegion.Rows.Count)
        'Pour la colonne AE
        If r.Offset(0, 23).Value = "" Then r.Offset(0, 23).FormulaR1C1 = _
        "=IF(AND(RC[-23]=""agence"",OR(RC[-25]=""Inter"",RC[-25]=""t/s"",RC[-25]=""liens"",RC[-25]=""cdr"")),""wwww"","""")"
        'De même pour la colonne AF
        ' If r.Offset(0,24).value = "" Then r.Ofsset(0,24).FormulaR1C1 = ...
        'etc...
    Next r
End Sub


Le code est associé au click d'un bouton sur la feuille.

Pour mettre le bouton sur une autre feuille, il faut en effet indiquer le nom de la feuille où appliquer la macro.

Exemple : si le bouton et sur la Feuille3, mais que les données sont sur la Feuil1, le code devient :
Code:
Private Sub btnMAJ_Click()
    Dim r As Range
    For Each r In Feuil1.Range("F2:F" & Feuil1.Range("F2").CurrentRegion.Rows.Count)
        'Pour la colonne AE
        If r.Offset(0, 23).Value = "" Then r.Offset(0, 23).FormulaR1C1 = _
        "=IF(AND(RC[-23]=""agence"",OR(RC[-25]=""Inter"",RC[-25]=""t/s"",RC[-25]=""liens"",RC[-25]=""cdr"")),""wwww"","""")"
        'De même pour la colonne AF
        ' If r.Offset(0,24).value = "" Then r.Ofsset(0,24).FormulaR1C1 = ...
        'etc...
    Next r
End Sub
(Attention : Feuil1 est le nom de l'objet visible dans l'éditeur VBA)

On peut aussi utiliser le nom de l'onglet
Code:
Private Sub btnMAJ_Click()
    Dim r As Range
    For Each r In ThisWorkbook.Worksheets("Feuille1").Range("F2:F" & ThisWorkbook.Worksheets("Feuille1").Range("F2").CurrentRegion.Rows.Count)
        'Pour la colonne AE
        If r.Offset(0, 23).Value = "" Then r.Offset(0, 23).FormulaR1C1 = _
        "=IF(AND(RC[-23]=""agence"",OR(RC[-25]=""Inter"",RC[-25]=""t/s"",RC[-25]=""liens"",RC[-25]=""cdr"")),""wwww"","""")"
        'De même pour la colonne AF
        ' If r.Offset(0,24).value = "" Then r.Ofsset(0,24).FormulaR1C1 = ...
        'etc...
    Next r
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 114
Messages
2 085 432
Membres
102 889
dernier inscrit
monsef JABBOUR