Partage
  • Partager sur Facebook
  • Partager sur Twitter

incompréhension boucle VBA

Sujet résolu
22 août 2017 à 16:56:59

Bonjour, 

Voilà je post ici parce que j'ai un problème dans mon code, l'objectif est de parcourir chaque fichier un par un et d'en récupérer des infos précises.

La récupération d'infos fonctionne parfaitement mais le parcoure de fichier non.

J'ai une méthode qui à l'air de fonctionné sur le papier mais je boucle tout le temps sur le premier fichier de la liste et je ne trouve pas d'où pourrais venir le problème. 

La partie qui ne fonctionne pas se trouve au tout début je suppose mais je ne trouve pas comment la corriger..

Quelqu'un aurait-il la solution SVP :) 

Sub importDonnees()
    Dim principal As ThisWorkbook
    Dim repertoire As String, fichier As String
    Application.ScreenUpdating = False
    Set principal = ThisWorkbook
    
    repertoire = "C:\Users\Asus\Desktop\TEST MACRO\EXERCICE\calcul"
    ChDir repertoire
    fichier = Dir("*.xls")
    
    'Variables de récuprérations'
    Dim Gspot As String
    Dim EffortApPose As String
    Dim NomEtude As String
    
    'variable d'incrémentation'
    Dim i As Integer
    i = 2
    
    'Coordonnées de la celulle Gspot'
    Dim GspotCell As String
    
    'Coordonnées de la céllule EffortApTrav'
    Dim EffortApPoseCell As String
    
    'Coordonnées de la céllule NomEtude'
    Dim NomEtudeCell As String
    
    'Coordonnées céllule ident'
    Dim IdentCell As String
        IdentCell = "a2"
    
    'Valeur de la RefFt'
    Dim RefFt As String
    
    'Coordonnées de la refFt'
    Dim RefFtCell As String
        RefFtCell = "B2"
    
    'Coordonées de Calcul'
    Dim Calcul As String
        Calcul = "H2"        
            
    Do While fichier <> ""     
    
            Workbooks.Open fichier            
            'Récupère les valeurs et les assigne aux variables'
            With ActiveSheet
                Gspot = ActiveSheet.Range("J2").Value
                EffortApPose = ActiveSheet.Range("w21").Value
                RefFt = ActiveSheet.Range("D2").Value
                NomEtude = fichier
            End With

            'Booleen de test pour les valeur de la refFt'
            Dim ok As Boolean
                
                While ok = False                    
                    'Coordonnées de la ref FT dans le tableau à remplir'
                    RefFtCell = "b" & i
                    'Coordodnées du Gspot dans le tableau à remplir'
                    GspotCell = "D" & i
                    'Coordonnées de l'effort dans le tableau à remplir '
                    EffortApPoseCell = "I" & i
                    'Coordonnées du nom de l'étude dans le tableau à remplir'
                    NomEtudeCell = "G" & i
                    'Coordonnées de calcul dans le tableau à remplir'
                    Calcul = "H" & i
                    i = i + 1
                    If Range(RefFtCell).Value = RefFt Then
                        ok = True
                        'Assigne les valeurs dans le tableau à remplir'
                        Range(GspotCell) = Gspot
                        Range(EffortApPoseCell) = EffortApPose
                        Range(NomEtudeCell) = NomEtude
                        'suprime le .xls dans le nom des études'
                        Range(NomEtudeCell) = Left(Range(NomEtudeCell), Len(Range(NomEtudeCell)) - 4)
                        
                        If ActiveSheet.Range("w21").Interior.ColorIndex = 46 Or ActiveSheet.Range("w21").Interior.ColorIndex = 3 Then
                            Range(Calcul) = "nok"
                            Range(Calcul).Interior.ColorIndex = 22
                            Range(Calcul).Font.ColorIndex = 9
                        Else
                            If ActiveSheet.Range("w21").Interior.ColorIndex = 43 Then
                                Range(Calcul) = "ok"
                                Range(Calcul).Interior.Color = RGB(169, 253, 180)
                                Range(Calcul).Font.ColorIndex = 10
                            End If
                        End If
                                                
                    End If
     
                Wend
                ok = False
                i = 2
           ActiveWorkbook.Close
        Loop          
End Sub



  • Partager sur Facebook
  • Partager sur Twitter
22 août 2017 à 17:56:11

Hello.

Je dirais tout simplement que dans ta boucle, tu ne changes jamais la valeur de fichier. Ce qui explique pourquoi tu boucles inlassablement sur le premier fichier (et de manière infinie j'imagine). Il faut repréciser au programme par « fichier = Dir() » que tu prends l'entrée suivante.

La solution serait de faire une boucle dans le style :

[...]

Do While fichier <> ""
   [...]
   fichier = Dir()
Loop

[...]

J'espère que cela résoudra ton problème. Pour ma part j'ai essayé de mon côté et ça fonctionne assez bien.

A bientôt,

-
Edité par Matheop 22 août 2017 à 17:58:13

  • Partager sur Facebook
  • Partager sur Twitter

Le Kansas City Shuffle.. c’est quand tout le monde regarde à gauche et que tu vas à droite.

22 août 2017 à 22:28:36

Merci ca fonctionne super !! 

  • Partager sur Facebook
  • Partager sur Twitter