Supprimer et extraction des données

Bonsoir à tous,

je coince sur vb

ci-joint mon fichier avec explications, j'aimerais supprimer des lignes d'une base de donné et ensuite extraire des données sur une feuille

les explications sont plus clair sur le fichier enfin j'espere

Merci de votre aide

19test.xlsx (13.30 Ko)

Bonjour,

A essayer,

Copier ces deux procédures dans un module.

Sub SupprimerE()
Dim Lig As Long
    With Sheets("bdd_formation")
        For Lig = .Cells(.Rows.Count, 5).End(xlUp).Row To 2 Step -1
            If .Cells(Lig, 5) > 720 Then .Rows(Lig).Delete
        Next Lig
    End With
End Sub
Sub RelanceCourrier()
Dim Lig As Long, LigCopie As Long
    With Sheets("bdd_formation")
        For Lig = 2 To .Cells(.Rows.Count, 5).End(xlUp).Row
            If .Cells(Lig, 7) = "Relance Courrier" Then
                LigCopie = LigCopie + 1
                .Range(.Cells(Lig, 1), .Cells(Lig, 5)).Copy Sheets("bdd_publipostages").Range("A" & LigCopie)
            End If
        Next Lig
    End With
End Sub

La 1ère supprime les lignes >720

La2èm Copie les lignes avec Relance courrier sur l'autre feuille.

Tu dis.

Merci pour votre réponse c'est presque ca sauf que souhaite supprimer les valeurs qui sont supérieur à -720 jours et du coup cela ne supprime pas les lignes

Encore merci

Je n'ai pas remarqué le moins.

Suffit de mettre un moins devant 720 dans la procédure.

A+

EDIT : Attend un peu je vérifie

EDIT 2

Me semblais bien..

1- Supprimer les lignes de la colonne E "nb jours restant" dont la valeur est > 720

Et je suppose que tu veux sélectionner ceux qui ont moins de -720, si oui modifie

> 720 par < -720

Sinon, explique exactement

Bonjour

Exercice personnel avec des filtres

Edit : Modification du filtre j'ai mis<-720

C'est ok pour les -720 par contre sur la feuille bdd publipostage j'aimerai car chaque fois que j'exucute la macro cela se cumul ?

mERCI BEAUCOU¨P

La procédure modifiée

Sub RelanceCourrier()
Dim Lig As Long, LigCopie As Long
    LigCopie = Sheets("bdd_publipostages").Cells(Rows.Count, 1).End(xlUp).Row
    With Sheets("bdd_formation")
        For Lig = 2 To .Cells(.Rows.Count, 5).End(xlUp).Row
            If .Cells(Lig, 7) = "Relance Courrier" Then
                LigCopie = LigCopie + 1
                .Range(.Cells(Lig, 1), .Cells(Lig, 5)).Copy Sheets("bdd_publipostages").Range("A" & LigCopie)
            End If
        Next Lig
    End With
End Sub

A+

C'est bon nickel ! merci

j'ai une question concernant l’extraction "relance courrier" je dois me servir de cette feuille comme base de donnée pour un publipostage et voila ce que je n'arrive pas à faire sur ma lettre type :

Il y'a plusieurs noms par client et je souhaite avoir une lettre par client avec la liste des noms concernés donc plusieurs lignes par lettre.

J'ai essayé avec règle quick part mais en vain vous pouvez m'aider sur cela

En tous ca merci de votre aide précieuse

Bounty a écrit :

Il y'a plusieurs noms par client et je souhaite avoir une lettre par client avec la liste des noms concernés donc plusieurs lignes par lettre

Et en plus clair ?

Peut-être Un seul Mail mais tout les noms dans CC ?

EDIT :

Non c'est certainement pas ça.

Tu a OutLook ?

EDIT 2

Ca va, en relisant je pense que j'ai compris.

Mais où inscrire ces noms ?

Ce n'est pas un mail c'est sur une lettre type

La base de donnée est la feuille bdd_publipostage

sur la lettre type il y'a le champ client (Col A)ainsi que le noms des personnes (col E) mais il y'a plusieurs noms par client

L'idée est d'avoir une lettre par client avec les liste des noms sous forme de tableau par exemple.

J'espère avoir été clair merci de ton aide

tu veux ça par exemple en E10, E11, E12.. etc..

Ou bien sur une seule ligne Nom1, Nom2, Nom3 etc..

derniere petite chose lermitte en faite dans la macro "relance courrier" tous fonctionne mais j'aimerai que cela les valeurs et non les formules

Merci beaucoup

En faite je veux les inserer en champs dans ma lettre type

Exemple lettre :

Nom du client

Sous forme de tableau dans la lettre type

Nom 1

Nom 2

Nom 3

Tu as compris ce que je souhaite faire

Je n'ai pas toutes les données pour finaliser..

Sub LettrePP()
Dim Lig As Long, LigCopie As Long
Dim Wk As Worksheet
    Set Wk = Sheets("bdd_publipostages")
    For Lig = 2 To Wk.Cells(Wk.Rows.Count, 1).End(xlUp).Row
        'ICI ACTUALISER ADRESSE, NOM CIENT etc..
        With Sheets("feuil3") 'adapter le nom de la feuille
            LigCopie = 0
            Do
            .Cells(10 + LigCopie, "E") = Wk.Cells(Lig + LigCopie, 2)
            LigCopie = LigCopie + 1
            Loop Until Wk.Cells(Lig + LigCopie, 1) <> Wk.Cells(Lig, 1)
        End With
        Lig = Lig + LigCopie - 1
        'ICI, IMPRIMER
    Next Lig
End Sub

tu dis.

Merci lermitte de ton implication mais mais lettre type est sur word.

C'est sur word dans mon publipostage que doit figurer les noms.


Concernant ce code est tu peux lermitte faire avec un collage des valeurs mais des formules . Merci beaucoup

lermite a écrit :

La procédure modifiée

Sub RelanceCourrier()
Dim Lig As Long, LigCopie As Long
    LigCopie = Sheets("bdd_publipostages").Cells(Rows.Count, 1).End(xlUp).Row
    With Sheets("bdd_formation")
        For Lig = 2 To .Cells(.Rows.Count, 5).End(xlUp).Row
            If .Cells(Lig, 7) = "Relance Courrier" Then
                LigCopie = LigCopie + 1
                .Range(.Cells(Lig, 1), .Cells(Lig, 5)).Copy Sheets("bdd_publipostages").Range("A" & LigCopie)
            End If
        Next Lig
    End With
End Sub

A+

ajouter à la ligne

                .Range(.Cells(Lig, 1), .Cells(Lig, 5)).Copy Sheets("bdd_publipostages").Range("A" & LigCopie)

pour avoir

               .Range(.Cells(Lig, 1), .Cells(Lig, 5)).Copy Sheets("bdd_publipostages").Range("A" & LigCopie)PasteSpecial xlPasteValues

Pour copier d'Excel sur Word c'est une toute autre procédure et tu ferais mieux d'ouvrir un autre poste

A+

Merci lermitte pour ton aide je v poster un autre post.

J'ai coller ta ligne pour le collage spécial mais il me met erreur d'instruction.

lermite a écrit :

ajouter à la ligne

                .Range(.Cells(Lig, 1), .Cells(Lig, 5)).Copy Sheets("bdd_publipostages").Range("A" & LigCopie)

pour avoir

               .Range(.Cells(Lig, 1), .Cells(Lig, 5)).Copy Sheets("bdd_publipostages").Range("A" & LigCopie)PasteSpecial xlPasteValues

Pour copier d'Excel sur Word c'est une toute autre procédure et tu ferais mieux d'ouvrir un autre poste

A+

Manque le point

.Range(.Cells(Lig, 1), .Cells(Lig, 5)).Copy Sheets("bdd_publipostages").Range("A" & LigCopie).PasteSpecial xlPasteValues

désolé lermitte mais cela ne fonctionne toujours pas cela ne doit pas être grand chose. Merci de ton aide

Hum, oui Excel me fait un ti caprice..

            If .Cells(Lig, 7) = "Relance Courrier" Then
                LigCopie = LigCopie + 1
                .Range(.Cells(Lig, 1), .Cells(Lig, 5)).Copy
                Sheets("bdd_publipostages").Range("A" & LigCopie).PasteSpecial , Paste:=xlPasteValues
            End If

En allant à la ligne ça fonctionne

Mais je doute que cela te convienne.

Note, tu doit formater la colonne C en date

Rechercher des sujets similaires à "supprimer extraction donnees"