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 :

Help sur une boucle


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2010
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 71
    Par défaut Help sur une boucle
    Bonjour à tous,
    J'ai un petit soucis concernant une macro que je viens d'écrire...
    J'ai un onglet dans un fichier (que j'ai nommé A) que je dois mettre à jour en début de soirée avec un autre fichier (B) qui possède exactement la mm structure mais pas les mm données. Le but de ma macro est de mettre à jour deux-trois "ranges" que j'ai établis. La macro appelle donc le fichier en question et commence à mettre à jour en fonction d'une colonne contenant des codes.

    Le pb que je rencontre est le suivant:

    J'aimerais que la macro identifie quelle(s) ligne(s) a/ont été ajouté(s) pendant la journée et qu'elle le mette à jour sur mon fichier source. Pour le mnt, j'ai fait deux boucles: une qui sur les codes du fichier source (A), et une autre sur les codes du fichier de la journée (B). Un IF apparait alors pour permettre l'identification:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If A.cells(i,1).value <> B.cells(j,1).value Then
    Insert row  etc....
    Next j
    Next j

    Le pb est que la ligne que j'insère se créer à l'infini...

    Je me suis trompé dans la boucle mais je ne sais pas ou..any idea?

    Merci d'avance

  2. #2
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonsoir.

    Juste une idée : tu compares une info A.Cells(i,1) avec B.Cells(j,1). Si différent tu insères un ligne. Bien, mais où? Si c'est avant la ligne i de A ou la ligne j de B, alors pb, car i devient i+1 ou bien j devient j+1, l'une ou l'autre étant la prochaine valeur d'un compteur de boucle?

    Cordialement,

    PGZ

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2010
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 71
    Par défaut
    ah ok je vois...je pensais pas que la macro prendrait en compte la nouvelle ligne. En effet, c'est une ligne que j'ajoute sur A...pour être plus précis, je copie la ligne existante en B dans A.

    Merci bcp, je vais aller modifier tt ceci et je te ferais un retour

  4. #4
    Membre confirmé
    Inscrit en
    Décembre 2010
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 71
    Par défaut
    Alors j'ai essayé de modifié le code, mais je rencontre un nvo pb...la macro boucle que sur le j et pas sur le i...du coup cela créé un decalage...voici mon code...je suis encore novice donc pardon pr les abérations si il y en a:

    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
     
    Set wB = ThisWorkbook
    Set wsB = wB.Worksheets("A")
     
    Set wb1 = ActiveWorkbook
    Set wssB = wb1.Worksheets("A")
     
     
    FileName = Application.GetOpenFilename()
    Workbooks.Open FileName:=FileName
    MSG = MsgBox("Avez-vous ouvert le fichier ", vbYesNo)
    If MSG = "7" Then Workbooks(ActiveWorkbook.Name).Close
     
     
    CodeA = wsB.Range("code").Column 
    CodeA2 = wssB.Range("code").Column
     
    nbre = wsB.Cells(Rows.Count, CodeA).End(xlUp).Row    
    nbre2 = wssB.Cells(Rows.Count, CodeA2).End(xlUp).Row
     
     
     
    wsB.Activate
     
     
    For i = wsB.Range("code").Row + 2  To nbre  Step 1
    For j = wssB.Range("code").Row + 2 To nbre2 Step 1
     
     
            If wsB.Cells(i, 3).Value <> wssB.Cells(j, 3).Value Then
     
                wssB.Activate
                Application.Run "BLPLinkReset"
                wssB.Cells(j, 3).Row.Select
                Application.CutCopyMode = False
                Selection.Copy
                wsB.Activate
                Application.Run "BLPLinkReset"
                wsB.Cells(i, 3).Row.Select
                Selection.Insert Shift:=xlDown
            End If
    Next j
    Next i

  5. #5
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Essaies ceci
    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
    Sub test()
    Dim wbA As Workbook, wbB As Workbook
    Dim ShA As Worksheet, shB As Worksheet
    Dim nbligA As Long, nbligB As Long, i As Long
    Dim fileB As Variant
    Dim c As Range
     
    Application.ScreenUpdating = False
    Set wbA = ThisWorkbook
    Set ShA = wbA.Worksheets("A")
    nbligA = ShA.Cells(ShA.Rows.Count, "C").End(xlUp).Row
     
    fileB = Application.GetOpenFilename()
    If fileB <> False Then
       Set wbB = Workbooks.Open(fileB)
       On Error GoTo Erreur
       Set shB = wbB.Worksheets("A")
       nbligB = shB.Cells(shB.Rows.Count, "C").End(xlUp).Row
       For i = 2 To nbligB
          Set c = ShA.Range("C2:C" & nbligA).Find(shB.Cells(i, "C").Value, LookIn:=xlValues, lookat:=xlWhole)
          If c Is Nothing Then
             nbligA = nbligA + 1
             shB.Rows(i).Copy ShA.Range("A" & nbligA)
          End If
       Next i
       Set c = Nothing
       wbB.Close False
    Erreur:
       Set wbB = Nothing
       Set shB = Nothing
    End If
    Set wbA = Nothing
    Set ShA = Nothing
    End Sub
    En fin de compte dans la feuille A du classeur A seront ajouté les lignes de la feuille A du classeur B dont le code (colonne C) n'existe pas en colonne C de Feuille A du classeur A

  6. #6
    Membre confirmé
    Inscrit en
    Décembre 2010
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 71
    Par défaut
    ok je vais essayer, merci bcp ..

Discussions similaires

  1. question sur une boucle et un break
    Par isidore dans le forum C
    Réponses: 10
    Dernier message: 22/11/2006, 20h26
  2. [68HC11] Blocage sur une boucle
    Par paterson dans le forum Autres architectures
    Réponses: 3
    Dernier message: 10/11/2006, 20h45
  3. [VBA-E]PB sur une boucle for each next
    Par rond24 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 31/07/2006, 15h47
  4. Réponses: 11
    Dernier message: 19/06/2006, 16h54
  5. Problème sur une boucle
    Par Mateache dans le forum ASP
    Réponses: 6
    Dernier message: 31/01/2006, 09h48

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