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 :

utilisation d'une boucle qui ne fonctionne pas [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2013
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Octobre 2013
    Messages : 238
    Points : 116
    Points
    116
    Par défaut utilisation d'une boucle qui ne fonctionne pas
    Bonjour a toutes, Bonjour a tous

    Voila j'expose mon problème, donc j'ai fait un programme( avec de l'aide)
    je vais pas rentrer dans les détailles du code actuelle a part si quelqu'un me le demande.
    Ce programme fonctionne très bien je suis content mais comme d'habitude il y a des modifications qui font tout planter

    Je voudrait intégrer une boucle exemple (For i = 11 To 81 Step 5)
    mais cela ne fonctionne pas et je ne sais pas pourquoi.
    Je suppose que l'erreur vient de cette ligne :

    Set rngArticle = myWs.Range(myWs.Range(Cells(4, i)), myWs.Range(Cells(65536, i)).End(xlUp))


    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
    Private Sub CommandButton4_Click()
     
        MsgBox "ATTENTION, cela peu prendre un peu de temps, veuillez attendre sagement"
        Sheets("feuille_de_prix").Select
    'For i = 11 To 81 Step 5  
    'ICI L'INITIALISATION DE LA BOUCLE 
        Dim rngArticle As Range
        Dim myWs As Worksheet
        Set myWs = ThisWorkbook.ActiveSheet
        Set rngArticle = myWs.Range(myWs.Range("K4"), myWs.Range("K65536").End(xlUp))
        'Set rngArticle = myWs.Range(myWs.Range(Cells(4, i)), myWs.Range(Cells(65536, i)).End(xlUp))  
    'ICI JE VOUDRAIT REMPLACER LA LIGNE D'AU DESSUS PAR CELLE SI, OU DU MOIN UN TRUC QUI VOUDRAIT DIRE LA MEME CHOSE ET QUI FONCTIONNE ^^
     
        Dim xlApp As Object
        Set xlApp = CreateObject("Excel.Application")
        Dim xlWk As Workbook
        Set xlWk = xlApp.Workbooks.Open("C:\Users\fichier_source.xls")
        Dim xlWs As Worksheet
        Set xlWs = xlWk.Worksheets(1)
     
         Dim rngArticleRecherche As Range
        Set rngArticleRecherche = xlWs.Range(xlWs.Range("B2"), xlWs.Range("B65536").End(xlUp))
     
        Dim rngRefTrouve As Range
        Dim cell As Range
     
        For Each cell In rngArticle
            Set rngRefTrouve = rngArticleRecherche.Find(cell.Value, , xlValues, xlWhole)
            If rngRefTrouve Is Nothing Then
                      Else
                cell.Offset(, 1).Value = rngRefTrouve.Offset(, 6).Value
            End If
    'Next SANS OUBLIER LE NEXT DE LA BOUCLE
    Next
           Set xlWs = Nothing
        xlWk.Close (False)
        Set xlWk = Nothing
        xlApp.Quit
        Set xlApp = Nothing
    End Sub

  2. #2
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut
    Salut,
    tu veux donc faire un action toute les 5 colonnes ?

    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
    Sub test()
     
        MsgBox "ATTENTION, cela peu prendre un peu de temps, veuillez attendre sagement"
     
     
        'ICI L'INITIALISATION DE LA BOUCLE
        'Dim rngArticle As Range
        Dim myWs As Worksheet
        Set myWs = ThisWorkbook.Sheets("feuille_de_prix")
        For i = 11 To 81 Step 5
            'Set rngArticle = myWs.Range(myWs.Range("K4"), myWs.Range("K65536").End(xlUp))
            Set rngArticle = myWs.Range(myWs.Cells(4, i), myWs.Cells(65536, i).End(xlUp))
     
            rngArticle.Select
            'ICI JE VOUDRAIT REMPLACER LA LIGNE D'AU DESSUS PAR CELLE SI, OU DU MOIN UN TRUC QUI VOUDRAIT DIRE LA MEME CHOSE ET QUI FONCTIONNE ^^
     
            Dim xlApp As Object
            Set xlApp = CreateObject("Excel.Application")
            Dim xlWk As Workbook
            Set xlWk = xlApp.Workbooks.Open("C:\Users\fichier_source.xls")
            Dim xlWs As Worksheet
            Set xlWs = xlWk.Worksheets(1)
     
            Dim rngArticleRecherche As Range
            Set rngArticleRecherche = xlWs.Range(xlWs.Range("B2"), xlWs.Range("B65536").End(xlUp))
     
            Dim rngRefTrouve As Range
            Dim cell As Range
     
            For Each cell In rngArticle
                Set rngRefTrouve = rngArticleRecherche.Find(cell.Value, , xlValues, xlWhole)
                If rngRefTrouve Is Nothing Then
                Else
                    cell.Offset(, 1).Value = rngRefTrouve.Offset(, 6).Value
                End If
            Next
     
        Next i
     
        Set xlWs = Nothing
        xlWk.Close (False)
        Set xlWk = Nothing
        xlApp.Quit
        Set xlApp = Nothing
    End Sub

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2013
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2013
    Messages : 27
    Points : 36
    Points
    36
    Par défaut
    Peut être comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DerLig=myWs.Cells(rows.count,i).End(xlUp).Row
    set rngArticle=myWs.range(myWs.Cells(4,i),myWs.cells(DerLig,i))
    Tu as sans doute aussi interet à remplacer ton find par l'utilisation de Dictionnary vu que tes plages de recherche ont l'air assez énorme.

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2013
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Octobre 2013
    Messages : 238
    Points : 116
    Points
    116
    Par défaut reponse
    Oui c'est ca toute les 5 colonnes je veux que ca le fasse, de la 11 a la 81 (14colonnes au total)

    la plage dans la quel je recherche fait 51266 lignes par la, mais cette liste peut évoluer a chaque moment .

    et lz programme que tu as mis ne fonctionne pas chez moi...

  5. #5
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par sharox Voir le message
    Oui c'est ca toute les 5 colonnes je veux que ca le fasse, de la 11 a la 81 (14colonnes au total)

    la plage dans la quel je recherche fait 51266 lignes par la, mais cette liste peut évoluer a chaque moment .

    et lz programme que tu as mis ne fonctionne pas chez moi...
    c'est à dire ?

    j'ai déplacé le bloc d'ouverture du second fichier excel, sinon ca l'ouvre à chaque boucle de i, mais sinon j'ai pas testé après "rngArticle.Select"

    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
    Sub test()
     
        MsgBox "ATTENTION, cela peu prendre un peu de temps, veuillez attendre sagement"
     
     
        'ICI L'INITIALISATION DE LA BOUCLE
        'Dim rngArticle As Range
        Dim myWs As Worksheet
        Set myWs = ThisWorkbook.Sheets("feuille_de_prix")
     
            Dim xlApp As Object
            Set xlApp = CreateObject("Excel.Application")
            Dim xlWk As Workbook
            Set xlWk = xlApp.Workbooks.Open("C:\Users\fichier_source.xls")
            Dim xlWs As Worksheet
            Set xlWs = xlWk.Worksheets(1)
     
            Dim rngArticleRecherche As Range
            Set rngArticleRecherche = xlWs.Range(xlWs.Range("B2"), xlWs.Range("B65536").End(xlUp))
     
            Dim rngRefTrouve As Range
            Dim cell As Range
        For i = 11 To 81 Step 5
            'Set rngArticle = myWs.Range(myWs.Range("K4"), myWs.Range("K65536").End(xlUp))
            Set rngArticle = myWs.Range(myWs.Cells(4, i), myWs.Cells(65536, i).End(xlUp))
     
            rngArticle.Select
            'ICI JE VOUDRAIT REMPLACER LA LIGNE D'AU DESSUS PAR CELLE SI, OU DU MOIN UN TRUC QUI VOUDRAIT DIRE LA MEME CHOSE ET QUI FONCTIONNE ^^
     
     
     
            For Each cell In rngArticle
                Set rngRefTrouve = rngArticleRecherche.Find(cell.Value, , xlValues, xlWhole)
                If rngRefTrouve Is Nothing Then
                Else
                    cell.Offset(, 1).Value = rngRefTrouve.Offset(, 6).Value
                End If
            Next
     
        Next i
     
        Set xlWs = Nothing
        xlWk.Close (False)
        Set xlWk = Nothing
        xlApp.Quit
        Set xlApp = Nothing
    End Sub

  6. #6
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2013
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Octobre 2013
    Messages : 238
    Points : 116
    Points
    116
    Par défaut
    Re bonjour

    Excuse moi ce que vous m'avez donné marche très bien
    Hier je voulais modifié ce que j'avais mis mais le site était en maintenance, et après j'ai oublié, donc je le fait ce matin

    Excusé moi :'

    Je vous Remercie grandement pour l'aide que vous m'avez fournis !

    Cordialement a tous !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Range.Offset(1) dans une boucle qui ne fonctionne pas
    Par Pierre.g dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/08/2008, 11h58
  2. trajectoire d'une forme qui ne fonctionne pas
    Par kaya 59 dans le forum VBA PowerPoint
    Réponses: 13
    Dernier message: 02/08/2008, 10h27
  3. Réponses: 10
    Dernier message: 07/01/2007, 12h03
  4. [MySQL] Boucle qui ne fonctionne pas bien que la 1ère fois
    Par R.L. dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 27/05/2006, 21h59

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