XL 2016 Copier des lignes si validées dans une nouvelle feuille

FREDNORDISTE

XLDnaute Nouveau
Bonjour
j'ai une feuille contenant toutes les contacts de l'entreprise.
Je souhaite opérer à des filtres selon leurs qualification et ensuite effectuer une selection de celle qui m'interesse en vue de lancer des invitations.
Je souhaite donc resortir un tableau ne contenant que les entreprises ayant été validées.
 
Dernière modification par un modérateur:

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Dans le fichier joint sur 'Feuil1' un tableau filtré sur 'Selection = o' et produit par une requête Power Query (inclus dans votre version excel dans l'onglet 'Données/A partir d'un tableau ou d'une plage').

Lorsque votre sélection change, sélectionnez une cellule du tableau puis cliquez sur 'Données/Actualiser tout' ou faîtes un click-droit puis -> actualiser.

Cordialement
 
Dernière modification par un modérateur:
Bonjour le fil, le forum

@FREDNORDISTE , désolé de vous souhaiter la bienvenue sur Xld comme cela mais votre fichier contient énormément de données sensibles sur des personnes physiques et morales, ce qui contrevient au RGPD, voir article 1.1 de la charte Xld.
En conséquence, je l'ai supprimé ainsi que celui de la réponse de @Roblochon (désolé).
Merci de modifier votre fichier exemple pour en éliminer ces données et de consulter auparavant la charte Xld .

Bien cordialement, @+
 

FREDNORDISTE

XLDnaute Nouveau
Bonjour le fil, le forum

@FREDNORDISTE , désolé de vous souhaiter la bienvenue sur Xld comme cela mais votre fichier contient énormément de données sensibles sur des personnes physiques et morales, ce qui contrevient au RGPD, voir article 1.1 de la charte Xld.
En conséquence, je l'ai supprimé ainsi que celui de la réponse de @Roblochon (désolé).
Merci de modifier votre fichier exemple pour en éliminer ces données et de consulter auparavant la charte Xld .

Bien cordialement, @+
bonjour et merci pour votre alerte en effet, je n'ai pas mesuré le risque. je refais un post avec un fichier expurgé de toute info sensible
bien cdt
 

FREDNORDISTE

XLDnaute Nouveau
donc après avoir nettoyé mon fichier précédent je joins un fichier TEST expurgé de toute info sensible et je réitère ma question ;

  1. Dans la feuille liste EDP!, j'ai un listing de plus de 1000 entrées de contacts
  2. J'ai besoin de sélectionner ponctuellement des entreprises via des filtres (Qualification, Code postal, ville etc...),
    Puis je recopie le contenu de toute la ligne dans une feuille Ent. Sel.! (= entreprises sélectionnées).
    Pour cela j'ai créé dans ma feuille Liste EDP une colonne Sélection avec une liste de choix O / N
    Je souhaite recopier l'intégralité des lignes comportant la valeur O de cette colonne dans la feuille Ent. Sel.!
    L'idée c'est que les lignes s'ajoutent sous celles déjà existantes notamment si j'effectue ma sélection en plusieurs fois.
  3. L'objectif étant d'avoir une liste restreinte de 60 / 90 entreprises maxi, dans ma feuille Ent. Sel.!.
    Je souhaite ajouter 2 colonnes : Contacté (avec un choix de réponse O/N) et Souhaite Répondre (avec un choix O/N)
  4. Je pensais donc faire 2 boutons :
    - le premier pour transférer toutes les lignes ayant la valeur O dans la colonne Sélection.
    - le second pour Dupliquer la feuille Ent. Sel.! en lui donnant un nouveau nom (par exemple celui de l'opération en cours). et en effaçant le contenu de Ent. Sel.! pour l'utiliser pour une nouvelle opération.
Evidemment je suis une bille en VBA, (je bosse avec VBA pour les nuls, mais je balbutie)
J'espère que vous saurez m'aider et m'accompagner dans ce projet.
Bien à vous tous.
 

Pièces jointes

  • Listing Test.xlsx
    354.9 KB · Affichages: 11

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Avant de commencer : ce qui alourdi inutilement un fichier et le fait atteindre la limite des formats possibles : mettre un fond sur toutes les cellules d'une feuille

Si vous ne voulez par voir le quadrillage d'excel, onglet Affichage -> décocher la case 'Cadrillage' tout simplement.
Ne mettez pas de fond coloré non plus sur toute une ligne (entête) si vous n'en avez pas besoin.

Dans le tableau joint je vous propose une solution simple par Power Query (Onglet/Données/A partir d'un tableau ou d'une plage).

pour cela votre tableau source des données a été transformé en tableau structuré. Tuto sur les tableaux structurés

La requête filtre les lignes 'O' de la colonne Sélection. Attention pour PQ 'O' n'est pas 'o'(sensible à la casse mais on pourra éventuellement y remédier s'il y a risque de mauvaise saisie.)

Lorsque vous changez la sélection, faites, sur une cellule du tableau résultat,, un click-droit puis 'Actualiser'.

Par contre dans le tableau de résultats si vous vous voulez conserver les informations des deux colonnes rajoutées (Contactée et Souhaite Répondre) il faut un identifiant unique de ligne sur lequel on pourrait faire un tri (ascendant ou descendant).
Dans le fichier joint j'ai choisit le nom de l'entreprise comme identifiant constant et unique de ligne.


Cordialement
 

Pièces jointes

  • Listing Test.xlsx
    230.3 KB · Affichages: 6

FREDNORDISTE

XLDnaute Nouveau
merci bcp , je ne connais pas du tout l'utilisation de PowerQuery, du coup, j'ignore comment mettre à jour la feuille SEL. ENT. lorsque je valide d'autre entreprise dans la premiere feuille
en outre, je comprends la nécessité d'un identifiant unique par entreprise et du coup je pense qu'il faut inserer une colonne ID avec une numérotation incrémentielle car j'ai des homonymes dans mon listing (nom d'entreprises parfois, nom de contact souvent)
pouvez vous m'expliquer l'usage de P./Q , en attendant je lis votre tuto sur le tableau structuré.
cdt
 

Hasco

XLDnaute Barbatruc
Repose en paix
pouvez vous m'expliquer l'usage de P./Q
Re,

Pour votre requête PQ et comme je le disais précédement :
Lorsque vous changez la sélection, faites, sur une cellule du tableau résultat,, un click-droit puis 'Actualiser
Ou 'Données /Actualiser tout'

Quant à l'usage même de PQ, c'est un vaste domaine. Mais son idée générale est l'importation/Transformation/Exploitation des donnée. Données qui peuvent provenir de nombreuses sources, locales ou web ; intra/extra net, produites dans de nombreux format.

Eventuellement commence par là :

Cordialement
 
Dernière édition:

job75

XLDnaute Barbatruc
Bonsoir FREDNORDISTE, les amis,

Voyez le fichier joint et la macro affectée au bouton :
VB:
Sub Copier()
Dim d As Object, F As Worksheet, F1 As Worksheet, tablo, ncol%, i&, x$, tablo1, ajout(), n&, j%, nn&
Set d = CreateObject("Scripting.Dictionary")
d.CompareMode = vbTextCompare 'la casse est ignorée
Set F = Sheets("Ent. Sel.")
Set F1 = Sheets("Liste EDP")
If F.FilterMode Then F.ShowAllData 'si la feuille est masquée
If F1.FilterMode Then F1.ShowAllData 'si la feuille est masquée
tablo = F.Range("C3:X" & F.Range("D" & F.Rows.Count).End(xlUp).Row)
ncol = UBound(tablo, 2)
For i = 2 To UBound(tablo)
    x = Trim(tablo(i, 2))
    If x <> "" Then d(x) = i 'la ligne est mémorisée
Next i
tablo1 = F1.Range("G3:AC" & F1.Range("I" & F1.Rows.Count).End(xlUp).Row)
ReDim ajout(1 To F.Rows.Count, 1 To ncol)
For i = 2 To UBound(tablo1)
    If UCase(tablo1(i, 1)) = "O" Then
        x = Trim(tablo1(i, 3))
        If d.exists(x) Then
            n = d(x)
            For j = 1 To ncol
                tablo(n, j) = tablo1(i, j + 1)
            Next j
        Else
            nn = nn + 1
            For j = 1 To ncol
                ajout(nn, j) = tablo1(i, j + 1)
            Next j
        End If
    End If
Next i
'---restitution---
n = UBound(tablo)
Application.ScreenUpdating = False
F.[C3].Resize(n, ncol) = tablo
If nn Then
    F.[C3].Offset(n).Resize(nn, ncol) = ajout
    With F.[A3].Offset(n).Resize(nn, 2)
        .Interior.ColorIndex = 6 'jaune
        .Borders.Weight = xlHairline 'bordures
        .Validation.Delete
        .Validation.Add xlValidateList, Formula1:="O,N"
    End With
End If
F.Columns.AutoFit 'ajuste les largeurs
F.Activate
End Sub
La macro est très rapide car elle utilise des tableaux VBA et le Dictionary.

A+
 

Pièces jointes

  • Listing Test(1).xlsm
    239.1 KB · Affichages: 10
Dernière édition:

cathodique

XLDnaute Barbatruc
Bonsoir FREDNORDISTE, les amis,

Voyez le fichier joint et la macro affectée au bouton :
VB:
Sub Copier()
Dim d As Object, F As Worksheet, F1 As Worksheet, tablo, ncol%, i&, x$, tablo1, ajout(), n&, j%, nn&
Set d = CreateObject("Scripting.Dictionary")
d.CompareMode = vbTextCompare 'la casse est ignorée
Set F = Sheets("Ent. Sel.")
Set F1 = Sheets("Liste EDP")
If F.FilterMode Then F.ShowAllData 'si la feuille est masquée
If F1.FilterMode Then F1.ShowAllData 'si la feuille est masquée
tablo = F.Range("C3:X" & F.Range("D" & F.Rows.Count).End(xlUp).Row)
ncol = UBound(tablo, 2)
For i = 2 To UBound(tablo)
    x = Trim(tablo(i, 2))
    If x <> "" Then d(x) = i 'la ligne est mémorisée
Next i
tablo1 = F1.Range("G3:AC" & F1.Range("I" & F1.Rows.Count).End(xlUp).Row)
ReDim ajout(1 To F.Rows.Count, 1 To ncol)
For i = 2 To UBound(tablo1)
    If UCase(tablo1(i, 1)) = "O" Then
        x = Trim(tablo1(i, 3))
        If d.exists(x) Then
            n = d(x)
            For j = 1 To ncol
                tablo(n, j) = tablo1(i, j + 1)
            Next j
        Else
            nn = nn + 1
            For j = 1 To ncol
                ajout(nn, j) = tablo1(i, j + 1)
            Next j
        End If
    End If
Next i
'---restitution---
n = UBound(tablo)
Application.ScreenUpdating = False
F.[C3].Resize(n, ncol) = tablo
If nn Then
    F.[C3].Offset(n).Resize(nn, ncol) = ajout
    With F.[A3].Offset(n).Resize(nn, 2)
        .Interior.ColorIndex = 6 'jaune
        .Borders.Weight = xlHairline 'bordures
        .Validation.Delete
        .Validation.Add xlValidateList, Formula1:="O,N"
    End With
End If
F.Columns.AutoFit 'ajuste les largeurs
F.Activate
End Sub
La macro est très rapide car elle utilise des tableaux VBA et le Dictionary.

A+
Bonjour @FREDNORDISTE ,@soan ,@Roblochon ,@Yeahou , @job75 ;)

@FREDNORDISTE : excuse mon intrusion

@job75: Ayant 6Go de ram, je n'ai pas compris pourquoi j'ai eu ce message
1625284048894.png

sur la ligne suivante
1625284113210.png


Merci pour tes explications. Pour info, je suis sous windows7 64bits, excel2010 32bits avec 6Go de ram.

Bon week-end.
 

Discussions similaires

Statistiques des forums

Discussions
315 147
Messages
2 116 770
Membres
112 857
dernier inscrit
sanogo