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 :

Boucle imbriquée avec 3 critères à optimiser ?


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2002
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 31
    Points : 24
    Points
    24
    Par défaut Boucle imbriquée avec 3 critères à optimiser ?
    bonjour,
    je dois croiser 2 fichiers excell dans 2onglets et tester la colonne nir en C clonne 3 et debut colonneD en 4 et la colonne quantitée en F en 6.
    j'utilise cette boucle : qui n'est pas performante toutes les lignes égales ne sont pas surlignées
    un problème d'arrondi ?, de Format ?
    d'avance merci pour vos conseils avisés
    cdt
    -----------------------------------------
    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
    Sub ControleVirement()
       Dim sh1 As Worksheet
    Dim sh2 As Worksheet
    Dim NOmecart As Variant
    Dim NomReglement As Variant
    Dim ligne As Range
    Dim j As Integer
    Dim i As Integer
    Dim MONTANTAREPORTER
    Dim r As Range
    Dim s As Range
    Dim DerniereLigne2 As Integer
    Dim DerniereLigne As Integer
       Dim NomDelaFeuille As String
         Dim NomDelaFeuille2 As String
     
     
    'saisie obligatoire
    NomDelaFeuille = InputBox("Entrez le Nom de la Feuille t A Modifier")
       Worksheets(NomDelaFeuille).Activate
        Set r = Range("A1:R2948")
     
       'ON DETERMINE LA DERNIERE LIGNE ACTIVE
       DerniereLigne = ActiveSheet.UsedRange.Row - 1
        DerniereLigne = DerniereLigne + ActiveSheet.UsedRange.Rows.Count
     
            NomDelaFeuille2 = InputBox("Entrez le Nom de la Feuille  A controler")
     
            Application.ScreenUpdating = False
             Worksheets(NomDelaFeuille2).Activate
             Set s = Range("A1:R2948")
             DerniereLigne2 = ActiveSheet.UsedRange.Row - 1
             DerniereLigne2 = DerniereLigne2 + ActiveSheet.UsedRange.Rows.Count
     '-------------------------------------------------------------------------------------------------
     
          Set sh1 = Worksheets(NomDelaFeuille) 'VIREMENT
           Set sh2 = Worksheets(NomDelaFeuille2) 'A controler
     
     
     
     
                For i = 2 To DerniereLigne
     
                    For j = 2 To DerniereLigne2
                    'Je controle la Période
                         If sh1.Cells(i, 4).Value = sh2.Cells(i, 4).Value Then
     
                         'Je controle le Nir et la Quantité Facturée
                                 If sh1.Cells(i, 3).Value = sh2.Cells(j, 3).Value And sh1.Cells(i, 6).Value = sh2.Cells(j, 6).Value Then
                            'je surligne
                                                 sh1.Cells(i, 3).EntireRow.Interior.ColorIndex = 37
                                                  sh2.Cells(j, 3).EntireRow.Interior.ColorIndex = 37
                                                 ' Exit For
     
     
     
     
                                                    ' sh2.Cells(j, 5).Value = sh1.Cells(i, 5).Value
     
                                         Else
     
                               End If
                            End If
     
    Next j
     
        Next i
        MsgBox ("copie terminée")
        Application.ScreenUpdating = True
    Set r = Nothing
     
    End Sub

  2. #2
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 181
    Points : 5 512
    Points
    5 512
    Par défaut
    Bonjour,

    Sans doute une erreur sur la ligne 46 où il faudrait indiquer sh2.Cells(j, 4).Value.

    Cordialement.

  3. #3
    Membre éprouvé Avatar de Alex020181
    Homme Profil pro
    Prestataire informatique développeur d'application Excel, Access, VBA
    Inscrit en
    Juin 2012
    Messages
    568
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Prestataire informatique développeur d'application Excel, Access, VBA

    Informations forums :
    Inscription : Juin 2012
    Messages : 568
    Points : 1 004
    Points
    1 004
    Par défaut
    Bonjour,

    Je t'ai construit un fichier en PJ avec du code plus optimisé.

    Il suffit de reporter les données à tester dans "Feuil1" et "Feuil2" puis de cliquer sur le bouton en "Feuil3".

    Le calcul du nombre de lignes de chacun des onglet est automatisé.

    Teste et dis-nous.
    Fichiers attachés Fichiers attachés
    C'est toujours sympa de savoir si on vous a aidé ou non. Pensez-y

    N'hésitez pas à marquer le sujet comme résolu le cas échéant.

  4. #4
    Membre à l'essai
    Inscrit en
    Juillet 2002
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 31
    Points : 24
    Points
    24
    Par défaut optimisation boucle
    bonjour,
    Merci pour l'intéret porté à ma demande.
    En effet une erreur de concentration, j'ai du mal avec mes acouphenes et le stress.
    Encore merci pourl fichier je vais le tester.
    cordialement

  5. #5
    Membre éprouvé Avatar de Alex020181
    Homme Profil pro
    Prestataire informatique développeur d'application Excel, Access, VBA
    Inscrit en
    Juin 2012
    Messages
    568
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Prestataire informatique développeur d'application Excel, Access, VBA

    Informations forums :
    Inscription : Juin 2012
    Messages : 568
    Points : 1 004
    Points
    1 004
    Par défaut
    OK je reste à l'écoute
    C'est toujours sympa de savoir si on vous a aidé ou non. Pensez-y

    N'hésitez pas à marquer le sujet comme résolu le cas échéant.

  6. #6
    Membre à l'essai
    Inscrit en
    Juillet 2002
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 31
    Points : 24
    Points
    24
    Par défaut test fichier
    Citation Envoyé par Alex020181 Voir le message
    Bonjour,

    Je t'ai construit un fichier en PJ avec du code plus optimisé.

    Il suffit de reporter les données à tester dans "Feuil1" et "Feuil2" puis de cliquer sur le bouton en "Feuil3".

    Le calcul du nombre de lignes de chacun des onglet est automatisé.

    Teste et dis-nous.
    bonjour,
    j'ai du renommer les onglets mais moi je souhaite croiser 2 fichiers(onglets) en controlant 3 colonnes si elles sont exactes je surligne.
    cdlt

  7. #7
    Membre éprouvé Avatar de Alex020181
    Homme Profil pro
    Prestataire informatique développeur d'application Excel, Access, VBA
    Inscrit en
    Juin 2012
    Messages
    568
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Prestataire informatique développeur d'application Excel, Access, VBA

    Informations forums :
    Inscription : Juin 2012
    Messages : 568
    Points : 1 004
    Points
    1 004
    Par défaut
    Citation Envoyé par jeanahmed Voir le message
    je souhaite croiser 2 fichiers(onglets)
    cdlt
    Heu donc croiser des fichiers ou des onglets ? Je ne comprends pas "2 fichiers(onglets)".

    Si je devine tu as un onglet dans un fichier A que tu souhaiterais croiser avec un onglet d'un fichier B. C'est ça ?

    Ensuite tu dis que tu as renommé les onglets de mon fichier exemple. Pas de souci. Le code récupère la liste des noms des onglets à chaque ouverture du formulaire mais j'avais effectivement laissé en "dur" 2 lignes de code avec des noms fixes.
    Hormis le fait que, pour le moment, ce sont 2 onglets dans le même fichier qui sont comparés est-ce que tu as pu vérifier le résultat du code ?
    C'est toujours sympa de savoir si on vous a aidé ou non. Pensez-y

    N'hésitez pas à marquer le sujet comme résolu le cas échéant.

Discussions similaires

  1. Boucle imbriquée avec 2 maps
    Par identifiant_bidon dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 03/07/2010, 23h34
  2. [Smarty] boucles imbriquées avec requêtes SQL, impossible à comprendre
    Par dexxter dans le forum Bibliothèques et frameworks
    Réponses: 9
    Dernier message: 18/05/2007, 23h52
  3. Boucle imbriquée avec for each et while
    Par guen dans le forum Access
    Réponses: 7
    Dernier message: 01/03/2007, 17h36
  4. [Débutant]Boucle imbriquée avec des bornes différentes
    Par Hayato dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 29/08/2005, 16h23
  5. [XSL]boucle imbriquée avec condition
    Par kor dans le forum XSL/XSLT/XPATH
    Réponses: 10
    Dernier message: 11/01/2005, 14h19

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