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 :

Recherche le nombre de lignes d'une feuille Excel


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2014
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2014
    Messages : 66
    Points : 34
    Points
    34
    Par défaut Recherche le nombre de lignes d'une feuille Excel
    j'ai fait une macro qui recherche des contrats dans deux feuilles différentes (SIBO,REJET), la macro marche bien quand j'ai moins de lignes dans chaque feuille c'est à dire 6000 lignes mais si j'augmente le nombre de lignes a 13000 elle ne retrouve pas les contrats communs a ces deux feuilles trouver vous une explication à cela merci d'avance c'est urgent svp voici ma macro:
    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
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
     
     
     
     
    Sub recherche_Contrat()
     
    'Intialisation
    Dim tototi As String
    Dim ORDER_ID() As Double, ORIGIN_AMOUNT() As Double, MNT_NEW()
     
     
    Sheets("REJET").Activate
     
    'Nombre de Lignes (Nb contrats/regets)
    NB_LIGNE_REJET = Range("C165000").End(xlUp).Row
     
    Sheets("SIBO").Activate
     
    'Nombre de Lignes dans l onglet SIBO
    NB_LIGNE_SIBO = Range("C165000").End(xlUp).Row
     
    'Redimesionner les tableaux
    ReDim ORDER_ID(NB_LIGNE_REJET)
    ReDim ORIGIN_AMOUNT(NB_LIGNE_REJET)
    ReDim MNT_NEW(NB_LIGNE_SIBO)
     
     
    Sheets("REJET").Activate
     
    For i = 2 To NB_LIGNE_REJET
     
    'Determination des deux premiers caracteres du numero de contrat
     
    tototi = Mid(Cells(i, 3), 1, 2)
     
    'Verification
     
    If InStr("20,21,25,28,40,41,45,70,71", tototi) Then
     
        'Recuperation du num de contrat et du montent associe dans l onglet REJET
     
        ORDER_ID(i) = Cells(i, 3)
        ORIGIN_AMOUNT(i) = Cells(i, 5)
     
     
    '**** on active la feuille SIBO
     
        Sheets("SIBO").Activate
     
     
        For j = 1 To NB_LIGNE_SIBO
     
            'Tests/comparaisons
     
            If Cells(j, 2) = ORDER_ID(i) Then
     
                If Cells(j, 3) <> ORIGIN_AMOUNT(i) Then
     
                    'Sauvegarde du montant de l onglet SIBO
     
                    MNT_NEW(j) = Cells(j, 3)
     
                    'Si mode de livraison contient le mot: CHRONOPOST
     
                    If InStr(Cells(j, 4), "CHRONOPOST") > 0 Then
     
                        'Ecriture dans l onglet REJET
     
                        Sheets("REJET").Activate
     
                        Cells(i, 8) = MNT_NEW(j) - 10
     
                        'Retour dans l onglet SIBO
     
                        Sheets("SIBO").Activate
     
                    'Si mode de livraison contient le mot: COLISSIMO
     
                    ElseIf InStr(Cells(j, 4), "COLISSIMO") > 0 Then
     
                        'Ecriture dans l onglet REJET
                        Sheets("REJET").Activate
     
                        Cells(i, 8) = MNT_NEW(j) - 5
     
                        'Retour dans l onglet SIBO
     
                        Sheets("SIBO").Activate
     
                    End If
     
                End If
            End If
        Next
     
        Sheets("REJET").Activate
      End If
    Next
     
    MsgBox "Mise à jour terminée!", vbInformation
     
    End Sub

  2. #2
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    Bonjour laminosd,

    L'erreur se situe ici : NB_LIGNE_SIBO = Range("C165000").End(xlUp).Row.
    En effet, tu cherches la dernière ligne de la colonne C alors que ton test sur ton onglet "SIBO" s'effectue sur la colonne B.

    Par contre, je dois t'avouer que j'ai du reprendre l'intégralité de ton code pour comprendre.

    Première chose : n'active pas tes différentes feuilles ! Ceci est source d'erreur.

    Voici un code épuré que je te propose :
    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
    Option Explicit
     
    Sub recherche_Contrat()
     
    'Intialisation
    Dim tototi As String
    'Dim ORDER_ID() As Double, ORIGIN_AMOUNT() As Double, MNT_NEW()
    Dim ORDER_ID As Double, ORIGIN_AMOUNT As Double, MNT_NEW As Double
    Dim i As Integer, j As Integer
    Dim rng_rejet As Range
    Dim rng_sibo As Range
    Dim NB_LIGNE_REJET As Integer, NB_LIGNE_SIBO As Integer
     
    'Nombre de Lignes (Nb contrats/regets)
    NB_LIGNE_REJET = Worksheets("REJET").Columns(3).Find("*", , , , , xlPrevious).Row
     
    'Nombre de Lignes dans l onglet SIBO
    NB_LIGNE_SIBO = Worksheets("SIBO").Columns(2).Find("*", , , , , xlPrevious).Row
     
    'Redimesionner les tableaux
    'ReDim ORDER_ID(1 To NB_LIGNE_REJET)
    'ReDim ORIGIN_AMOUNT(1 To NB_LIGNE_REJET)
    'ReDim MNT_NEW(1 To NB_LIGNE_SIBO)
     
     
    With Worksheets("REJET")
        Set rng_rejet = .Range("C1")
        Set rng_sibo = Worksheets("SIBO").Range("B1")
        For i = 1 To NB_LIGNE_REJET
     
            'Determination des deux premiers caracteres du numero de contrat
            If Len(rng_rejet.Offset(i, 0)) >= 2 Then
                tototi = Left(rng_rejet.Offset(i, 0), 2)
     
                'Verification
                If InStr("20,21,25,28,40,41,45,70,71", tototi) Then
     
                    'Recuperation du num de contrat et du montent associe dans l onglet REJET
                    'Colonne C
                    ORDER_ID = rng_rejet.Offset(i, 0)
                    'Colonne E
                    ORIGIN_AMOUNT = rng_rejet.Offset(i, 2)
     
                    With Worksheets("SIBO")
                        For j = 0 To NB_LIGNE_SIBO - 1
     
                            'Tests/comparaisons
                            'Colonne B
                            If rng_sibo.Offset(j, 0) = ORDER_ID Then
                                'Colonne C
                                If rng_sibo.Offset(j, 1) <> ORIGIN_AMOUNT Then
     
                                    'Sauvegarde du montant de l onglet SIBO
                                    MNT_NEW = rng_sibo.Offset(j, 1)
     
                                    'Si mode de livraison contient le mot: CHRONOPOST
                                    'Colonne D
                                    If InStr(rng_sibo.Offset(j, 2), "CHRONOPOST") Then
                                        'Colonne H
                                        rng_rejet.Offset(i, 5) = MNT_NEW - 10
     
                                    'Si mode de livraison contient le mot: COLISSIMO
                                    'Colonne D
                                    ElseIf InStr(rng_sibo.Offset(j, 2), "COLISSIMO") Then
                                        'Colonne H
                                        rng_rejet.Offset(i, 5) = MNT_NEW - 5
                                    End If
                                End If
                            End If
                        Next j
                    End With
     
                End If
            End If
     
        Next i
    End With
     
    MsgBox "Mise à jour terminée!", vbInformation
     
    End Sub
    Je dois t'avouer que je l'ai testé rapidement.

    Deuxième chose : je ne sais pas trop quoi penser de cette ligne : If InStr("20,21,25,28,40,41,45,70,71", tototi) Then. J'ai mis beaucoup de temps à comprendre l'inversion des String pour ton test. C'est malin mais... il y a peut-être mieux.

    Troisième chose : n’encombre pas la mémoire de ta machine inutilement !
    Tu créés trois tableaux uniquement pour faire des comparaisons sur la dernière valeur insérée. Overwrite des variables, tout simplement avec tes conditions et tes tests afin de ne pas stocker 6000 (13000) fois trois valeurs inutiles !

    N'hésite pas à revenir vers moi pour tout complément.

    Cordialement,
    Kimy

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2014
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2014
    Messages : 66
    Points : 34
    Points
    34
    Par défaut
    Merci pour ta reponse le probleme c'est pas la colonne NB_LIGNE_SIBO = Range("C165000").End(xlUp).Row. j'ai tous mis comme ça et pour la 2 question le code InStr("20,21,25,28,40,41,45,70,71", tototi)

    me sélectionne que les numéros de contrats commençant par 20,21 ainsi de suite

    mon vrai souci c'est qd j'ai plus de 6000 contrats la macro ne fait rien et je demande pourquoi

  4. #4
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    laminosd,

    Je te propose de prendre avec des pincettes tes affirmations du type :
    Citation Envoyé par laminosd Voir le message
    le probleme c'est pas la colonne NB_LIGNE_SIBO = Range("C165000").End(xlUp).Row.
    Je te dis qu'il y a une incohérence après avoir décortiquer ton code entre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'Nombre de Lignes dans l onglet SIBO
    NB_LIGNE_SIBO = Range("C165000").End(xlUp).Row
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            If Cells(j, 2) = ORDER_ID(i) Then
    Maintenant, si tu veux partir sur une autre piste, pas de problème.
    Je n'ai pas le fichier sous les yeux et essaye de t'aider comme je peux... La qualité de ce que tu as codé peut poser soucis. Ta macro fait ce que tu lui demandes de faire, quoi qu'il en soit !

    Bien des choses à redire sur ta réponse. Bref...

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2014
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2014
    Messages : 66
    Points : 34
    Points
    34
    Par défaut EXPLICATION
    RE MERCI pour ton code, j'ai testé ton code comme il est il marche bien aussi pour un petit échantillon ET si par exemple je colle dans l'onglet SIBO 172000 LIGNES ta macro beug elle m'affiche l'erreur (dépassement de capacité) c'est peut être parce que excel ne peut pas dépasser 65000 LIGNES? qu'est ce qu'il faut faire?est ce possible de boucler par milliers c'est à dire 2000 PAR 2000 ?

    je t'envoie mon fichier il s'appelle (Envoie_FIANET.xlsm)j'ai supprimer bcp de lignes ton code se trouve dans le module 3 moi mon vrai code c'est dans TOTO merci bcp
    LE BUT de la macro c'est de n’afficher que les contrats communs des deux feuilles commençant par (20,21,25,28,40,41,45,70,71) dans la colonne H de la feuille REJET

  6. #6
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Citation Envoyé par laminosd Voir le message
    c'est peut être parce que excel ne peut pas dépasser 65000 LIGNES? qu'est ce qu'il faut faire?est ce possible de boucler par milliers c'est à dire 2000 PAR 2000 ?
    La limite des 65536 (si mes souvenirs sont exacts) a été dépassée avec Excel 2007. Mais, je pense, et je le répète, je pense, que pour Excel 2007 et les suivants, la limite de 65536 lignes est maintenue quand le classeur est utilisé en mode compatibilité.

  7. #7
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    Bonjour laminosd, clementmarcotte,

    Citation Envoyé par laminosd Voir le message
    RE MERCI pour ton code, j'ai testé ton code comme il est il marche bien aussi pour un petit échantillon ET si par exemple je colle dans l'onglet SIBO 172000 LIGNES ta macro beug elle m'affiche l'erreur (dépassement de capacité) c'est peut être parce que excel ne peut pas dépasser 65000 LIGNES? qu'est ce qu'il faut faire?est ce possible de boucler par milliers c'est à dire 2000 PAR 2000 ?
    Un "Integer" en VBA est un "Nombre entier de -32'768 à 32'767". Cela signifie que si l'on assigne à un integer une valeur suppérieure ou inférieure aux bornes, alors on aura un dépassement de la capacité, car l'espace mémoire alloué à cette variable ne suffit plus.
    La solution est simple, changer l'assignation de la variable pour la faire passer en Long (Nombre entier de - 2'147'483'648 à 2'147'483'647) ou Double (Nombre à virgule flottante de -1.79769313486232D308 à 1.79769313486232D308).

    Bref, avec ton fichier c'était plus simple.
    Voici :
    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
    82
    83
    84
    85
    86
    Option Explicit
     
    Sub recherche_Contrat()
     
    'Intialisation
    Dim tototi As String
    Dim ORDER_ID As Double, ORIGIN_AMOUNT As Double
    Dim i As Double
    Dim rng_rejet As Range
    Dim rng_sibo As Range
    Dim NB_LIGNE_REJET As Double, NB_LIGNE_SIBO As Double
     
    'Application.Calculation = xlCalculationManual
    'Application.ScreenUpdating = False
     
    'Nombre de Lignes (Nb contrats/regets)
    NB_LIGNE_REJET = Worksheets("REJET").Columns(3).Find("*", , , , , xlPrevious).Row
     
    With Worksheets("REJET")
        Set rng_rejet = .Range("C1")
        'Set rng_sibo = Worksheets("SIBO").Range("B1")
        For i = 1 To NB_LIGNE_REJET
     
            'Determination des deux premiers caracteres du numero de contrat
            If Len(rng_rejet.Offset(i, 0)) >= 2 Then
                tototi = Left(rng_rejet.Offset(i, 0), 2)
     
                'Verification
                If InStr("20,21,25,28,40,41,45,70,71", tototi) Then
     
                    'Recuperation du num de contrat et du montent associe dans l onglet REJET
                    'Colonne C
                    ORDER_ID = rng_rejet.Offset(i, 0)
                    'Colonne E
                    ORIGIN_AMOUNT = rng_rejet.Offset(i, 2)
     
                    Set rng_sibo = recherche(ORDER_ID, ORIGIN_AMOUNT)
     
                    If Not rng_sibo Is Nothing Then
                        If InStr(rng_sibo.Offset(0, 1), "CHRONOPOST") Then
                            'Colonne H
                            rng_rejet.Offset(i, 5) = rng_sibo - 10
     
                        ElseIf InStr(rng_sibo.Offset(0, 1), "COLISSIMO") Then
                            'Colonne H
                            rng_rejet.Offset(i, 5) = rng_sibo - 5
                        End If
                    End If
                End If
            End If
     
        Next i
    End With
     
    'Application.ScreenUpdating = True
    'Application.Calculation = xlCalculationAutomatic
     
    MsgBox "Mise à jour terminée!", vbInformation
     
    End Sub
     
    Public Function recherche(ORDER_ID As Double, ORIGIN_AMOUNT As Double)
    Dim rng As Range
    Dim last As Range
    Dim rech As Range
     
    With Worksheets("SIBO")
    Set last = .Columns(2).Find("*", , , , , xlPrevious)
    Set rng = .Range("B1")
    Do While True
        Set rech = .Range(rng, last).Find(ORDER_ID, LookIn:=xlValues, LookAt:=xlWhole)
        If Not rech Is Nothing Then
            If rech.Offset(0, 1) <> ORIGIN_AMOUNT Then
                Set recherche = rech.Offset(0, 1)
                Exit Function
            Else
                Set rng = rng.Offset(1, 0)
            End If
        Else
            Set recherche = Nothing
            Exit Function
        End If
    Loop
    End With
     
    End Function
    Optimisé, testé et fonctionnel. Si ça ne marche pas chez toi, c'est que tes explications n'étaient pas suffisamment claires pour que je comprenne ton besoin.

    N'hésite pas à revenir vers moi.

    Dernier point :
    Citation Envoyé par clementmarcotte Voir le message
    La limite des 65536 (si mes souvenirs sont exacts) a été dépassée avec Excel 2007. Mais, je pense, et je le répète, je pense, que pour Excel 2007 et les suivants, la limite de 65536 lignes est maintenue quand le classeur est utilisé en mode compatibilité.
    "CTRL" + Flèche du bas vous fais arriver à la 1 048 576ème et dernière ligne de votre classeur Excel.

    Cordialement,
    Kimy

  8. #8
    Membre expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 869
    Points : 3 442
    Points
    3 442
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Effectivement je confirme que :
    ... la limite de 65536 lignes est maintenue quand le classeur est utilisé en mode compatibilité.
    Et c'est pareil pour les colonnes limités à 256

    Donc si tu peux utiliser une version d'Excel 2007 ou supperieur sans causé de problème de comptabilité avec tes collègues ... fais-le.

    sinon il te reste à faire en mémoire tes traitements mais il y a beaucoup de lignes
    ... si par exemple je colle dans l'onglet SIBO 172000 LIGNES ...
    et je ne sais pas si il va bien le gérer.

    A+

    PS : CTRL + Flche du bas : au sein d'un tableau rempli t'emmène en fin de ton tableau, une deux fois t'emmène à la dernière ligne

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2014
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2014
    Messages : 66
    Points : 34
    Points
    34
    Par défaut
    Bjr KIMY Merci pour ton code

    j'ai testé ton code et j'ai bien regardé le contenu je pense mais pas sure dans aucun cas tu active la feuille SIBO la macro elle beug elle m'affiche l'erreur (incompatibilité de type) c'est au niveau de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rng_rejet.Offset(i, 5) = rng_sibo - 5
    je te réexplique mon problème:

    je dois importer deux fichiers dans mes différentes feuilles SIBO ET REJET ces fichiers peuvent être volumineux ou pas ça dépend des mois ,à partir du moment j'ai les données dans ces feuilles je dois faire des tests :
    -je vérifie d'abord si j'ai des même numéros de commandes si oui je compare les montants si égaux je copie le montant de la feuille SIBO dans la colonne H de la feuille REJET
    -si les montants sont différents je regarde le mode de livraison si CHRONOPOST_DELIVERY OU CHRONOPOST_ENT ,le montant de la feuille SIBO est diminué de -10 euros
    -si le mode de livraison est COLLISIMO montant de la feuille SIBO est diminué de -5 euros
    ET si on a les même numéros de commandes et on a d'autres mode de livraison on recopie le montant de la feuille SIBO dans la colonne H de la feuille REJET, ttes les transformations se passent dans la colonne H de la feuille REJET j’espère je suis un p clair merci pour ton aide

  10. #10
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    Bonjour laminosd,

    Citation Envoyé par laminosd Voir le message
    j'ai testé ton code et j'ai bien regardé le contenu je pense mais pas sure dans aucun cas tu active la feuille SIBO la macro elle beug elle m'affiche l'erreur (incompatibilité de type) c'est au niveau de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rng_rejet.Offset(i, 5) = rng_sibo - 5
    Je ne sais pas si tu lis ce que j'écris. Dans mon premier post, je te dis que l'activation des feuilles est à proscrire !
    De plus, si tu regardes un peu PAR TOI MEME, tu comprendrais ce qu'est une incompatibilité de type.

    J'ai testé mon code sur la feuille que tu as envoyé. Ca fonctionne.

    Ce que je pense c'est que tu dois des valeurs qui ne sont pas numérique dans la colonne C de la feuille SIBO.

    Tout est là ! Tu n'as plus qu'a adapter.
    Je te commente le code pour que tu puisses prendre la main dessus :
    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
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    Option Explicit
     
    Sub recherche_Contrat()
     
    'Intialisation des variables
    Dim tototi As String
    Dim ORDER_ID As Double, ORIGIN_AMOUNT As Double
    Dim i As Double
    Dim rng_rejet As Range
    Dim rng_sibo As Range
    Dim NB_LIGNE_REJET As Double, NB_LIGNE_SIBO As Double
     
    'A décommenté pour accélérer la macro
    'Application.Calculation = xlCalculationManual
    'Application.ScreenUpdating = False
     
    'Set à NB_LIGNE_REJET le nombre de ligne qu'on trouve dans la colonne C de la feuille REJET
    NB_LIGNE_REJET = Worksheets("REJET").Columns(3).Find("*", , , , , xlPrevious).Row
     
    'Avec la feuille REJET...
    With Worksheets("REJET")
        'on instancie rng_rejet sur la cellule C1
        Set rng_rejet = .Range("C1")
     
        'et on boucle de i = 1 à NB_LIGNE_REJET
        For i = 1 To NB_LIGNE_REJET
     
            'Si longueur de la chaine dans la cellule de rng_rejet avec un décalage de i ligne(s) est suppérieure ou égale à 2...
            If Len(rng_rejet.Offset(i, 0)) >= 2 Then
     
                '... alors on set la variable tototi sur les deux premiers caractères de gauche
                tototi = Left(rng_rejet.Offset(i, 0), 2)
     
                'Si ces deux caractères sont compris dans la chaine "20,21,25,28,40,41,45,70,71"...
                If InStr("20,21,25,28,40,41,45,70,71", tototi) Then
     
                    '... alors on set l'ID complet de rng_rejet avec un décalage de i ligne(s) dans ORDER_ID (/!\ ORDER_ID est un chiffre numérique)
                    ORDER_ID = rng_rejet.Offset(i, 0)
                    'et on set le montant qui se trouve avec un décalage de deux colonnes dans ORIGIN_AMOUNT.
                    ORIGIN_AMOUNT = rng_rejet.Offset(i, 2)
     
                    'On appelle la fonction personalisée "recherche" (définie plus bas) en passant les variables ORDER_ID et ORIGIN_AMOUNT.
                    'Cette fonction retourne une range qu'on stocke dans rng_sibo.
                    Set rng_sibo = recherche(ORDER_ID, ORIGIN_AMOUNT)
     
                    'Si le retour de la fonction n'est pas "Nothing", cela signifie qu'on a trouvé un montant différent pour un ORDER_ID identique.
                    If Not rng_sibo Is Nothing Then
                        'On vérifie si on a sur la colonne de droite de la cellule remontée par "recherche" le terme "CHRONOPOST".
                        If InStr(rng_sibo.Offset(0, 1), "CHRONOPOST") Then
                            'Si oui, on place dans la cellule rng_rejet décalée de i ligne(s) et 5 colonnes la montant dans rng_sibo - 10.
                            rng_rejet.Offset(i, 5) = rng_sibo.Value - 10
     
                        'Vérification avec "COLISSIMO"
                        ElseIf InStr(rng_sibo.Offset(0, 1), "COLISSIMO") Then
                            'Si oui, on place dans la cellule rng_rejet décalée de i ligne(s) et 5 colonnes la montant dans rng_sibo - 5.
                            rng_rejet.Offset(i, 5) = rng_sibo.Value - 5
                        End If
                    End If
                End If
            End If
     
        Next i
    End With
     
    'A décommenté pour accélérer la macro
    'Application.ScreenUpdating = True
    'Application.Calculation = xlCalculationAutomatic
     
    MsgBox "Mise à jour terminée!", vbInformation
     
    End Sub
     
    'La fonction personnalisée "recherche"
    Public Function recherche(ORDER_ID As Double, ORIGIN_AMOUNT As Double)
    'Initialisations des variables internes à la fonction
    Dim rng As Range
    Dim last As Range
    Dim rech As Range
     
    'Avec la feuille "SIBO"
    With Worksheets("SIBO")
    'On set last sur la dernière cellule non vide de la colonne 2.
    Set last = .Columns(2).Find("*", , , , , xlPrevious)
    'On set rng sur la première cellule de la colonne 2 (B1).
    Set rng = .Range("B1")
     
    'On boucle à l'infini. Mais on sort de la boucle dès qu'une des deux conditions est atteinte :
    '1) On trouve un ID commun à ORDER_ID et un montant différent à ORIGIN_AMOUNT
    '2) On ne trouve plus d'ID commun à ORDER_ID
    Do While True
        'On set rech sur la cellule qui contient ORDER_ID sur la plage de valeur [rng ; last]
        Set rech = .Range(rng, last).Find(ORDER_ID, LookIn:=xlValues, LookAt:=xlWhole)
        'Si on ne trouve pas rien... (si on trouve quelque chose ;) )
        If Not rech Is Nothing Then
            'On vérifie que le montant (décalé d'une colonne - en C) est différent de ORIGIN_AMOUNT
            If rech.Offset(0, 1) <> ORIGIN_AMOUNT Then
                'Si oui, on renvoi la celulle qui contient ce montant différent et on sort de la fonction
                Set recherche = rech.Offset(0, 1)
                Exit Function
            'Si le montant est identique on continue de vérifier s'il n'existe pas un autre ID commun avec un montant différent dans le reste de la colonne B.
            Else
                Set rng = rng.Offset(1, 0)
            End If
        'Si on ne trouve rien...
        Else
            'On renvoie "Nothing" pour dire qu'on a rien trouvé et on sort de la fonction.
            Set recherche = Nothing
            Exit Function
        End If
    Loop
    End With
     
    End Function
    Adapte et c'est gagné !
    Cordialement,
    Kimy

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2014
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2014
    Messages : 66
    Points : 34
    Points
    34
    Par défaut
    Ré kimy desolé pour le derangement j'ai adapté tn code et j'ai enlever les commentaires pour l’accélération de la macro

    j'ai collé 6000 lignes dans ma feuille SIBO j'ai attendu 45mn EST CE NORMAL y'a t-il un moyen de remédier a cela j'ai souvent plus de 10000 lignes merci d'avance

  12. #12
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    laminosd,

    1) Il semblerait que des optimisations soient à faire.
    Questions :
    • Y a t-il une possibilité qu'un numéro de commande soient présent 2 fois dans la feuille SIBO ou REJET ?
    • Est-ce qu'une commande qui a déjà été traitée (avec une valeur dans la colonne H de la feuille REJET) puisse rechanger ?
    • Y a t-il une possibilité que des valeurs soient présentes en colonne H dans la feuille REJET ?
    • Y a t-il d'autre règles fonctionnelles qui permettraient de ne pas traiter certaines lignes ?


    2) Enlever les commentaires n’accélérera pas la macro.
    Par contre décommenter ces lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    'A décommenté pour accélérer la macro
    Application.Calculation = xlCalculationManual
    Application.ScreenUpdating = False
     
    '... code
     
    'A décommenté pour accélérer la macro
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
    te fera gagner du temps.
    Mais je fais le test actuellement et le temps d'attente reste très long.
    De plus, décommenter ces lignes t'oblige à attendre la fin d'exécution de la macro (ou tu n'auras plus de calculs automatiques au sein de ta feuille).

    Quoi qu'il en soit, je suis très surpris de la lenteur en effet...

    Réponds au premier point et je vais voir ce que je peux faire pour accélérer l'ensemble. J'ai déjà quelques idées.
    Je vais prendre le problème à l'envers pour m'assurer de faire le moins de calculs possibles.

    Cordialement,
    Kimy

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2014
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2014
    Messages : 66
    Points : 34
    Points
    34
    Par défaut
    re non y a pas de doublons dans REJET ni dans SIBO on retrouve une seule fois le numéro de commande l'idée c'est juste chercher les numéros communs

  14. #14
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    Bon...

    Je suis à 00:03:05 environ pour 13945 lignes dans REJET et 11536 lignes dans SIBO.
    Je suis surpris du temps que cela prend quand même...
    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
    Option Explicit
     
    Sub recherche_Contrat()
     
    'Intialisation des variables
    Dim i As Long
    Dim rng_rejet As Range
    Dim rng_sibo As Range
    Dim rech As Range
    Dim NB_LIGNE_REJET As Long
     
    Dim VChrono
     
    VChrono = Now()
     
    'A décommenté pour accélérer la macro
    Application.Calculation = xlCalculationManual
    Application.ScreenUpdating = False
     
    'Set à NB_LIGNE_REJET le nombre de ligne qu'on trouve dans la colonne C de la feuille REJET
    NB_LIGNE_REJET = Worksheets("REJET").Columns(3).Find("*", , , , , xlPrevious).Row
     
    'Avec la feuille REJET...
    With Worksheets("REJET")
        'on instancie rng_rejet sur la cellule C1
        Set rng_rejet = .Range("C1")
     
        'et on boucle de i = 1 à NB_LIGNE_REJET
        For i = 1 To NB_LIGNE_REJET
     
            If Len(rng_rejet.Offset(1, 0)) >= 2 Then
     
                If InStr("20,21,25,28,40,41,45,70,71", Left(rng_rejet.Offset(1, 0), 2)) Then
     
                    With Worksheets("SIBO")
     
                        Set rng_sibo = .Columns(2).Find(rng_rejet.Offset(1, 0), LookIn:=xlValues, LookAt:=xlWhole)
                        'Si on ne trouve pas rien... (si on trouve quelque chose ;) )
                        If Not rng_sibo Is Nothing Then
                            'On vérifie que le montant (décalé d'une colonne - en C) est différent de ORIGIN_AMOUNT
                            If rng_sibo.Offset(0, 1) <> rng_rejet.Offset(1, 2) Then
     
                                If rng_sibo.Offset(0, 2) Like "*CHRONOPOST*" Then
                                    'Si oui, on place dans la cellule rng_rejet décalé de i ligne(s) et 5 colonnes la montant dans rng_sibo - 10.
                                    rng_rejet.Offset(1, 5) = rng_sibo.Offset(0, 1).Value - 10
     
                                'Vérification avec "COLISSIMO"
                                ElseIf rng_sibo.Offset(0, 2) Like "*COLISSIMO*" Then
                                    'Si oui, on place dans la cellule rng_rejet décalé de i ligne(s) et 5 colonnes la montant dans rng_sibo - 5.
                                    rng_rejet.Offset(1, 5) = rng_sibo.Offset(0, 1).Value - 5
                                End If
                            End If
                        End If
     
                    End With
     
                End If
            End If
        Set rng_rejet = rng_rejet.Offset(1, 0)
     
        Next i
    End With
     
    'A décommenté pour accélérer la macro
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
     
    VChrono = Now() - VChrono
     
    MsgBox "Mise à jour terminée en " & Format(VChrono, "h:mm:ss") & ".", vbInformation
     
    End Sub
    Dis-moi si tu rencontres des difficultés d'exécution avec ce code.

    Cordialement,
    Kimy

  15. #15
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    En survolant tout ce sujet, je me suis mis à penser que ce serait sans doute plus simple d'importer les deux feuilles de calcul dans Access et de faire quelques requêtes en SQL que de "torturer" un Excel qui n'a jamais été prévu pour être un SGBD.

    Et puis, à la différence d'Excel, Access peut manipuler ses fichiers sans devoir les garder complètement en mémoire. Dès que le fichier de données est moindrement imposant, Access devient plus efficace qu'Excel.

    Mais, je me trompes sûrement, cela fait juste 20 ans que j'utilise Excel...

  16. #16
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Bonjour,

    Je m'immisce...
    L'utilisation de Find en boucle ralentit le système.
    Pour quelques Find, ça roule bien mais dès qu'on utilise en boucle ça va aller de plus en plus lentement.
    J'ai déjà fait le test en affichant les lignes traitées dans la Statusbar et on voyait nettement que le défilement ralentissait au fur et à mesure que la macro avançait.

    J'ai réglé le problème avec 2 tableaux qui contenaient les valeurs des colonnes de mes 2 feuilles en les bouclant
    Voir le discussion ici

  17. #17
    Nouveau membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2014
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2014
    Messages : 66
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par clementmarcotte Voir le message
    Bonjour,

    En survolant tout ce sujet, je me suis mis à penser que ce serait sans doute plus simple d'importer les deux feuilles de calcul dans Access et de faire quelques requêtes en SQL que de "torturer" un Excel qui n'a jamais été prévu pour être un SGBD.

    Et puis, à la différence d'Excel, Access peut manipuler ses fichiers sans devoir les garder complètement en mémoire. Dès que le fichier de données est moindrement imposant, Access devient plus efficace qu'Excel.

    Mais, je me trompes sûrement, cela fait juste 20 ans que j'utilise Excel...
    Bonjour au fait au début je voulais faire avec Access mais sa capacité aussi est de 2Go donc je ne peux pas importer tous mes fichiers ils sont très volumineux mais avec excel j'ai la possibilité de faire des test sur place merci pour ta reponse

  18. #18
    Nouveau membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2014
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2014
    Messages : 66
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par Kimy_Ire Voir le message
    Bon...

    Je suis à 00:03:05 environ pour 13945 lignes dans REJET et 11536 lignes dans SIBO.
    Je suis surpris du temps que cela prend quand même...
    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
    Option Explicit
     
    Sub recherche_Contrat()
     
    'Intialisation des variables
    Dim i As Long
    Dim rng_rejet As Range
    Dim rng_sibo As Range
    Dim rech As Range
    Dim NB_LIGNE_REJET As Long
     
    Dim VChrono
     
    VChrono = Now()
     
    'A décommenté pour accélérer la macro
    Application.Calculation = xlCalculationManual
    Application.ScreenUpdating = False
     
    'Set à NB_LIGNE_REJET le nombre de ligne qu'on trouve dans la colonne C de la feuille REJET
    NB_LIGNE_REJET = Worksheets("REJET").Columns(3).Find("*", , , , , xlPrevious).Row
     
    'Avec la feuille REJET...
    With Worksheets("REJET")
        'on instancie rng_rejet sur la cellule C1
        Set rng_rejet = .Range("C1")
     
        'et on boucle de i = 1 à NB_LIGNE_REJET
        For i = 1 To NB_LIGNE_REJET
     
            If Len(rng_rejet.Offset(1, 0)) >= 2 Then
     
                If InStr("20,21,25,28,40,41,45,70,71", Left(rng_rejet.Offset(1, 0), 2)) Then
     
                    With Worksheets("SIBO")
     
                        Set rng_sibo = .Columns(2).Find(rng_rejet.Offset(1, 0), LookIn:=xlValues, LookAt:=xlWhole)
                        'Si on ne trouve pas rien... (si on trouve quelque chose ;) )
                        If Not rng_sibo Is Nothing Then
                            'On vérifie que le montant (décalé d'une colonne - en C) est différent de ORIGIN_AMOUNT
                            If rng_sibo.Offset(0, 1) <> rng_rejet.Offset(1, 2) Then
     
                                If rng_sibo.Offset(0, 2) Like "*CHRONOPOST*" Then
                                    'Si oui, on place dans la cellule rng_rejet décalé de i ligne(s) et 5 colonnes la montant dans rng_sibo - 10.
                                    rng_rejet.Offset(1, 5) = rng_sibo.Offset(0, 1).Value - 10
     
                                'Vérification avec "COLISSIMO"
                                ElseIf rng_sibo.Offset(0, 2) Like "*COLISSIMO*" Then
                                    'Si oui, on place dans la cellule rng_rejet décalé de i ligne(s) et 5 colonnes la montant dans rng_sibo - 5.
                                    rng_rejet.Offset(1, 5) = rng_sibo.Offset(0, 1).Value - 5
                                End If
                            End If
                        End If
     
                    End With
     
                End If
            End If
        Set rng_rejet = rng_rejet.Offset(1, 0)
     
        Next i
    End With
     
    'A décommenté pour accélérer la macro
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
     
    VChrono = Now() - VChrono
     
    MsgBox "Mise à jour terminée en " & Format(VChrono, "h:mm:ss") & ".", vbInformation
     
    End Sub
    Dis-moi si tu rencontres des difficultés d'exécution avec ce code.

    Cordialement,
    Kimy
    Re kimy franchement tu m'a beaucoup aidé depuis au debut merci encore j'ai testé le code il marche nickel mais je viens de me rendre compte que j'avais oublié une condition dans ma macro tu veras c'est dans TOTO avec ton code je n'arrive pas a l'ajouter il est un p complexe pour moi j'aimerai juste tu m'ajoute cette partie dans ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
                    '-----------Les autres cas-------------
                    'Ecriture dans l onglet REJET
                    Sheets("REJET").Activate
     
                    Cells(i, 8) = MNT_NEW(j)
     
                    'Retour dans l'onglet SIBO
                    Sheets("SIBO").Activate
    stp Merci d'avance je te joint le fichier ton dernier se trouve dans Module1 merci d'avance
    Fichiers attachés Fichiers attachés

  19. #19
    Membre expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 869
    Points : 3 442
    Points
    3 442
    Billets dans le blog
    1
    Par défaut
    Bonsoir,

    Alors tout d'abord je suis tout a fait d'accord avec clementmarcotte ACCESS est fait pour cela.
    tu dis
    Bonjour au fait au début je voulais faire avec Access mais sa capacité aussi est de 2Go donc je ne peux pas importer tous mes fichiers ils sont très volumineux...
    Il est facile de palier a ce petit problème avec les tables liées (externes bien sur) liaison access-access ou access-ODBC donc 2Go c'est pas un problème

    Tu utilises quoi comme données pour craindre cette limitation?

    Si c'est pas indiscret bien sur

  20. #20
    Nouveau membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2014
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2014
    Messages : 66
    Points : 34
    Points
    34
    Par défaut
    Bsr je travaille pour des analystes ils font des extractions de fichiers chaque deux semaines et chaque fichier peut avoir plus de 100 000 LIGNES de fois donc l'idée c'est de rechercher des numéros de commandes communs ds ces fichiers c'est pour laquelle j'ai fais cette macro

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 14/03/2014, 13h39
  2. [XL-2003] Réduire le nombre de ligne d'une feuille excel
    Par sagitarium dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 22/10/2009, 15h47
  3. Nombre de lignes d'une feuille excel
    Par sitpyjo dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/10/2008, 16h36
  4. Calcul du nombre de ligne d'une feuille Excel en VBA
    Par top_eagle dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/06/2007, 17h09
  5. Réponses: 2
    Dernier message: 13/06/2006, 15h46

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