Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 compléter tableau

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Elevenul

XLDnaute Nouveau
Bonjour le Forum,

je viens vers vous pour un coup de pouce sur une feuille excel.

En colonne BC la valeur de la cellule est soit "Oui" soit "Non".
Si la valeur est "Oui" alors si colonne S (Etat) est = à "Couple" lire en I (Conjoint) et aller sur la ligne du Conjoint et en BC du Conjoint à la place de "Non" mettre "Oui"
Ainsi sur toute la feuille

Merci de votre aide

Ci joint le fichier suivi allégé
 

Pièces jointes

Solution
Bonsoir,

Puisque j'ai commencé, je publie la macro.

nota : vous avez sans doute des incohérences dans votre fichier. On trouve un conjoint AGU Bernard mais dans les colonnes Nom & Prénom, on ne trouve qu'un AGU Bernard Romain.

Or AGU Bernard est différent de AGU Bernard Romain. Il se peut d'ailleurs qu'une autre personne puisse s'appeler AGU Bernard tout simplement ou AGU Bernard Roland. Vous avez là des sources d'erreur indétectable si on n'est pas précis.
Bonjour à tous,

Par formule tu ne pourras pas changer ce qui est mis en "BC dans "BC", il faut passer par le VBA.
Par contre en "BD2" à essayer.
VB:
=SI(ET(BC2="non";OU(S2="Couple";S2="Conjoint"));"oui";BC2)

JHA
 

Pièces jointes

Bonsoir JHA,
La condition première est en colonne BC Si la valeur est "Oui" alors si colonne S (Etat) est = à "Couple" lire en I (Conjoint) et aller sur la ligne du Conjoint et en BC du Conjoint à la place de "Non" mettre "Oui"

mais si BC est "Non" on ne traite pas

merci de ton regard
 
Bonsoir Elevenul, JHA,

Bien sûr puisqu'il y a des entrées manuelles en colonne BC on ne peut pas y mettre des formules.

Mais on peut mettre en colonne BD les corrections à apporter avec cette formule en BD2 :
Code:
=REPT("OUI";(S2="Conjoint")*(BC2<>"Oui")*SIERREUR(INDEX(BC:BC;EQUIV(G2&" "&GAUCHE(H2)&"*";I:I;0))="Oui";0))
A tirer vers le bas, voyez le fichier joint.

A+
 

Pièces jointes

Bonsoir JHA, job75,

Ok cela fonctionne je vais essayer une macro pour remplacer les Non par les Oui car en BD il y a des données je l'ai décalé a la fin de la ligne et je faire une boucle pour changer dans BC.

Merci de vos réponses.
 
Bonsoir,

Puisque j'ai commencé, je publie la macro.

nota : vous avez sans doute des incohérences dans votre fichier. On trouve un conjoint AGU Bernard mais dans les colonnes Nom & Prénom, on ne trouve qu'un AGU Bernard Romain.

Or AGU Bernard est différent de AGU Bernard Romain. Il se peut d'ailleurs qu'une autre personne puisse s'appeler AGU Bernard tout simplement ou AGU Bernard Roland. Vous avez là des sources d'erreur indétectable si on n'est pas précis.
 

Pièces jointes

Dernière édition:
Hello mapomme,

Oui pourquoi pas, du VBA avec cette macro du fichier (2) :
VB:
Option Compare Text 'la casse est ignorée

Sub Correction()
Dim tablo, i&, cherche$, lig As Variant
With Sheets("suivi").[A1].CurrentRegion
    tablo = .Resize(, 55) 'matrice, plus rapide
    For i = 2 To UBound(tablo)
        If tablo(i, 19) = "Conjoint" And tablo(i, 55) <> "Oui" Then
            cherche = tablo(i, 7) & " " & Left(tablo(i, 8), InStr(tablo(i, 8) & " ", " ") - 1) 'nom + 1er prénom
            lig = Application.Match(cherche & "*", .Columns(9), 0)
            If IsNumeric(lig) Then If tablo(lig, 55) = "Oui" Then tablo(i, 55) = "Oui"
        End If
    Next
    .Columns(55) = Application.Index(tablo, , 55) 'restitution
End With
End Sub
A+
 

Pièces jointes

Bonjour Elevenul, le forum,

S'il y a un très grand nombre de lignes Application.Match prendra pas mal de temps.

Pour aller vite il faut utiliser le Dictionary :
VB:
Option Compare Text 'la casse est ignorée

Sub Correction()
Dim tablo, d As Object, i&, s, cherche$
With Sheets("suivi").[A1].CurrentRegion
    tablo = .Resize(, 55) 'matrice, plus rapide
    Set d = CreateObject("Scripting.Dictionary")
    d.CompareMode = vbTextCompare 'la casse est ignorée
    '---liste des noms + 1ers prénoms de la colonne I---
    For i = 2 To UBound(tablo)
        If tablo(i, 9) <> "" Then
            s = Split(tablo(i, 9) & " ")
            d(s(0) & " " & s(1)) = tablo(i, 55) = "Oui" 'mémorise True/False
        End If
    Next
    '---correction en colonne BC---
    For i = 2 To UBound(tablo)
        If tablo(i, 19) = "Conjoint" And tablo(i, 55) <> "Oui" Then
            cherche = tablo(i, 7) & " " & Left(tablo(i, 8), InStr(tablo(i, 8) & " ", " ") - 1) 'nom + 1er prénom
            If d(cherche) Then tablo(i, 55) = "Oui"
        End If
    Next
    .Columns(55) = Application.Index(tablo, , 55) 'restitution
End With
End Sub
Fichier (3) testé sur 81 000 lignes, l'exécution se fait en 0,9 seconde.

A+
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
9
Affichages
444
Réponses
4
Affichages
282
Réponses
38
Affichages
1 K
Réponses
5
Affichages
167
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…