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 :

Identifier les doublons dans une base


Sujet :

Macros et VBA Excel

  1. #61
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour joe.levrai

    Tu "visualises" selon toute évidence mille fois mieux, lis mille fois mieux, es mille fois plus réveillé, qu'on ne l'est à Toulon.
    Pardi ! d'autant que COUNTIF est 50 fois plus rapide que Match.

    Amitiés

    PS : tu crois que les Toulonnais vont comprendre le sens exact de l'adjectif "progressif" que tu as fort justement employé ?
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.
      0  1

  2. #62
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    J'ai tellement fait le cochon quand j'ai débuté le VBA, et j'ai tellement mis de temps à le comprendre ce "penser Excel plutôt que vouloir refaire le monde en VBA", que c'est peut-être plus simple pour moi de le voir ainsi.

    Patrick il fait des trucs radicalement différents de mes développements, et c'est peut-être ce qui parfois l'emmène là où je ne penserai pas (à tort ou à raison)

    Ouais, c'est un compliment Patrick, je précise


    Moi aussi je sais faire des citations !

    "Si je fais si bien l'amour aux femmes, c'est que je me suis longtemps entrainé tout seul"
    Woody Allen

      1  0

  3. #63
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    la vous allez dire allélouiilla!!!!
    1. je suis parti du principe que travailler sur les cellules est plus rapide
    2. que ajouter un sheets pour le supprimer après c'est trois fois rien
    3. que modifier dans les cellules du sheets c'est du pipi de chat
    4. que supprimer des ligne dans le sheets c'est une broutille


    bref tout le contraire de ce que j'ai appris

    et la!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! suspense ........


    1. j'ai le cul scotcher au siege de mon bureau
    2. le visage déconfit
    3. le moral dans les chaussette
    4. l'envie de crier je le dis pas c'est pas assez châtier pour le forum


    pour le coup j'ai même adapté la méthode de unparia ( la il est content le m'sieur hein !!!)

    bref
    tout en dépits du bon sens et tenez vous bien ca va vous êtes assis c'est bon .......0.359xx secondes pour 4000 lignes

    c'est a n' y plus rien comprendre

    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
    Sub Macro1()
     
       Dim la_col As New Collection, T As String, c As String, i As Long, DL As Long, x
         x = timer
            Application.ScreenUpdating = False
        Set plage = Sheets(1).Range("A1:E" & Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row)    ' plage a prendre en compte
        plage.Copy
        With Sheets.Add(After:=Sheets(Sheets.Count))
            .Name = "temp"
            .Cells(1).Select
            .Paste
             DL = Range("A" & Rows.Count).End(xlUp).Row
            c = Chr(1)
            For i = 1 To DL
                T = Range("A" & i) & c & Range("B" & i) & c & Range("C" & i) & c & Range("D" & i) & c & Range("E" & i)
                On Error Resume Next
                la_col.Add i, T
                If Err Then Range("A" & i) = ""
            Next
            .Columns("A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
        End With
        tableau = Sheets("temp").Range("A1:E" & Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row)
        x = timer - x
     
        With Sheets(1)
            .Activate
            .Cells(1, 8).Resize(UBound(tableau), plage.Columns.Count) = tableau
        End With
        Application.DisplayAlerts = False
        Sheets("temp").Delete
    MsgBox x & "secondes"
    End Sub
    bon je vais boire un coup moi j'en ai besoins la

    tout ce que j'ai appris avec ces années s'avèrent faux aujourd'hui c'est incroyable
    quand je pense que j'aurais fait ca il y a 3 ans le sablier tournerait encore

    les mises a jour ont fait fort depuis elles n'y sont pas pour rien a mon avis

    il est content unparia la hein !!!!!!!

    allez maintenant défoulez vous ( "je te l'avais dit...., tu n'ecoute pas ...") je suis prêt
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter
      0  1

  4. #64
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    c'est a n' y plus rien comprendre
    1) Pour les Toulonnais, pour eux ...
    2) Allez : continue à te "poser" et tu n 'auras besoin ni d'une collection, ni d'une feuille tremplin ...
    Ah oui : mais bien sûr : sans t'éparpiller, hein ...

    PS : il n'est jamais mauvais d e remettre les pieds sur terre.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.
      0  1

  5. #65
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    sans feuille tremplin ( ni la possibilité d'écrire quoi que se soit sur le sheets qui je te le rappelle est une constante que je me suis fixé) avec /ou sans (collection / countiif / match) , c'est de la magie

    ca.. je fais pas
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter
      0  1

  6. #66
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    1)
    le est une marque. Je te laisse deviner de quoi, c'est la marque.
    2)
    ni la possibilité d'écrire quoi que se soit sur le sheets qui je te le rappelle est une constante que je me suis fixé
    une colonne ajoutée puis enlevée ne modifie rien
    3)
    avec /ou sans (collection / countiif / match
    ne mélange pas tout.
    Il y a deux méthodes efficaces fonctionnant très différemment.
    - celle avec Countif n'a besoin d'aucun tremplin (feuille ou colonne), ni d'aucun membre de l'objet WorksheetFunction
    - celle avec un tremplin (feuille ou colonne) est basée sur la fabrication d'un range et son tri (et on peut s'affranchir de la 1ère de ces deux "matières" de travail)

    Tu as là encore besoin d'un petit dessin ?
    Dur dur, hein ...
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.
      0  1

  7. #67
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    non pas dur dur
    de toute façon j'aime bien demonter /remonter transformer alors je m'amuse avec ca comme un minot et sa boite de legots


    je pene etre parvenu a quelque chose qui pour moi est très satisfaisant

    et c'est de nouveau une fonction universelle avec colonne a adapter dynamique ainsi que la plage

    sub de test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Sub test6()
        Dim plage As Range, col, x, tablo
        x = timer
        Set plage = Sheets(1).Range("A1:E" & Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row)    ' plage a prendre en compte
        col = Array(1, 2, 3, 4, 5)
        tablo = tableau_sans_doublons_X_colonnes2(plage, col)
        x = timer - x
        ActiveSheet.Cells(1, 8).Resize(UBound(tablo), plage.Columns.Count) = tablo
        MsgBox x & "secondes"
        MsgBox UBound(tablo)
    End Sub
    fonction
    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
     
    Function tableau_sans_doublons_X_colonnes2(rng, col)
        Dim la_col As New Collection, T As String, c As String, i As Long, tabl()
        ReDim tabl(rng.Rows.Count, rng.Columns.Count)
        c = Chr(1)
        n = 0
        With rng.Parent
            For i = 1 To .Cells(Rows.Count, col(0)).End(xlUp).Row
                T = "": For co = 0 To UBound(col) - 1: T = T & .Cells(i, col(co)) & c: Next
                On Error Resume Next: la_col.Add i, T
                If Err Then
                Else
                    Err.Clear
                    n = n + 1
                    For co = 1 To rng.Columns.Count: tabl(n - 1, co - 1) = Cells(i, co): Next
                End If
            Next
        End With
        ReDim Preserve tabl(n, plage.Columns.Count)
        tableau_sans_doublons_X_colonnes2 = tabl
    End Function
    je n'ai qu'un seul souci avec et la je comprends vraiment c'est que quand je suis sur un autre sheets ca transcrit pas le tablo alors que j'utilise "activesheet......"

    timer a 0.3xxxx selon le cache

    Nom : demo2.gif
Affichages : 127
Taille : 360,7 Ko
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter
      0  1

  8. #68
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    manquerait pas un "point" sur la ligne 15 de ta fonction, qui fasse qu'en réalité tu remplis ton tableau par du vide, si ton "autre feuille" qui est l'activesheet est totalement vide ?

    et qui signifierait que tout fonctionne bien, et qu'en fait tu injecte simplement un tableau dimensionné mais vide de valeurs ?
      0  0

  9. #69
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    hoh!! purée quel con!!!!
    thank joe

    2d question
    le redim preserve ne fait pas son boulot a la fin pourtant j'ai bien les doublons qui ont sauté
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter
      0  1

  10. #70
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Quel problème exactement ?

    par exemple, ta première dimension n'est pas de taille "n" mais de taille "rng.rows.count" ?


    entre autre hein, y'a deux problèmes qui ont deux causes différentes


    indices :
    remet un On Error Goto 0 quand t'as fini d'alimenter ta collection, tu vas voir le premier problème je pense
    regarde attentivement la portée d'une de tes variables, dont l'étendue a été largement dépassée
      0  0

  11. #71
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    oui au debut je dimensionne avec rows.count

    mais a la fin je redim preserve avec "n" qui est le nombre de lignes valides mais ca ne fonctionne pas ca reste a 4000 donc les derniers vides
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter
      0  1

  12. #72
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    j'ai édité pour te donner des pistes

    si t'en a marre de chercher tu me dis, et je présente les deux soucis

    autre indice : Un Preserve a un inconvénient majeur sur des tableaux à plusieurs dimensions, t'as oublié ?
    le on error goto 0 va te le rappeler
      0  0

  13. #73
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    ya ja mais eu de " onerror goto 0" dans ce model c'est "on error resume next" et il y est toujours

    j'ai même ajouté "err.clear" pour vider le tampon d'erreur dans la partie qui non en erreur
    autrement dit en tampon mémoire je peut avoir que 2 évènements erreur max
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter
      0  1

  14. #74
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    met un on error goto 0 entre ta ligne 18 et 19 svp

    tu verras, fais moi confiance

    moi j'ai confiance en toi, tu vas tout de suite comprendre
      0  0

  15. #75
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Il est vrai que les plages ne manquent pas, à Toulon.
    On en voit partout, même où il n'y en a point.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.
      0  1

  16. #76
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Et j'ajoute qu'on peut préserver la plage, mais pas l'arrière côte située en arrière, dans une autre "dimension"
    Tout du moins, pas dans le pays VBA

    histoire d'illustrer les deux problèmes
      0  0

  17. #77
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    ben non je vois pas sachant que je n'ai jamais utilisé "on error goto 0" dans cet exercice , je ne vois pas ce que tu veux me dire

    j'ai rectifié les tableaux aux redim et dans les variables locales c'est bon
    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
    Function tableau_sans_doublons_X_colonnes2(rng, col)
        Dim la_col As New Collection, T As String, c As String, i As Long, tabl()
        ReDim tabl(rng.Rows.Count, rng.Columns.Count - 1)
        c = Chr(1)
        n = 0
        With rng.Parent
            For i = 1 To .Cells(Rows.Count, col(0)).End(xlUp).Row
                T = "": For co = 0 To UBound(col) - 1: T = T & .Cells(i, col(co)) & c: Next
                On Error Resume Next: la_col.Add i, T
                If Err Then
                Else
                    Err.Clear
                    n = n + 1
                    For co = 1 To rng.Columns.Count: tabl(n - 1, co - 1) = .Cells(i, co): Next
                End If
            Next
        End With
        ReDim Preserve tabl(0 To n, 0 To plage.Columns.Count - 1)
        tableau_sans_doublons_X_colonnes2 = tabl
    End Function
    Nom : Capture.JPG
Affichages : 157
Taille : 288,8 Ko
    j'ai un doute sur la collection qui s'arrête a 256

    oui unparia ok vu plage au lieu de rng mais ca change rien c'est pas redimé avec préservation
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter
      0  1

  18. #78
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    ok, bon ....

    alors ta ligne Redim Preserve tu peux la virer, ton code aura le même comportement si tu ne rectifies pas tes deux soucis.

    tu neutralises les erreurs avec le Resume Next dans ta boucle d'alimentation de la collection
    vu qu'à la fin de ce traitement/boucle, tu ne restaures pas la mise en erreur (Goto 0) ... tu ne vois pas que ton Redim Preserve part en cacahuète !

    Interroge donc à la fin de ta procédure principale ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox UBound(tablo, 1) & " " & UBound(tablo, 2)
    oh mince, je parie que ce sont les tailles initiales que tu as mis en début de fonction ?


    Ben oui !!

    Décortiquons les deux erreurs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ReDim Preserve tabl(0 To n, 0 To plage.Columns.Count - 1)
    1) la portée de ta variable plage étant limitée à la procédure appelante, c'est donc un objet inexistant que tu manipules dans ta fonction. Je parie que tu vas avoir une erreur "objet requis"

    2) Un redim preserve ne saurait s'appliquer à une autre dimension que la dernière. Patrick !! Oh, c'est le basic de la manip' des tableaux

    donc là tu vas sûrement avoir une erreur du style "l'indice n'appartient pas à la sélection"


    Maintenant, peut être que t'aura l'erreur 2 avec l'erreur 1, je te laisse tester ?



    EDIT : d'ailleurs, quel intérêt de redimensionner ta seconde dimension ? ton nombre de colonnes au départ et à l'arrivée sont identiques non ?
    Alors inverse ton tableau, ta première dimension c'est les colonnes, ta seconde c'est les lignes
    là tu pourras Redim Preserve tranquillement tes lignes
    et un petit Transpose (attention aux 65565) quand tu voudras remettre sur ta feuille
      0  0

  19. #79
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Ouais ...
    Dur, dur, hein ...
    Deux choses essentielles (et basiques) t'ont pourtant été indiquées :
    - un rappel sur la portée des variables
    - un rappel sur la seule dimension modifiable en augmentation par Redim Preserve (salut joe.levrai)

    Il est peut-être également temps (toujours basique) d'apprendre ce qu'est la gestion d'erreur. Err.clear ne fait qu'effacer l'erreur et ne "sort" pas de On Error Resume Next

    Allons, allons ..
    Bonne nuit

    EDIT : croisés, joe.levrai ...
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.
      0  1

  20. #80
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    oui pour plage j'avais capter on s'est croisé

    j'ai pris pour abitude de clear les erreurs dans tout mes codes car je fait beaucoup de recup html et au bout d'un moment trop erreurs même métrisés mon excel devient tout blanchatre tu vois ce que je veux dire

    apres pour le redim ouis j'avais oublier que c'était la derniere dimention et qui fallait créer un tableau symétriquement ligne/colonne to colonnes /lignes

    du coup trop emmerdant a cette heure si j'utilise les mots qui vont bien

    alors allez on change de strategie et je redim a la fin nikel et je gagne en core 2 secondes

    taratata

    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
     
    Sub test7()
        Dim plage As Range, col, x, tablo
        x = timer
        Set plage = Sheets(1).Range("A1:E" & Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row)    ' plage a prendre en compte
        col = Array(1, 2, 3, 4, 5)
        tablo = tableau_sans_doublons_X_colonnes3(plage, col)
        x = timer - x
        With ActiveSheet
            .Cells(1, 8).Resize(UBound(tablo), 1) = Application.Transpose(tablo)
            .Columns(8).TextToColumns Destination:=Range("H1"), DataType:=xlDelimited, OtherChar:="|"
        End With
        MsgBox x & "secondes"
        MsgBox UBound(tablo)
    End Sub

    fonction
    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
    Function tableau_sans_doublons_X_colonnes3(rng, col)
        Dim la_col As New Collection, T As String, c As String, i As Long
        ReDim tabl(rng.Rows.Count)
        c = "|"
        n = 0
        With rng.Parent
            For i = 1 To .Cells(Rows.Count, col(0)).End(xlUp).Row
                T = "": For co = 0 To UBound(col): T = T & .Cells(i, col(co)) & c: Next
                On Error Resume Next: la_col.Add i, T
                If Err Then
                Else
                    n = n + 1
                    tabl(n - 1) = T:
                    Err.Clear
                End If
            Next
        End With
        ReDim Preserve tabl(0 To n)
        tableau_sans_doublons_X_colonnes3 = tabl
    End Function
    Nom : demo2.gif
Affichages : 150
Taille : 241,4 Ko
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter
      0  1

Discussion fermée
Cette discussion est résolue.
Page 4 sur 11 PremièrePremière 12345678 ... DernièreDernière

Discussions similaires

  1. Identifier les doublons dans une requete
    Par totor92290 dans le forum IHM
    Réponses: 2
    Dernier message: 27/10/2016, 12h08
  2. Comment réperer les doublons dans une base de données?
    Par Marc31 dans le forum Langage SQL
    Réponses: 9
    Dernier message: 16/07/2015, 16h29
  3. [Débutant] Eviter les doublons dans une base access
    Par gilles_906 dans le forum VB.NET
    Réponses: 24
    Dernier message: 29/08/2011, 16h46
  4. Réponses: 0
    Dernier message: 09/02/2011, 09h13
  5. les images dans une base de données
    Par houhou dans le forum Bases de données
    Réponses: 8
    Dernier message: 22/06/2004, 14h27

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