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 avec condition


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 24
    Points : 16
    Points
    16
    Par défaut Boucle avec condition
    Bonjour,

    J'ai déjà présenté le code ci-dessous pour un problème résolu.

    Il s'agit de comparer les valeurs d'un champ de ma requête Access avec une colonne sous Excel, et de remplacer certaines cellules de la ligne si le code est trouvé, ou d'ajouter une ligne avec le code.

    Cela fonctionne quand les codes sont dans le même ordre dans Access et dans Excel, mais je ne sais pas comment faire pour lui dire que s'il ne trouve pas le code il ne va pas de suite ajouter la ligne, mais passe à la ligne Excel suivante.

    Si quelqu'un a une idée ou pouvait m'indiquer un tutoriel sur les boucles ça serait cool (j'ai pas trouvé...).

    Autre petite question en passant: comment mettre le nouveau texte (les codes et les lignes modifiées quand le code est trouvé) en couleur?

    Merci de votre aide.

    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
    Sub majmp()
        Dim cnx As ADODB.Connection
        Dim rsData As ADODB.Recordset
        Dim szConnect As String
        Dim szSQL As String
        Dim PathMyApplication As String
        Dim un_champ As ADODB.Field
        Dim intNoCol As Integer
        Dim intNoLigne As Integer
        Dim i1 As String
        Dim i2 As String
        Dim codeprojet As ADODB.Field
        Dim iL As Integer
     
        'déclaration d'un objet connection
        Set rsData = New ADODB.Recordset
     
        'instanciation de l'object cnaccess
        Set cnx = New ADODB.Connection
     
        'valorisation de la propriété connectionstring
        PathMyApplication = "G:\Gestion" & "\"
        ' Créer la chaine de connexion
         szConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
         "Data Source= " & PathMyApplication & "SIAL.mdb;"
     
       'garniture du rs 
        rsData.Open "MajorProjectsLV", szConnect, adOpenDynamic, adLockOptimistic, adCmdStoredProc
     
         'garniture des données
     
     i2 = 1
    rsData.MoveFirst
    codeprojet = rsData.Fields("Code project")
     
    Do While Not rsData.EOF
    For Each codeprojet In rsData.Fields
    If codeprojet = Worksheets("TEST2").Cells(i2, 1).Value Then
    Worksheets("TEST2").Cells(i2, 2).Value = rsData.Fields("code Project")
    Worksheets("TEST2").Cells(i2, 3).Value = rsData.Fields("last gate")
     
    Else
    iL = Cells(65535, 1).End(xlUp).Offset(1).Row
    Worksheets("TEST2").Cells(iL, 1).Value = rsData.Fields("code projet").Value
     
    i2 = i2 + 1
    End If
    Next codeprojet
     
    rsData.MoveNext
    Loop
     
     
        'ouverture de la connexion avec la base access
     
        MsgBox "Les données ont été mises à jour selon la requête Access..."
     
    End Sub

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Et si tu as un pb, tu dis
    Bon courage

    Edit
    Autant pour moi, tu n'as pas besoin d'une boucle. Regarde dans l'aide, à Find, tu as l'exemple de ce qu'il te faut

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 24
    Points : 16
    Points
    16
    Par défaut
    Bonjour,

    Merci pour le tuyau effectivement la fonction "find" pourrait me servir je pense... encore faudrait-il que je comprenne comment m'en servir..

    Peux-tu me donner qq explications?

    Cela fait un moment déja que je fais des essais c'est un vrai casse tête, je débute...

    Merci,

    SL

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Je reprends donc l'exemple de l'aide puisqu'il te manque la touche F1
    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
    'Ton code d'ouverture
    Dim FL1 As Worksheet
    Dim plage As Range
        Set FL1 = Worksheets("TEST2")
        i2 = 1
        rsData.MoveFirst
        codeprojet = rsData.Fields("Code project")
        set plage = FL1.Range("A1:A" & FL1.Range("A65535").End(xlUp).Row)
        Do While Not rsData.EOF
            For Each codeprojet In rsData.Fields
                With plage
                    Set c = .Find(2, LookIn:=xlValues)
                    If Not c Is Nothing Then
                         FL1.Cells(i2, 2).Value = _
                                rsData.Fields("code Project")
                         FL1.Cells(i2, 3).Value = _
                                rsData.Fields("last gate")
                      Else
                         iL = Cells(65535, 1).End(xlUp).Offset(1).Row
                         FL1.Cells(iL, 1).Value = _
                                rsData.Fields("code projet").Value
                         i2 = i2 + 1
                    End If
                End With
            Next
            rsData.MoveNext
        Loop
    Sans filet... Tu peux tester pour nous ?
    A+

Discussions similaires

  1. boucle avec condition à la fin
    Par PC81 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/05/2008, 16h12
  2. [Fortran 77] Boucle avec condition
    Par feynman dans le forum Fortran
    Réponses: 5
    Dernier message: 21/04/2008, 15h24
  3. boucles avec conditions pour faire un suivi
    Par lilyla dans le forum MATLAB
    Réponses: 1
    Dernier message: 17/03/2008, 11h53
  4. Boucle avec condition "perdu"
    Par guismoman33 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 08/06/2007, 10h38
  5. boucle avec condition d'arret changeante
    Par NicoH dans le forum Langage
    Réponses: 3
    Dernier message: 10/06/2003, 11h48

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