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 For qui ne fonctionne pas sur la plage entière [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 6
    Par défaut Boucle For qui ne fonctionne pas sur la plage entière
    Bonjour à tous! C'est mon premier message sur le forum, j'espère qu'il respectera les règles de syntaxe.

    Je suis en train de faire une macro pour archiver des données mais elle ne fonctionne pas totalement, je vous explique de manière simplifiée:

    J'ai deux feuilles avec :

    - Feuille 1 (appelée "Sauvegarde Rendement") : une date de la forme "S1 2019" correspondant à la semaine 1 de l'année 2019 en cellule J6 et des données dans différentes cellules (que je veux copier dans ma seconde feuille)

    - Feuille 2 (appelée "TAI Archivage") : Une liste de date de la même forme qui s'étend sur la colonne B à partir de la cellule B19 qui contient comme première valeur "S1 2019" jusqu'à la cellule B172, qui contient "S52 2019". Ce sont des cellules fusionnées 3 par 3.


    But de ma macro : Ce que je souhaite c'est que ma macro recherche la date de la première feuille en J6 et la retrouve dans la colonne B de la seconde feuille puis qu'elle copie des données de la feuille 1 dans les cellules correspondantes dans la feuille 2.

    Problème : ça fonctionne jusqu'à la semaine 9, pour les suivantes, ma macro tourne jusqu'au bout sans retrouver la date..

    Je pensais que c'était un souci d'écriture lorsque la semaine était une semaine à 2 chiffres mais j'ai testé de mettre la semaine 14 à la place de ma semaine 3 dans la colonne de ma seconde feuille et là elle la retrouve! Donc je ne vois pas du tout où est le problème.

    Je vous mets le morceau de code que j'utilise

    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
    Dim a As Integer
    Dim b As Integer
    a = 19
    b = 2
     
    For a = 19 To 172
    If Worksheets("Sauvegarde Rendement").Range("J6").Value = Worksheets("TAI Archivage").Cells(a, b).Value Then
    'Mon code copie les cellules que je veux copier
     
    Else
    a = a+3
    'J'ai également essayé avec a+1 mais rien ni fait
     
    End If
    Next

    Un dernier point qui n'a peut être pas d'intérêt : ma date en J6 est une date concaténer.

    J'espère que mon message est assez clair.
    Si vous avez déjà rencontré ce genre de problème ou si vous avez une solution, je suis preneur!
    Merci d'avance.

  2. #2
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Bonjour,

    Essaies :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub test()
    Dim r As Range
    Dim c As Range
    Dim d As String
      d = Worksheets("Sauvegarde Rendement").Range("J6").Value
      Set r = Worksheets("TAI Archivage").Range("B19:B172")
      Set c = r.Find(d)
      If Not c Is Nothing Then
        MsgBox d & " se trouve en " & c.Address
      Else
        MsgBox d & " est absent de la plage " & r.Address
      End If
    End Sub

  3. #3
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 681
    Par défaut
    Citation Envoyé par Isssou Voir le message
    - Feuille 1 (appelée "Sauvegarde Rendement") : une date de la forme "S1 2019" correspondant à la semaine 1 de l'année 2019 en cellule J6 et des données dans différentes cellules (que je veux copier dans ma seconde feuille)
    Où se trouvent exactement les données que tu souhaite copier ? ce n'est ni écrit ici, ni dans ton code
    Tu ne dis pas non plus où se trouvent les dates autres que la première

    Ce sont des cellules fusionnées 3 par 3.
    Attention, VBA apprécie moyennement les cellules fusionnées, c'est souvent source d'erreur, si tu le peux je te conseille vivement de t'en passer.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 6
    Par défaut
    Bonjour Patrice,

    Extrêmement intéressant ton code! Il trouve bel et bien la cellule que je recherche, je ne connaissais pas du tout ".find", je vais travailler dans cette direction, ça devrait fonctionner, merci beaucoup.



    Bonjour à toi aussi Halaster,

    Je ne peux pas partager mon fichier pour des raisons pro sinon je l'aurais fait mais pas besoin de savoir où se trouvent les données à copier en somme :
    Il y a environ 500 cellules à copier que l'on trouve sur toute la feuille, je me voyais mal copier le code complet, j'ai préféré rester clair et concis.
    Mais pour t'expliquer un peu plus en détail, la date en J6 de ma première feuille est rentrée manuellement tous les mois par l'utilisateur donc elle fluctue.
    En gros, la première feuille est une archive de temps de travail sur un mois, la seconde une archive de temps de travail sur plusieurs années, le but étant d'avoir la vision direct des temps du mois en cours mais également une traçabilité des temps plus anciens. Une fois que les données de la feuille 1 sont copiées dans la feuille 2, elles sont écrasées pour démarrer le mois suivant.

    Merci pour le conseil des cellules fusionnées, je tacherais d'éviter!

  5. #5
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Citation Envoyé par Isssou Voir le message
    Bonjour Patrice,
    Extrêmement intéressant ton code! Il trouve bel et bien la cellule que je recherche, je ne connaissais pas du tout ".find", je vais travailler dans cette direction, ça devrait fonctionner, merci beaucoup.!
    Je te conseille d'utiliser un Offset de c pour copier tes valeurs, par exemple :
    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
    Sub test()
    Dim r As Range
    Dim c As Range
    Dim d As String
      d = Worksheets("Sauvegarde Rendement").Range("J6").Value
      Set r = Worksheets("TAI Archivage").Range("B19:B172")
      Set c = r.Find(d)
      If Not c Is Nothing Then
        With Worksheets("Sauvegarde Rendement")
          c.Offset(0, 1).Value = .Range("B2").Value
          c.Offset(0, 2).Value = .Range("D2").Value
          c.Offset(1, 1).Value = .Range("B4").Value
          c.Offset(1, 2).Value = .Range("D4").Value
          c.Offset(2, 1).Value = .Range("J5").Value
        End With
      Else
        MsgBox d & " est absent de la plage " & r.Address
      End If
    End Sub

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 6
    Par défaut
    Encore une fois très pertinent Patrice, merci.

    Je ne connaissais pas du tout Offset, du coup j'ai fait :

    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
    Dim r As Range
    Dim c As Range
    Dim d As String
    Dim a As Integer
     
    d = Worksheets("Sauvegarde Rendement").Range("J6").Value
     
      Set r = Worksheets("TAI Archivage").Range("B19:B172")
      Set c = r.Find(d)
     
      If c Is Nothing Then
        MsgBox d & " est absent de la plage " & r.Address
      Else
     
    a = c.Row
     
    Worksheets("TAI Archivage").Cells(a, 5) = Worksheets("Sauvegarde Rendement").Range("I8")
    Worksheets("TAI Archivage").Cells(a+5, 7) = Worksheets("Sauvegarde Rendement").Range("X8")
    Worksheets("TAI Archivage").Cells(a+13, 10) = Worksheets("Sauvegarde Rendement").Range("Z12")
    ...
    End If
    C'est un peu du bricolage, je le conçois mais ça m'arrange plus pour cette fois vu que j'ai déjà toutes mes lignes de cellules en lien avec "a", mais le offset me sera très certainement utile pour un nouvel outil. Encore merci, ça fonctionne nickel!

  7. #7
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Citation Envoyé par Isssou Voir le message
    Je ne connaissais pas du tout Offset, du coup j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    a = c.Row
    Worksheets("TAI Archivage").Cells(a, 5) = Worksheets("Sauvegarde Rendement").Range("I8")
    Worksheets("TAI Archivage").Cells(a+5, 7) = Worksheets("Sauvegarde Rendement").Range("X8")
    Worksheets("TAI Archivage").Cells(a+13, 10) = Worksheets("Sauvegarde Rendement").Range("Z12")
    ...
    C'est un peu du bricolage, ...
    Avec Offset (et With), comme c se situe en colonne 2 ça donnerait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      With Worksheets("Sauvegarde Rendement")
        c.Offset(0, 3).Value = .Range("I8").Value
        c.Offset(5, 5).Value = .Range("X8").Value
        c.Offset(13, 8).Value = .Range("Z12").Value
        '...
      End With

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

Discussions similaires

  1. Boucle "for" qui ne fonctionne pas
    Par aertys dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 21/02/2018, 19h27
  2. [XL-2010] Boucle For qui ne fonctionne pas pour toutes les valeurs
    Par pleskyd dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 13/02/2012, 15h16
  3. une boucle for qui ne fonctionne pas
    Par piffeo dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 06/11/2008, 21h52
  4. Requete qui ne fonctionne pas sur toutes les versions de MySQL
    Par goldorax113 dans le forum Requêtes
    Réponses: 2
    Dernier message: 06/06/2006, 11h04
  5. Code qui ne fonctionne pas sur Mac
    Par malbaladejo dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 14/01/2005, 11h08

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