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 :

Macro stoppe à la 65536e ligne ! [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 23
    Points : 8
    Points
    8
    Par défaut Macro stoppe à la 65536e ligne !
    Bonjour,
    j'utilise EXCEL2010 qui est sensé pouvoir utiliser 1048576 lignes.

    mon fichier comporte environ 120000 lignes.

    j'ai une macro "adaptée" qui traite des doublons mais bizarrement la macro "plante" à la ligne 65536 !

    comment "forcer" excel à continuer ?

    merci de l'aide

    voici mon code où quand la variable ligT atteint la valeur 65536 j'ai une erreur d'exécution '13'

    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
     
    Sub RegroupeLigneS()
     
     
    Worksheets("CONCESSION_COMPIL").Activate
     
        Set d1 = CreateObject("Scripting.Dictionary")
        Set shtoto = Sheets.Add(after:=Sheets(Sheets.Count))
        shtoto.Name = "TEMPO"
        Set f1 = Sheets("CONCESSION_COMPIL")
        Set f2 = Sheets("TEMPO")
     
       ncol = f1.[a1].CurrentRegion.Columns.Count
       nlig = f1.[a1].CurrentRegion.Rows.Count
       d1.CompareMode = vbTextCompare
       For ligne = 1 To nlig
         crit = f1.Cells(ligne, 1) & f1.Cells(ligne, 3) ' critère doublon : colonne1 et colonne 3
         d1(crit) = ""
         ligT = Application.Match(crit, d1.keys, 0)
         For col = 1 To ncol
           If f1.Cells(ligne, col) <> "" Then f2.Cells(ligT, col) = f1.Cells(ligne, col).Text
         Next col
         If f1.Cells(ligne, ncol) <> "" Then f1.Cells(ligne, ncol).Copy f2.Cells(ligT, ncol)
       Next ligne
     
       f1.Delete
       f2.Activate
       ActiveSheet.Name = "CONCESSION_COMPIL"
     
    Set shtoto = Nothing
     End Sub
    bonne journée

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 661
    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 661
    Points : 5 785
    Points
    5 785
    Par défaut
    Bonjour,

    Tu n'as pas déclaré ta variable, et c'est mal.
    Tu laisse VBA choisir a ta place, il a fait le mauvais choix et renvoie une erreur.
    A toi de le corriger.

    ps: mettre le numéro de l'erreur c'est bien, la description c'est mieux, je ne pense pas être le seul à ne pas apprendre les numéros d'erreur par cœur.

    edit: au temps pour moi, je croyais que c'étais un problème de dépassement de capacité.
    J'aimerais bien aller vivre en Théorie, car en Théorie tout se passe bien.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 23
    Points : 8
    Points
    8
    Par défaut
    mon fichier contenant la macro est en ".xlsb" .
    est ce que cela a une incidence ?
    merci

  4. #4
    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
    Bonjour,

    la fonction Match est limitée à 65536 élément d'un Array tout simplement.
    Il me semble en revanche que si on recherche dans un Range la limite n'existe plus

  5. #5
    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
    si ton fichier a la base a été enregistré avec 2003 ou en xls avec 2007 et plus il te l'ouvre emn mode compatibité mais ne peut pas aller plus loin que 65536 ligne
    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

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 23
    Points : 8
    Points
    8
    Par défaut
    Joe,
    en comment je modifie cela stp ?
    merci

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 23
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    si ton fichier a la base a été enregistré avec 2003 ou en xls avec 2007 et plus il te l'ouvre emn mode compatibité mais ne peut pas aller plus loin que 65536 ligne
    2010 dès le début

  8. #8
    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
    C'est une limitation de cette fonction, tu ne peux pas la dépasser

    si tu cherches à nettoyer des doublons ... pourquoi ne pas utiliser l'option "Nettoyer les doublons" (RemoveDuplicates côté VBA) ou un filtre avancé avec export des éléments, en utilisant un critère calculé ?

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 23
    Points : 8
    Points
    8
    Par défaut
    en fait cette partie de la macro cherche les doublons,
    pour chaque doublon trouvé,compare les cellules, compile les cellules dont le contenu est différent
    et puis "supprime" les doublons par recopie.

    donc, un peu plus complexe que :
    ActiveSheet.Range("A2:J" & maDerLigne).RemoveDuplicates Columns:=Array........

  10. #10
    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
    oui autant pour moi joe a raison

    mauvaise nouvelle tu va bien galérer pour moidifier ta recherche avec match sur un range
    en fait c'est tout ton principe a revoir sachant que ton match est appliqué a un dico
    bon courage
    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

  11. #11
    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
    ou tout simplement en remplacant ton dico par une colonne temporaire a la quelle tu aurais appliqué un removeduplicate
    le match serait alors appliqué a cette dite colonne

    je dis ca au plus simple hein
    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

  12. #12
    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
    OU!!!parce que des idées on en a

    une simple varable tableau qui peut aller plus loin et l'alimenter comme un dico
    j'explique
    avant de mettre ta valeur dans le tableau tu fait un countiff
    quand tu fera ton match il n'y en aura toujours q'un

    et vu l'organistation des etapes de ton code c'est celle ci qui conviendrait le mieux
    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

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 23
    Points : 8
    Points
    8
    Par défaut

    comme je ne suis pas fortiche, ça promet quelques nuits blanches à comprendre comment traiter mes 10 colonnes des 120000 lignes.....

  14. #14
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 661
    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 661
    Points : 5 785
    Points
    5 785
    Par défaut
    Si tu peux trier ton fichier, tu pourrais après un tri séparer ton traitement en X bloc de moins de 65536 lignes ( en faisant attention que les doublons ne soient pas dans des blocs différent, d'où le tri)

    Ou alors si tu as moins de 65536 lignes de doublons tu pourrais via un filtre avancé séparé les doublons des non doublons en deux feuilles distinctes, appliquer ton code sur les doublons puis remettre toutes les données ensembles.
    J'aimerais bien aller vivre en Théorie, car en Théorie tout se passe bien.

  15. #15
    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
    en gros lisant ligne par ligne ton code
    tu veux simplement transférer 2 colonnes du sheets 1 vers sheets 2 sans doublons
    les doublons étant considérés par les 2 ocurences de col1/2 dans sheets 1
    c'est bien ca ???
    et tu est limité par le nombre de ligne par match c'est bien ca ?
    et a la fin tu supprime f1 ce qui faciliterait la tache en plus !!!
    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

  16. #16
    Expert éminent sénior
    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
    Points : 18 677
    Points
    18 677
    Par défaut
    Bonjour,

    alors en environ 5 lignes de code juste en utilisant un filtre avancé ! …

    ___________________________________________________________________________________________________________
    Je suis Paris, Egypte, Nigeria, New-York, Mogadicio, Barcelone, London, Manchester, Stockholm, Istanbul, Berlin, Nice, Bruxelles, Charlie, …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  17. #17
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Salut.

    Pourquoi passes-tu par un dico? Application.Match fonctionne très bien sur une plage de 1048576 lignes.

    Il serait intéressant que tu expliques en français ce que tu dois faire (sans termes Excel ou VBA), juste en français, comme si tu ne connaissais pas Excel. Ca pourrait nous aider à t'aiguiller vers une solution pertinente
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  18. #18
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 23
    Points : 8
    Points
    8
    Par défaut
    voilà mon nouveau code :
    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
    Sub RegroupeLig()
     
    Dim derli As Long
    Dim i     As Long
    Dim j     As Long
     
     
    Worksheets("COMPIL").Activate
        Application.DisplayAlerts = False
     
      maDerLigne = Range("A" & Rows.Count).End(xlUp).Row  'donne le n° de la dernière ligne
     
    For i = maDerLigne To 2 Step -1
        If Cells(i, 1) = Cells(i - 1, 1) And Cells(i, 3) = Cells(i - 1, 3) Then
            For j = 5 To 10
                If Cells(i - 1, j) <> "" And Cells(i, j) = "" Then
                    Cells(i - 1, j) = Cells(i - 1, j) + Cells(i, j)
                End If
                If Cells(i - 1, j) = "" And Cells(i, j) <> "" Then
                    Cells(i - 1, j) = Cells(i - 1, j) + Cells(i, j)
                End If
            Next
            Range(Cells(i, 1), Cells(i, 10)).Delete Shift:=xlUp
        End If
    Next
     
        Application.DisplayAlerts = True
     
     End Sub

  19. #19
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Je ne comprends pas l'utilité de tes tests dans la boucle, ni de l'addition à l'intérieur des IF, puisque tu additionnes une cellule non vide avec une cellule vide. Ca vient à passer la valeur de la non-vide dans la vide, non?

    Dans le code suivant, si la condition est rencontrée, Cells(i-1,j) n'a pas été modifiée à la fin du IF...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                If Cells(i - 1, j) <> "" And Cells(i, j) = "" Then
                    Cells(i - 1, j) = Cells(i - 1, j) + Cells(i, j)
    D'où ma demande: Explique stp en français ce que tu as et ce que tu souhaites obtenir.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  20. #20
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 23
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par Pierre Fauconnier Voir le message
    Salut.

    Pourquoi passes-tu par un dico? Application.Match fonctionne très bien sur une plage de 1048576 lignes.

    Il serait intéressant que tu expliques en français ce que tu dois faire (sans termes Excel ou VBA), juste en français, comme si tu ne connaissais pas Excel. Ca pourrait nous aider à t'aiguiller vers une solution pertinente
    en français.... mdr !!

    bon, n'étant pas très fort en vba, j'ai pompé le code ( présenté en début du topic.

    mon problème est le suivant :
    dans mon "fameux" tableau de 120000 lignes sur 10 colonnes, j'ai des doublons "incomplets"
    mes critères pour identifier le doublon sont la colonne 1 et la colonne 3
    ensuite pour les colonnes 5 à 10, pour les doublons ou les triplets... je regarde si des cellules similaires sont remplies ou pas.
    si 1 est remplie et l'autre non, je garde la remplie.

    ex : (voir PJ)

    Nom : Sans titre.jpg
Affichages : 367
Taille : 57,7 Ko

    merci

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. macro recherche et insertion ligne
    Par jul85 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 20/02/2008, 19h45
  2. Une macro à faire sur une ligne précise
    Par JPDU92 dans le forum VBA Word
    Réponses: 5
    Dernier message: 31/01/2008, 12h13
  3. macro pour impression dernière ligne excel
    Par schwoby dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 13/08/2007, 14h33
  4. [Macro excel]selectionner une ligne à partir d'une recherche
    Par heavenly dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 20/04/2007, 16h26
  5. Excel : Macro pour positionnement sur ligne
    Par danielh dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/10/2006, 08h45

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