Remplacer ligne existante sous deux conditions

Bonjour le forum.

J'ai besoin d'un petit coup de main.

La partie de code suivante, (que m'avais faite Claude, je pense), choisit une ligne en fonction d'un critère (le nom exemple Machin) qui est fixé en cellule A3.

Je voudrait maintenant que ce choix se fasse en plus en fonction d'un autre critère (le Prénom exemple Germain) que je vais mettre en cellule A4

L'ojectif est de choisir la ligne qui possède le Nom MACHIN et le Prénom GERMAIN car je peux avoir plusieurs lignes avec le même Nom mais pas le même Prénom.

Je ne connais pas la syntaxe pour complèter le code. J'ai bien essayé mais en vain, bien que je pense que cela ne doit pas être trop compliqué

D'avance merci pour votre aide précieuse,

Amicalement,

Elfi

'Sub Remplacerligneexistante()

...

Bien entendu, la suite du code modifie la ligne mais là, je n'ai pas de problème.

Bonjour,

Non ce code n'est pas de moi,

dans la base, le Nom et prénom est dans la même cellule ?

Vaudrait mieux voir le fichier

Amicalement

Claude

Bonjour Claude,

merci pour la rapidité. En fait, je croyais que le code était de toi car tu avais grandement participé au progrmme originel qui m'a servi à faire celui-ci (notamment avec ton super travail sur le filtre).

Voila, je te joints le "Bébé" pour que tu comprennes.

Quand je suis à l'accueil, je vais consulter des dossiers existants pour les complèter ou les modifier.

C'est la macro "Remplacer ligne existante" du module 2 que je voudrais modifier pour prendre en compte deux critères au lieu d'un (voir Nom et Prénom dans la base).

J'espère que ce sera pas trop galère. D'avance merci encore,

amicalement,

Elfi

re,

remplace cette ligne

    For n = Range("a65536").End(xlUp).Row To 9 Step -1
        '---annulé ---If (Range("a" & n) = (Range("a3"))) Then
        If Range("a" & n) = Range("a3") And Range("b" & n) = Range("a4") Then
            Rows(n).Select
        End If
    Next n

Je n'ai pas tester

on doit pouvoir trouver la ligne direct sans balayer la base avec la boucle "n" !

Claude

Hello Claude,

super, c'est exactement ce que je voulais.

D'ailleurs ça me fait penser que je peux ajouter autant de conditions que je veux non?

Merci encore une fois pour ta gentillesse et ta disponibilité,

Bonne fin de journée,

Amicalement,

Elfi

re,

pour ta gouverne

inutile de continuer la boucle quand on a trouvé !

ajoute Exit For dans le If

    For n = Range("a65536").End(xlUp).Row To 9 Step -1
        If Range("a" & n) = Range("a3") And Range("b" & n) = Range("a4") Then
            Rows(n).Select
            Exit For
        End If
    Next n

----------------- sinon à la place de la boucle --------------

Sheets("Base").Unprotect Password:="elfi"
'--- essai Claude
Dim x$, Lg%, Lg2%
    x = Sheets("Complément").Range("c7") & Sheets("Complément").Range("c9")
With Sheets("base")
    Lg = .Range("A65536").End(xlUp).Row
    .Range("i6:i" & Lg) = "=a6&b6" 'nom+prénom
    On Error Resume Next
    Lg2 = WorksheetFunction.Match(x, .Range("i6:i" & Lg), 0) + 5
    If Lg2 = 0 Then MsgBox ("n'existe pas !"): Exit Sub
    On Error GoTo 0
    .Range("a" & Lg2).Select
End With
'--- suite macro ---

si tu as 5000 lignes, le temps de traitement sera grandement réduit

Amicalement

Claude

Bonsoir Claude,

je te remercie de ces explications. N'étant pas un grand spécialiste des macros, je ne comprend pas tout mais malgré tout, je pense m'en approcher.

Qoiqu'il en soit, même si mon fichier n'est pas trop gros (500 lignes environ mais beaucoup de colonnes en préparation), je suis ton conseil et prends l'option de la dernière solution.

Quelque part, je trouve que c'est plus élégant et pour le fichier, et surtout, envers toi.

Merci encore beaucoup,

amicalement,

Elfi

re,

à noter que tu aurai grandement simplifier le fichier

en mettant Nom et Prénom dans la même cellule

(c'est facile de concatener à la saisie)

Claude

Bonjour le forum,

bonjour Claude,

tes conseils ayant toujours été bénéfiques, je prend en compte ta proposition.

Crois-tu qu'il soit possible de reprendre le programme en faisant une seule colonne Nom-Prénom dans la base?

Pour ce qui est des feuilles "saisie", "Consultation" et "Complément", les collègues préfèrent une case pour le prénom (la dure loi des habitudes inchangeables de l'administration...).

A te relire, avec ma reconnaissance,

amicalement,

Elfi

-- Mar Oct 05, 2010 8:31 am --

Rebonjour,

Claude,

en approfondissant, je découvre que ton code génère une colonne Nom-Prénom (Colonne I) comme tu le soulignais.

Peut-on alors se passer des deux premières (Nom et Prénom) dans la base et générer la colonne Nom-Prénom en premier?

Le premier problème va-t-être alors la référence de cette colonne unique (puisque les titres de mes colonnes font référence à la feuille saisie).

Le second va-t-être de faire fonctionner la macro de Dan (voir sur feuille Base) qui me permettait d'accèder en consultation à partir de la base en cliquant sur le nom.

Chouette de challenge non?

amicalement,

Elfi

Bonjour Elfi,

Pas facile et risqué, de remanier un fichier déjà bien avancé,

Tout démarre de la feuille Saisie, sans changer la structure

simplement en G3 tu mets =C4&" "&C6 et tu efface H3

Dans "Base" la colonne B ne sert plus à rien (tu la laisse en masquée pour ne pas tout décaler)

bien sûr, faut mettre les macros en accord (sur la pointe des pieds !)

--------- Petite remarque sur Sub validerlasaisie ---------

    Application.EnableEvents = False
    Range("c4").Select
        For i = 1 To 9
            If ActiveCell = "" Then
                MsgBox ("La saisie de : " & ActiveCell.Offset(0, -1) & "  n'est pas renseignée !")
                Exit Sub
            End If

Application.EnableEvents = False est à placer après la boucle

car avec le Exit Sub, l' EnableEvents reste à False

ou alors remets-le à True avant le Exit Sub

Il y aurait beaucoup à dire,

Pourquoi ces matricielles dans "Consultation" ?

tu devrais revoir mon fichier du Laos !

mais bon, çà sera pour ton prochain projet

Amicalement

Claude

Hello Claude,

Y a du boulot pour que je digère tout ça. Je te tiens au courant.

Pour ton fichier LAOS, pas de problème, je l'ai gardé précieusement. Il m'aide d'ailleurs trés régulièrement.

Tout ceci étant trés général, ne vaut-il pas mieux que je ferme le fil pour ne pas alourdir le forum. Au fur et à mesure de mes interrogations, je l'ouvrirai à nouveau. Qu'en penses-tu?

Encore merci pour tout,

amicalement,

Elfi

Comme tu veux,

des fois, il vaut mieux repartir à zéro et sur de bonnes base !

à toi de voir

Toujours à ta disposition

Amicalement

Claude

Rebonjour

Voila, j'ai effectué quelques modifs en fonction de tes conseils:

  • La colonne Nom-Prénom est opérationnelle.
  • Du coup, j'ai supprimé mes matricielles en consultation. Un seul élément de référence donc simplement "index"et "equiv".

pour ce qui est de la macro "valider": j'ai pas pu faire ce que tu m'as conseillé. En effet, quand je mets '....true ' avant 'end sub', bizarrement, cela rend la macro de Dan(feuille"base" )inopérente. Je n'ai pas réussi à comprendre pourquoi.

je te joins le nouveau fichier. Dis moi ce que tu en penses

Amicalement,

Elfi

-- Mar Oct 05, 2010 2:44 pm --

Erreur de ma part,

C'est le fichier ci-joint qu'il faut prendre en compte: la colonne Prénom est vide et le nom 'Prénom' est supprimé.

A+

Elfi

Bonjour Elfi, à tous,

Dans le VBE de la feuille "Consultation"

il n'y a plus besoin de formules

Private Sub Worksheet_Change(ByVal Target As Range)
If Flag Then Exit Sub 'voir deconsultationàaccueil
Dim Lg%
    If Not Application.Intersect(Target, Range("c3")) Is Nothing Then
        If Target.Count > 1 Then Exit Sub

        '--- cherche la ligne dans "Base" ---
        On Error Resume Next
        Lg = WorksheetFunction.Match(Target, Sheets("base").Range("Nom"), 0) + 5
        If Lg = 0 Then MsgBox ("n'existe pas !"): Exit Sub
        On Error GoTo 0

        With Sheets("base")
            Cells(9, "c") = .Cells(Lg, "a") 'nom/prénom
            Cells(13, "c") = .Cells(Lg, "c")
            Cells(15, "c") = .Cells(Lg, "d") 'age
            Cells(17, "c") = .Cells(Lg, "e")
            Cells(19, "c") = .Cells(Lg, "f")
            Cells(21, "c") = .Cells(Lg, "g") 'élément6
            Cells(23, "c") = .Cells(Lg, "h")
        End With
    End If
End Sub

pour tester, j'ai virer les lignes du ThisXorkbook

Amicalement

Claude

10plabrousse-base.zip (89.95 Ko)

Bonjour Claude,

j'accuse réception de ton coup de main.

Pour des raisons personnelles difficiles (décès d'un trés proche), je ne pourrai te répondre d'ici longtemps.

Merci pour tout malgré tout,

amicalement,

Elfi

Rechercher des sujets similaires à "remplacer ligne existante deux conditions"