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 :

Recopiage de ligne variable automatique selon un ordre de tri


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 25
    Par défaut Recopiage de ligne variable automatique selon un ordre de tri
    Bonjour,
    Alors voilà, mon problème est assez simple mais je ne trouve pas de solution :
    En fait j'ai un planning initial, sur lequel j'ai une liste de pièces (colonne 1 références, colonne 2 noms). J'ai ensuite un planning final que je veux créer à partir d'une copie de l'initial mais en classant les pièces selon un ordre donné dans une 3ème feuille nommée OrdreTri.
    Donc je boucle sur mon ordre de tri, je recherche la référence de la 1ère pièce, puis sur mon planning initial je vais rechercher celle qui y correspond. Quand je suis arrivé à la ligne qui correspond à cette pièce, je copie tout simplement toute la ligne sur la 1ère ligne de mon planning final.
    J'ai tenté un code qui sur le papier devrait fonctionner pour copier et classer mon planning... Mais il ne fait rien du tout quand je le lance...
    J'en appelle donc à votre aide !

    Merci beaucoup d'avance,

    (PS : Je joins un fichier exemple)
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    Bonjour VictorienR,

    Ton problème se situe à ce niveau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                While (numpiècecouranteplanning <> numpiècecourantetri And (lignecouranteplanning < 300)) 'tant qu'on a pas la bonne pièce à placer sur le planning final
                 lignecouranteplanning = lignecouranteplanning + 1 'on regarde la pièce suivante du planning actuel
                Wend
    En fait, lignecouranteplanning est toujours égale à 300. Donc tu ne copies rien !
    As-tu essayé en mode débug ? Tu aurais compris de suite !

    D'autre part, il me semble plus judicieux de placer tes macros dans un MODULE plutôt qu'au sein d'une feuille.
    Clic droit > Insertion > Module

    Tu copies ta macro et tu enlève le Privite de ta Sub TRI_Click().
    On te dira peut-être l'inverse mais moi, je te le conseille.

    N'hésite pas à revenir vers moi.

    Cordialement,
    Kimy

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 25
    Par défaut
    Bonjour Kimy et merci de ta réponse,

    Je ne comprends pas pourquoi est-ce que lignecouranteplanning est toujours égale à 300 ? Parce que je lui donne pourtant une valeur au dessus... Dans ce cas, j'ai juste à supprimer cette condition pour le résoudre ?
    Et je ne connais pas le mode débug, donc non..

    Edit : J'ai supprimé la condition et il me donne une erreur de capacité

  4. #4
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    Tu vas dans ton éditeur de macro.

    Tu sélectionnes la ligne sur laquelle tu souhaites que ton code s'arrête.
    Soit tu cliques sur F9, soit dans la marge, soit sur l'option "Basculer le point d'arrêt" pour placer ton point d'arrêt.

    Quand tu vas exécuter ton code, la macro s’arrêtera à cette endroit. En passant ta souris au dessus des variables, tu pourras voir la valeur qu'elles prennent.
    Pour avancer en mode "pas à pas" (ligne par ligne), tu peux appuyer sur F8.
    Ainsi, tu vas pouvoir voir où se situe ton erreur et pourquoi.

    Tu peux définir plusieurs points d'arrêt. Avec F5, tu passes de l'un à l'autre.

    Enfin, concernant ton problème, ta macro ne s'arrête pas sur un condition. Tu ne trouves jamais la même valeur.
    Ainsi lignecouranteplanning augmente jusqu'à atteindre la capacité max d'un Integer.

    Voila, je te laisse revenir vers moi !

    Cordialement,
    Kimy

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 25
    Par défaut
    Je te remercie pour cette explication, effectivement on voit tout de suite comment le code se comporte exactement, c'est super !
    En fait je pense que le soucis vient du fait que si la référence qui est dans l'ordre de tri n'est jamais dans le planning, alors le programme tourne en rond et copie du vide !
    Il faudrait donc que je rajoute un "Si la référence de la pièce ordre de tri n'est pas dans le planning, alors passez à la pièce suivante", mais je ne sais pas du tout comment coder le fait que "la pièce n'appartient pas à la liste du planning" ....

  6. #6
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    Moi je te propose quelque chose du genre :
    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
    Sub VictorienR()
    Dim oRng As Range
    Dim oRng_source as Range
    Dim i As Integer
     
    With Worksheets("Feuil1")
        Set oRng_source = .Range("A1")
        For i = 1 To .Columns(1).Find("*", , , , , xlPrevious).Row - 1
            Set oRng = Worksheets("Feuil2").Columns(1).Find(oRng_source.Offset(i, 0) , LookIn:=xlValues, LookAt:=xlWhole)
            If Not oRng Is Nothing Then
                'je fais ce que je veux avec "ma pièce" que j'ai trouvé
            End If
            Set oRng = Nothing
        Next i
    End With
     
    End Sub
    Là, je parcours les lignes de i = 1 à i = la dernière ligne non-vide de ma Feuil1 que je récupère à l'aide de oRng_source.Offset(i, 0).
    Je fais une recherche de oRng_source.Offset(i, 0) dans ma Feuil2 sur la colonne 1.

    Si je trouve quelque chose, alors je fais ce que je veux, sinon j'incrémente i et donc je passe à la pièce suivante.

    Ca aide ?

    Cordialement,
    Kimy

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/05/2016, 10h21
  2. [XL-2003] numérotation automatique selon variable d'une cellule
    Par mikadoo57 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 11/01/2013, 19h18
  3. Numérotation automatique selon les utilisateurs
    Par Safaritn dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 12/08/2005, 14h11
  4. Variables automatiques et mot clé auto, variables register.
    Par Évariste Galois dans le forum C++
    Réponses: 6
    Dernier message: 11/08/2005, 20h30
  5. Réponses: 4
    Dernier message: 25/11/2004, 11h17

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