IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Transfert de NON-doublons dans une feuille


Sujet :

Macros et VBA Excel

  1. #1
    Membre très actif
    Femme Profil pro
    Assistante
    Inscrit en
    Février 2016
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Assistante

    Informations forums :
    Inscription : Février 2016
    Messages : 166
    Par défaut Transfert de NON-doublons dans une feuille
    Bonjour,

    Je possède un Classeur1, Feuil1, en colonne A des Noms, en colonne B des Métiers.
    Je possède également un Classeur2, Feuil2, en colonne F des Noms, en colonne G des Métiers également.

    Entre le Classeur1 et 2, il y a des doublons, c'est à dire des Noms avec les même Métiers. Ce qui est parfait par rapport à mon projet.

    Le Classeur1 évolue, c'est à dire que l'ont rajoute des Noms et des Métiers.

    Du coup, j'aimerais, par le biais d'une Macro VBA, pouvoir cliquer sur un bouton, et que toutes les lignes où NE FIGURE PAS le même Nom et Métier que sur une ligne du Classeur2, que cela se transfert dans le Classeur2.

    Donc il s'agit de comparer 2 classeurs et 2 colonnes.

    Mais là, j'ai beau chercher et essayer de bidouiller des bouts de codes, je suis trop novice

    J'ai trop besoin de votre aide svp

    Merci beaucoup (et j'espère que vous comprendrais mon appel au secours)

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour,

    déjà sans code via le B-A-BA d'Excel en ajoutant une colonne supplémentaire dans chacune des feuilles
    afin de concaténer les colonnes des noms et des métiers …
    Ensuite avec une colonne supplémentaire il est facile avec la fonction de feuille de calculs EQUIV par exemple
    de repérer les concaténations absentes d'une feuille à une autre !
    Après un p'tit filtre, reste juste alors à copier les données filtrées …

    _________________________________________________________________________________________________________
    Je suis Paris, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

  3. #3
    Membre très actif
    Femme Profil pro
    Assistante
    Inscrit en
    Février 2016
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Assistante

    Informations forums :
    Inscription : Février 2016
    Messages : 166
    Par défaut
    Bonjour,

    Désolé de répondre un peu tardivement, je vais essayer cette méthode de repérage, qui est simple, et je n'y avais pas pensé.

    C'est la méthode de transfert de NON-Doublons que j'aimerais approfondir.
    Ce serait cool de pouvoir cliquer sur un bouton (par macro) afin que cela puisse se faire.
    Je vais essayer de rebidouiller, je vous tiens au courant.

    La discussion n'est pas résolue pour le moment.

    Merci, à très vite !

  4. #4
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Bonjour,

    si tu veux du vba tu devrais t'intéresser à cette discussion : Identifier les doublons dans une base

    Dans cette discussion il y ait expliqué une maniére simple à la façon d Excel le repérage de doublons
    Déjà pour appréhender la doublons sur une feuille

    Tu peux aussi t'intéresser aux collections - cf faq

    Voir la méthode de Marc-L en Excel à adapter en vba

    Utilisation de l'enregistreur de macro peut être d'une grande aide au début

    Edit : modif
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  5. #5
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 680
    Par défaut
    Je ne sais pas si c'est traité dans le lien donné par Ryu mais ici: http://www.developpez.net/forums/d16...s/#post8849435 tu as un exemple de copie de doublon en utilisant les filtres avancés avec critère calculé qui facilement être adapté a la copie de non-doublons en modifiant le critère calculé.

  6. #6
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Bonjour,
    voilà un code (bien pointé sur les feuilles et le 2è classeur) à mettre dans le classeur 1
    A faire en mode pas à pas avec F8 et la fenêtre des variables locales (mettre des espions si il le faut) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    Sub SansDoublons()
    Const Entete = 1: Const Decal = 2
        Dim NomCl As String, Feuille As String, DL2 As Long, NbColC2 As Integer, Rng As Range
        Dim DL1 As Long, NbColC1 As Integer, ThWb_Rng As Range, Col As String, Crit As Integer
     
    Application.ScreenUpdating = False
        With Workbooks("Classeur2").Sheets("Feuil1") 'ThisWorkbook.Sheets("Feuil2")
            NomCl = .Parent.Name: Feuille = .Name
     
            DL2 = .Cells(Rows.Count, 6).End(xlUp).Row: NbColC2 = .UsedRange.Columns.Count
     
            Set Rng = .Range(.Cells(Entete + 1, NbColC2 + Decal), .Cells(DL2, NbColC2 + Decal))
                Rng.Formula = "=F" & Entete + 1 & "&""_""&G" & Entete + 1
        End With
     
        With ThisWorkbook.Sheets("Feuil1")
            DL1 = .Cells(Rows.Count, 1).End(xlUp).Row: NbColC1 = .UsedRange.Columns.Count
            Crit = NbColC1 + Decal + 1
     
            Set ThWb_Rng = .Range(.Cells(Entete + 1, NbColC1 + Decal), .Cells(DL1, NbColC1 + Decal))
            ThWb_Rng.Formula = "=A" & Entete + 1 & "&""_""&B" & Entete + 1
                Col = Split(ThWb_Rng.Address, "$")(1)
     
            ThWb_Rng.Offset(, 1).Formula = "=MATCH(" & Col & Entete + 1 & ",[" & NomCl & "]" & Feuille & "!" & Rng.Address & ",0)"
     
            If Application.CountIf(ThWb_Rng.Offset(, 1), "#N/A") > 0 Then
                .UsedRange.AutoFilter Field:=Crit, Criteria1:="#N/A"
                .Range("A" & Entete + 1 & ":B" & DL1).SpecialCells(xlCellTypeVisible).Copy _
                    Destination:=Rng.Resize(1).Offset(Rng.Rows.Count, 6 - NbColC2 - Decal)
                If .AutoFilterMode Then .Cells.AutoFilter
            Else
                MsgBox "Aucun champs uniques à ajouter"
            End If
            ThWb_Rng.Resize(, 2).Clear
        End With
        Rng.Clear: Set Rng = Nothing: Set ThWb_Rng = Nothing
    Application.ScreenUpdating = True
     
    End Sub
    Edit : ici les 2 classeurs doivent être ouverts
    Il reprend le principe expliqué par Marc-L en post 2
    J'ai essayé de faire en sorte que le code s'adapte automatiquement aux données

    Edit 2 : Mea culpa - la fatigue et le codage ne pouvant faire bon ménage parfois je me suis aperçu en ré-testant mon code, des dysfonctionnements
    je l'ai donc modifié (dans ce post) - si vous voyez un pbm faites le moi savoir svp - merci
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  7. #7
    Membre très actif
    Femme Profil pro
    Assistante
    Inscrit en
    Février 2016
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Assistante

    Informations forums :
    Inscription : Février 2016
    Messages : 166
    Par défaut
    Bonjour,

    Whaou trop fort RyuAutodidacte !

    Avant de passer la discussion en résolu, je vais adapter la macro à mon projet entier.

    Mais rien que de l'avoir testée, ça fonctionne super bien !

    Génial, un grand merci, je reviens vers vous dans quelques temps pour vous tenir au courant.

    A plus tard !

    Et merci à tous.

  8. #8
    Membre très actif
    Femme Profil pro
    Assistante
    Inscrit en
    Février 2016
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Assistante

    Informations forums :
    Inscription : Février 2016
    Messages : 166
    Par défaut
    Bonjour,

    Comment adapter le code avec d'autres colonnes à prendre en compte ?
    Ci-dessous mes nouvelles colonnes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
            Set Rng = .Range(.Cells(Entete + 1, NbColC2 + Decal), .Cells(DL2, NbColC2 + Decal))
                Rng.Formula = "=H" & Entete + 1 & "&""_""&D" & Entete + 1
     
       ' F est devenu H, et G est devenu D
     
     
            Set ThWb_Rng = .Range(.Cells(Entete + 1, NbColC1 + Decal), .Cells(DL1, NbColC1 + Decal))
            ThWb_Rng.Formula = "=B" & Entete + 1 & "&""_""&F" & Entete + 1
                Col = Split(ThWb_Rng.Address, "$")(1)
     
       ' A est devenu B, et B est devenu F

    A savoir que dans le Classeur1, la dernière colonne où il y a des valeurs est la "AK"

    Dans le Classeur2, la dernière colonne avec des valeurs est la "T"

    Merci

  9. #9
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Bonjour,


    F est devenu H, et G est devenu D

    A est devenu B, et B est devenu F
    Déjà vérifie bien que l'ordre des colonnes correspondent bien entre les 2 Classeurs

    As tu utilisé le pas à pas avec F8 et regardé ce qui se passe dans les classeur au fur et à mesure que tu avances dans le code ?
    Ce code c'est un peu un code didactique, il permet de voir ce que tu pourrais faire manuellement (sans VBA) et
    inversement ce que tu peux faire manuellement et comment l'intégrer en vba
    => c'est la raison au début quand je t'ai présenté le code d'en faire une analyse avec l'aide de la fenêtre des variables locales (voir aussi ce qui se passe dans les classeurs …)

    Maintenant si tu veux ajouter des colonnes à concaténer, il suffit de modifier les formules de concaténations dans le code comme tu le ferais manuellement
    (une formule pour le classeur1 et une formule pour le classeur2)

    Exemple, prenons un fichier vierge avec les valeurs de A à F

    A B C D E F
    A_C_E

    Le résultat de la concaténation de la colonne A, C et E avec la formule (manuellement) en B2 sera :
    Si on reprend le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Rng.Formula = "=F" & Entete + 1 & "&""_""&G" & Entete + 1
    on voit que la formule est mise entre guillemets sauf la partie avec des variables (Entete + 1),
    et quand dans la formule on doit mettre du texte comme "_" en vba on doit doublet les guillemets

    donc maintenant essaie avec le fichier vierge de faire le code pour que la formule correspondent en vba :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub test()
       Range("B2").Formula = ici tu mets la formule ' tu dois avoir la formule qui s'inscrit en B2 lorque tu actionnes le code
    End Sub
    voilà à toi de jouer
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  10. #10
    Membre très actif
    Femme Profil pro
    Assistante
    Inscrit en
    Février 2016
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Assistante

    Informations forums :
    Inscription : Février 2016
    Messages : 166
    Par défaut
    Re,

    En fait, je me suis très mal exprimée .... :/
    Dsl

    La concaténation entre les 2 classeurs fonctionne très bien, le pas à pas détaillé m'a montré comment fonctionner la macro, c'est parfait.

    Mais en fait, mon réel problème, c'est au niveau du transfert des valeurs entre le Classeur1 et le Classeur2.

    J'ai amélioré mes tableaux, il ne s'agit plus des colonnes F et G du 1er Classeur, ni de A et B du 2ème, mais de : H et D du 1er Classeur et de B et F du 2ème.

    Comment dire, une fois que la macro a trouvé les Non-doublons, que les valeurs de la colonne F du 1er classeur doivent être collées en colonne D du 2ème classeur, et que les valeurs de la colonne B du 1er classeur doivent être collées en colonne H du 2ème classeur ?

    Je sais je suis chiante ...

    Merci

  11. #11
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Bonjour,
    Citation Envoyé par Mél3790 Voir le message
    La concaténation entre les 2 classeurs fonctionne très bien, le pas à pas détaillé m'a montré comment fonctionner la macro, c'est parfait.

    Mais en fait, mon réel problème, c'est au niveau du transfert des valeurs entre le Classeur1 et le Classeur2.
    Si tu as compris comment fonctionne la macro en pas à pas, pourquoi est ce un problème ?


    Citation Envoyé par Mél3790 Voir le message
    J'ai amélioré mes tableaux, il ne s'agit plus des colonnes F et G du 1er Classeur, ni de A et B du 2ème, mais de : H et D du 1er Classeur et de B et F du 2ème.
    Est ce vraiment une amélioration si cela peu compliqué la gestion des données ? (Aucun jugement de ma part)


    Citation Envoyé par Mél3790 Voir le message
    Comment dire, une fois que la macro a trouvé les Non-doublons, que les valeurs de la colonne F du 1er classeur doivent être collées en colonne D du 2ème classeur, et que les valeurs de la colonne B du 1er classeur doivent être collées en colonne H du 2ème classeur ?
    La finalisation pour copier ou pas (si non doublons trouvés), se trouve vers la fin de mon code,
    entre le if … end if
    Refait le pas à pas et regarde bien ce qu'il se passe pour en conclure ce que tu doit faire par la suite.

    J'attends ton retour
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  12. #12
    Membre très actif
    Femme Profil pro
    Assistante
    Inscrit en
    Février 2016
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Assistante

    Informations forums :
    Inscription : Février 2016
    Messages : 166
    Par défaut
    Re ,

    Donc j'ai trouvé comment procéder pour recopier dans le 2ème classeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    If Application.CountIf(ThWb_Rng.Offset(, 1), "#N/A") > 0 Then
                .UsedRange.AutoFilter Field:=Crit, Criteria1:="#N/A"
                '.ListObjects("Tableau2").Range.AutoFilter Field:=Crit, Criteria1:="#N/A"
     
                .Range("B" & Entete + 1 & ":B" & DL1).SpecialCells(xlCellTypeVisible).Copy _
                    Destination:=Rng.Resize(1).Offset(Rng.Rows.Count, 8 - NbColC2 - Decal)
     
                .Range("F" & Entete + 1 & ":F" & DL1).SpecialCells(xlCellTypeVisible).Copy _
                    Destination:=Rng.Resize(1).Offset(Rng.Rows.Count, 4 - NbColC2 - Decal)
    end if
    En y allant colonne par colonne.

    Donc ça Ok.



    Dernier problème :

    J'ai renommé mon Classeur2 qui est maintenant : Fichier 2 Du Personnel 2017

    La macro ne veut pas du nouveau nom de mon classeur, ou du moins des espaces.

    Ca surligne au jaune cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThWb_Rng.Offset(, 1).Formula = "=MATCH(" & Col & Entete + 1 & ",[" & NomCl & "]" & Feuille & "!" & Rng.Address & ",0)"
    J'ai essayé de renommer mon classeur comme ceci : Fichier2DuPersonnel2017, et là tout fonctionne bien.

    Je ne comprend pas.

  13. #13
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    hi,

    Pas en mesure de tester là,
    en ligne 7 et 8 de mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       With Workbooks("Classeur2").Sheets("Feuil1") 'ThisWorkbook.Sheets("Feuil2")
            NomCl = .Parent.Name … …
    … …
    renomme "Classeur2" par le nom que tu veux et rajoute l'extension de ton fichier (ex : mon nouveau Classeur.xlsx - l'extension qui correspond bien sur)
    dis moi ce que cela donne
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  14. #14
    Membre très actif
    Femme Profil pro
    Assistante
    Inscrit en
    Février 2016
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Assistante

    Informations forums :
    Inscription : Février 2016
    Messages : 166
    Par défaut
    Avec l'extension de ce fichier(.xlsx), le problème persiste.

    Trop bizarre !

  15. #15
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Remet ton code en en en entier stp
    Là je suis pas devant un ordi, si je vois qq ch je te le dis, sinon je regarderais tranquillement ce soir
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  16. #16
    Membre très actif
    Femme Profil pro
    Assistante
    Inscrit en
    Février 2016
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Assistante

    Informations forums :
    Inscription : Février 2016
    Messages : 166
    Par défaut
    D'accord, merci beaucoup pour ton aide. On va y arriver, on y est presque !

    Voici le code en entier que j'ai ajusté pour mes besoins :
    (Au départ je copie le tableau pour copier les valeurs dans une autre feuille, car c'est plus simple pour moi).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    Sub SansDoublons()
    Const Entete = 1: Const Decal = 1
    'Const Entete2 = 1: Const Decal2 = 1
        Dim NomCl As String, Feuille As String, DL2 As Long, NbColC2 As Integer, Rng As Range
        Dim DL1 As Long, NbColC1 As Integer, ThWb_Rng As Range, Col As String, Crit As Integer
     
     
    Application.ScreenUpdating = False
     
     
     
        Range("Tableau2[#All]").Select
        Selection.Copy
        Sheets("Actualisation du PDF°").Select
     
        Cells.Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
     
        Sheets("Actualisation du PDF°").Activate
        Range("a1").Select
     
     
     
        With Workbooks("Fichier 2 Du Personnel 2017").Sheets("Personnel") 'ThisWorkbook.Sheets("Feuil2")
            NomCl = .Parent.Name: Feuille = .Name
     
            DL2 = .Cells(Rows.Count, 6).End(xlUp).Row: NbColC2 = .UsedRange.Columns.Count
     
            Set Rng = .Range(.Cells(Entete + 1, NbColC2 + Decal), .Cells(DL2, NbColC2 + Decal))
                Rng.Formula = "=D" & Entete + 1 & "&""_""&H" & Entete + 1
        End With
     
        With ThisWorkbook.Sheets("Actualisation du PDF°")
            DL1 = .Cells(Rows.Count, 1).End(xlUp).Row: NbColC1 = .UsedRange.Columns.Count
            Crit = NbColC1 + Decal + 1
     
     
            Set ThWb_Rng = .Range(.Cells(Entete + 1, NbColC1 + Decal), .Cells(DL1, NbColC1 + Decal))
            ThWb_Rng.Formula = "=F" & Entete + 1 & "&""_""&B" & Entete + 1
                Col = Split(ThWb_Rng.Address, "$")(1)
     
            ThWb_Rng.Offset(, 1).Formula = "=MATCH(" & Col & Entete + 1 & ",[" & NomCl & "]" & Feuille & "!" & Rng.Address & ",0)"
     
     
     
            If Application.CountIf(ThWb_Rng.Offset(, 1), "#N/A") > 0 Then
                .UsedRange.AutoFilter Field:=Crit, Criteria1:="#N/A"
                '.ListObjects("Tableau2").Range.AutoFilter Field:=Crit, Criteria1:="#N/A"
     
                .Range("B" & Entete + 1 & ":B" & DL1).SpecialCells(xlCellTypeVisible).Copy _
                    Destination:=Rng.Resize(1).Offset(Rng.Rows.Count, 8 - NbColC2 - Decal)
     
                .Range("F" & Entete + 1 & ":F" & DL1).SpecialCells(xlCellTypeVisible).Copy _
                    Destination:=Rng.Resize(1).Offset(Rng.Rows.Count, 4 - NbColC2 - Decal)
     
                .Range("C" & Entete + 1 & ":C" & DL1).SpecialCells(xlCellTypeVisible).Copy _
                    Destination:=Rng.Resize(1).Offset(Rng.Rows.Count, 5 - NbColC2 - Decal)
     
                .Range("D" & Entete + 1 & ":D" & DL1).SpecialCells(xlCellTypeVisible).Copy _
                    Destination:=Rng.Resize(1).Offset(Rng.Rows.Count, 6 - NbColC2 - Decal)
     
                .Range("E" & Entete + 1 & ":E" & DL1).SpecialCells(xlCellTypeVisible).Copy _
                    Destination:=Rng.Resize(1).Offset(Rng.Rows.Count, 7 - NbColC2 - Decal)
     
                If .AutoFilterMode Then .Cells.AutoFilter
            Else
                MsgBox "Aucun champs uniques à ajouter"
            End If
            ThWb_Rng.Resize(, 2).Clear
     
     
        End With
        Rng.Clear: Set Rng = Nothing: Set ThWb_Rng = Nothing
     
     
    Application.ScreenUpdating = True
     
     
     
    End Sub

    Merci beaucoup.

  17. #17
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Bonjour,

    j'ai trouvé
    je me suis rappeler d'un code de @Marc-L sur la vérification de l'existence d'une feuille : ICI
    avec une mise à jour pour les espaces dans le nom de la feuille, donc j'ai comparé, et il me manquait un signe à 2 endroits : "'"

    donc écrire la ligne comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            ThWb_Rng.Offset(, 1).Formula = "=MATCH(" & Col & Entete + 1 & ",'[" & NomCl & "]" & Feuille & "'!" & Rng.Address & ",0)"
    PS : il est très conseillé d'éviter les Select et Selection, cela ralentit le code et alourdit le codage
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  18. #18
    Membre très actif
    Femme Profil pro
    Assistante
    Inscrit en
    Février 2016
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Assistante

    Informations forums :
    Inscription : Février 2016
    Messages : 166
    Par défaut
    Super ! trop bien, ça fonctionne à merveille !

    Trop contente, merci beaucoup.

    En ce qui concerne mes select, je sais bien que ce n'est pas top, mais je ne sais pas faire autrement, je suis loin d'être une pro en VBA ...

    Merci infiniment de m'avoir aidée jusqu'au bout.

  19. #19
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Re
    Pourtant ce n'est pas difficile une fois compris
    Un exemple simple :
    Je veux que A2 soit égal à A1 :
    Selon les conditions plusieurs possibilités (que je te laisse découvrir par toi même)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A2") = Range("A1")
    Ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A2").value = Range("A1").value
    Ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("feuil1").Range("A2").value = Sheets("feuil2").Range("A1").value
    Il y a aussi l'utilisation de Copy, etc…
    Tu vois, ni de Select, ni de Selection
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  20. #20
    Membre très actif
    Femme Profil pro
    Assistante
    Inscrit en
    Février 2016
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Assistante

    Informations forums :
    Inscription : Février 2016
    Messages : 166
    Par défaut
    D'accord, merci beaucoup, je vais essayé de m'améliorer de ce côté.

    A plus tard

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Distinguer le nombre de plages non contiguës dans une feuille
    Par Philippe Tulliez dans le forum Macros et VBA Excel
    Réponses: 85
    Dernier message: 01/04/2015, 20h45
  2. test sur une checkbox dans une feuille non active
    Par diude54 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 14/08/2009, 22h29
  3. Renseigner une liste sans doublon dans une feuille ou dans un userform
    Par ouskel'n'or dans le forum Macros et VBA Excel
    Réponses: 19
    Dernier message: 26/01/2009, 14h54
  4. ecrire dans une feuille non active d'excel
    Par baboo50 dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 08/08/2007, 11h37
  5. [VBA-E]trie(suppression de doublons) dans une feuille excel
    Par TANIE dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 03/08/2006, 13h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo