Un soucis dans mon code??? VBA
Répondre à la discussion
Affichage des résultats 1 à 14 sur 14

Un soucis dans mon code??? VBA



  1. #1
    invited8344905

    Un soucis dans mon code??? VBA


    ------

    Bonjour,

    Je cherche à faire de la copie de data d'un fichier à l'autre selon 2 critères (n° de semaine et Poste de travail).

    Selon le poste de travail, les données sont copiées dans un onglet spécifique (il s'agit de machine de prod, 4 machines). J'ai réalisé le code pour le premier poste de travail et cela fonctionne sans pb. J'ai fait une copie de la boucle permettant de copier les data pour la première machine que j'ai adapté pour la seconde machine. Mais pour la seconde, ça ne fonctionne pas.

    L'utilisateur clique sur un bouton et un UserForm apparait où l'utilisateur entre un N° de semaine.

    Voici mon code:
    Code:
    Private Sub CommandButton1_Click()
        
        Dim FichierMaintenance As Workbook
        Dim FichierPlanning As Workbook
    
        Dim i As Long
        Dim SemaineUtilisateur As Long
        Dim SemaineMaintenance As Long
            
        Dim OT As Long
        Dim WorkCenterMaintenance
        Dim EtatImmoMarchine As String
        Dim EtatImmoOperateur As String
        Dim EnTeteOT As String
               
        If TextBox1.Value = "" Then
            MsgBox ("Merci d'entrez une valeur!")
            TextBox1.SetFocus
        Else
            SemaineUtilisateur = TextBox1.Value
        End If
        
        'UPDATER CETTE PARTIE POUR IMPLEMENTATION
        'Dim Repertoire As String
        'Lien du fichier maintenance
        'Repertoire = "C:\...."
        
        'POUR LE TEST
        Dim Repertoire1 As String
        Repertoire1 = "C:\Users\t843529\Desktop\Copy of 1 Copy of Copie de Planif Maint Prév à Avril (2).xlsx"
         
        'Set FichierMaintenance = Application.Workbooks.Open(Repertoire, False, True)
        Set FichierPlanning = ThisWorkbook
        Set FichierMaintenance = Application.Workbooks.Open(Repertoire1, False, True)
    
        
        Dim DerniereLigneMaint As Long
        DerniereLigneMaint = FichierMaintenance.Worksheets("Planning").Range("S" & Rows.Count).End(xlUp).Row
            
        '*****************************************************************************************
        'Pour S1L
        
        Dim DerniereLignePlanningS1L As Long
        DerniereLignePlanningS1L = FichierPlanning.Worksheets("1 L").Range("A" & Rows.Count).End(xlUp).Row
        Dim WorkCenterPlanning1L
        WorkCenterPlanning1L = "Asset F&P Sud Zeon 1L"
        
        For i = 3 To DerniereLigneMaint
            SemaineMaintenance = FichierMaintenance.Worksheets("Planning").Cells(i, 19).Value
            WorkCenterMaintenance = FichierMaintenance.Worksheets("Planning").Cells(i, 9).Value
            
            If SemaineMaintenance = SemaineUtilisateur And WorkCenterMaintenance = WorkCenterPlanning1L Then
                OT = FichierMaintenance.Worksheets("Planning").Cells(i, 3).Value
                EtatImmoMachine = FichierMaintenance.Worksheets("Planning").Cells(i, 13).Value
                EtatImmoOperateur = FichierMaintenance.Worksheets("Planning").Cells(i, 14).Value
                EnTeteOT = FichierMaintenance.Worksheets("Planning").Cells(i, 6).Value
            
                FichierPlanning.Worksheets("1 L").Cells(DerniereLignePlanningS1L, 1).Value = SemaineMaintenance
                FichierPlanning.Worksheets("1 L").Cells(DerniereLignePlanningS1L, 3).Value = OT
                FichierPlanning.Worksheets("1 L").Cells(DerniereLignePlanningS1L, 10).Value = EnTeteOT
                FichierPlanning.Worksheets("1 L").Cells(DerniereLignePlanningS1L, 5).Value = EtatImmoMachine
                FichierPlanning.Worksheets("1 L").Cells(DerniereLignePlanningS1L, 7).Value = EtatImmoOperateur
            End If
            Next i
        End
        '*****************************************************************************************
        
        
        '*****************************************************************************************
        'Pour S5L
        
        Dim DerniereLignePlanningS5L As Long
        DerniereLignePlanningS5L = FichierPlanning.Worksheets("5 L").Range("A" & Rows.Count).End(xlUp).Row
        Dim WorkCenterPlanning5L
        WorkCenterPlanning5L = "Asset F&P Sud Zeon 5L"
        
        For i = 3 To DerniereLigneMaint
            SemaineMaintenance = FichierMaintenance.Worksheets("Planning").Cells(i, 19).Value
            WorkCenterMaintenance = FichierMaintenance.Worksheets("Planning").Cells(i, 9).Value
            
            If SemaineMaintenance = SemaineUtilisateur And WorkCenterMaintenance = WorkCenterPlanning5L Then
                OT = FichierMaintenance.Worksheets("Planning").Cells(i, 3).Value
                EtatImmoMachine = FichierMaintenance.Worksheets("Planning").Cells(i, 13).Value
                EtatImmoOperateur = FichierMaintenance.Worksheets("Planning").Cells(i, 14).Value
                EnTeteOT = FichierMaintenance.Worksheets("Planning").Cells(i, 6).Value
            
                FichierPlanning.Worksheets("5 L").Cells(DerniereLignePlanningS5L, 1).Value = SemaineMaintenance
                FichierPlanning.Worksheets("5 L").Cells(DerniereLignePlanningS5L, 3).Value = OT
                FichierPlanning.Worksheets("5 L").Cells(DerniereLignePlanningS5L, 10).Value = EnTeteOT
                FichierPlanning.Worksheets("5 L").Cells(DerniereLignePlanningS5L, 5).Value = EtatImmoMachine
                FichierPlanning.Worksheets("5 L").Cells(DerniereLignePlanningS5L, 7).Value = EtatImmoOperateur
            End If
            Next i
        End
        '*****************************************************************************************
    
    End Sub
    La partie 'Pour S1L fonctionne et j'ai voulu adapter pour 'Pour S5L mais là ça ne fonctionne pas.

    Si quelqu'un à une idée?

    Merci d'avance.

    -----

  2. #2
    invite0bbe92c0

    Re : Un soucis dans mon code??? VBA

    Bonjour

    Citation Envoyé par matthieu2 Voir le message
    Si quelqu'un à une idée?
    Je ne connais pas du tout VBA, mais, en regardant en diagonale, un truc saute aux yeux : pourquoi y-a-t-il un END après le NEXT de la première boucle ? (idem après la deuxième d'ailleurs).
    a priori, il n'a rien à faire là.

  3. #3
    invited8344905

    Re : Un soucis dans mon code??? VBA

    Bonjour Bluedeep,

    C'était effectivement bien ça

    N'étant pas expert non plus, il me semblait qu'il fallait faire un "End" à la fin de la boucle "For".

    Merci beaucoup

  4. #4
    invite948b37db

    Re : Un soucis dans mon code??? VBA

    Citation Envoyé par matthieu2 Voir le message
    N'étant pas expert non plus, il me semblait qu'il fallait faire un "End" à la fin de la boucle "For".
    Non, c'est l'instruction NEXT qui termine l'instruction FOR

  5. A voir en vidéo sur Futura
  6. #5
    CM63

    Re : Un soucis dans mon code??? VBA

    C'est un "Next" qu'il faut mettre, c'est ça?

  7. #6
    invite948b37db

    Re : Un soucis dans mon code??? VBA

    Citation Envoyé par CM63 Voir le message
    C'est un "Next" qu'il faut mettre, c'est ça?
    Oui et il est déjà dans ton code sous la forme "Next i"
    Le i n'est pas obligatoire mais il facilite la relecture du code. On sait ainsi à quel For il rattaché.

  8. #7
    invited8344905

    Re : Un soucis dans mon code??? VBA

    Bonjour,

    Merci pour les précisions.

    Petit soucis encore. Dans la boucle "If" je test s'il y a des correspondances et si c'est le cas alors je fais de la copie de donnée depuis le FichierMaintenace Vers le FichierPlanning. Cependant, il se peux qu'il y est plusieurs lignes à copier dans FichierPlanning (et sur mon test c'est le cas). Le programme ne me retourne qu'une seule opération de maintenance alors que j'en ai mis une dixaine (pour tester).

    J'ai modifié l'emplacement de la détermination de la variable DerniereLignePlanning comme ici:
    Code:
     '*****************************************************************************************
        'Pour N1L
        
        Dim DerniereLignePlanningN1L As Long
        'DerniereLignePlanningN1L = FichierPlanning.Worksheets("1 L").Range("A" & Rows.Count).End(xlUp).Row
        Dim WorkCenterPlanning1L
        WorkCenterPlanning1L = "Asset F&P Nord 1L"
        
        For i = 3 To DerniereLigneMaint
            SemaineMaintenance = FichierMaintenance.Worksheets("Planning").Cells(i, 19).Value
            WorkCenterMaintenance = FichierMaintenance.Worksheets("Planning").Cells(i, 9).Value
            
            If SemaineMaintenance = SemaineUtilisateur And WorkCenterMaintenance = WorkCenterPlanning1L Then
                OT = FichierMaintenance.Worksheets("Planning").Cells(i, 3).Value
                EtatImmoMachine = FichierMaintenance.Worksheets("Planning").Cells(i, 13).Value
                EtatImmoOperateur = FichierMaintenance.Worksheets("Planning").Cells(i, 14).Value
                EnTeteOT = FichierMaintenance.Worksheets("Planning").Cells(i, 6).Value
                
                DerniereLignePlanningN1L = FichierPlanning.Worksheets("1 L").Range("A" & Rows.Count).End(xlUp).Row
    
                FichierPlanning.Worksheets("1 L").Cells(DerniereLignePlanningN1L, 1).Value = SemaineMaintenance
                FichierPlanning.Worksheets("1 L").Cells(DerniereLignePlanningN1L, 3).Value = OT
                FichierPlanning.Worksheets("1 L").Cells(DerniereLignePlanningN1L, 10).Value = EnTeteOT
                FichierPlanning.Worksheets("1 L").Cells(DerniereLignePlanningN1L, 5).Value = EtatImmoMachine
                FichierPlanning.Worksheets("1 L").Cells(DerniereLignePlanningN1L, 7).Value = EtatImmoOperateur
            End If
        Next i
        
        '*****************************************************************************************
    Si je déroule le programme (en prenant le cas ou ça match): Si c'est égale alors tu stockes les données de la maintenance (dans OT, EtatImmoMachine, EtatImmoOperateur et EnTeteOT), tu recherches la dernière ligne du fichier planning et tu colles. Seconde bouble: ça match, tu stockes les data, tu recherche LA NOUVELLE Dernière ligne (sachant qu'avant les données ont été copiées) donc normalement DerniereLignePlanning + 1 mais un MsgBox DerniereLignePlanning je m'aperçois qu'il n'incrémente pas la variable...

    Je dois obligatoirement passer par une seconde boucle ou il y a quelque chose que j'ai mal fait?

    Cordialement,

  9. #8
    invite948b37db

    Re : Un soucis dans mon code??? VBA

    L'instruction d'incrémentation est placée avant la copie des données donc ne sert à rien pour ce cas.
    Essaie en insérant
    Code:
    DerniereLignePlanningN1L = FichierPlanning.Worksheets("1 L").Range("A" & Rows.Count).End(xlUp).Row
    dans la ligne immédiatement supérieur à End If.
    Elle sera exécutée après la copie des données.

  10. #9
    invited8344905

    Re : Un soucis dans mon code??? VBA

    Eu, comme ça?
    Code:
    '*****************************************************************************************
        'Pour N1L
        
        Dim DerniereLignePlanningN1L As Long
        'DerniereLignePlanningN1L = FichierPlanning.Worksheets("1 L").Range("A" & Rows.Count).End(xlUp).Row
        Dim WorkCenterPlanning1L
        WorkCenterPlanning1L = "Asset F&P Nord 1L"
        
        For i = 3 To DerniereLigneMaint
            SemaineMaintenance = FichierMaintenance.Worksheets("Planning").Cells(i, 19).Value
            WorkCenterMaintenance = FichierMaintenance.Worksheets("Planning").Cells(i, 9).Value
            
            If SemaineMaintenance = SemaineUtilisateur And WorkCenterMaintenance = WorkCenterPlanning1L Then
                OT = FichierMaintenance.Worksheets("Planning").Cells(i, 3).Value
                EtatImmoMachine = FichierMaintenance.Worksheets("Planning").Cells(i, 13).Value
                EtatImmoOperateur = FichierMaintenance.Worksheets("Planning").Cells(i, 14).Value
                EnTeteOT = FichierMaintenance.Worksheets("Planning").Cells(i, 6).Value
                
                'DerniereLignePlanningN1L = FichierPlanning.Worksheets("1 L").Range("A" & Rows.Count).End(xlUp).Row
                
                FichierPlanning.Worksheets("1 L").Cells(DerniereLignePlanningN1L, 1).Value = SemaineMaintenance
                FichierPlanning.Worksheets("1 L").Cells(DerniereLignePlanningN1L, 3).Value = OT
                FichierPlanning.Worksheets("1 L").Cells(DerniereLignePlanningN1L, 10).Value = EnTeteOT
                FichierPlanning.Worksheets("1 L").Cells(DerniereLignePlanningN1L, 5).Value = EtatImmoMachine
                FichierPlanning.Worksheets("1 L").Cells(DerniereLignePlanningN1L, 7).Value = EtatImmoOperateur
            
                DerniereLignePlanningN1L = FichierPlanning.Worksheets("1 L").Range("A" & Rows.Count).End(xlUp).Row
            End If
        Next i
        
        '*****************************************************************************************
    Si oui, le soucis c'est qu'il ne connait pas DerniereLignePlanning quand il doit copier donc il plante.

  11. #10
    invite948b37db

    Re : Un soucis dans mon code??? VBA

    Il te faut 2 fois cette instruction. Supprime l'apostrophe juste avant la copie.

  12. #11
    invited8344905

    Re : Un soucis dans mon code??? VBA

    Non ça ne fonctionne pas non plus

  13. #12
    invite948b37db

    Re : Un soucis dans mon code??? VBA

    Citation Envoyé par matthieu2 Voir le message
    Non ça ne fonctionne pas non plus
    Qu'est-ce qui ne fonctionne pas ?
    Dans un message précédant, tu parles de deux boucles et je n'en vois qu'une ?

  14. #13
    invited8344905

    Re : Un soucis dans mon code??? VBA

    Bonjour,

    J'ai du mal m'exprimer. Les deux critères testés sont dans le "IF" avec le "AND"

  15. #14
    invited8344905

    Re : Un soucis dans mon code??? VBA

    Bonjour,

    Voici la solution que j'ai trouvé:
    Code:
    '*****************************************************************************************
        'Pour N1L
        
        Dim DerniereLignePlanningN1L As Long
        Dim WorkCenterPlanning1L
        WorkCenterPlanning1L = "Asset F&P Nord 1L"
        
        For i = 3 To DerniereLigneMaint
            SemaineMaintenance = FichierMaintenance.Worksheets("Planning").Cells(i, 19).Value
            WorkCenterMaintenance = FichierMaintenance.Worksheets("Planning").Cells(i, 9).Value
            
            
            If SemaineMaintenance = SemaineUtilisateur And WorkCenterMaintenance = WorkCenterPlanning1L Then
                OT = FichierMaintenance.Worksheets("Planning").Cells(i, 3).Value
                EtatImmoMachine = FichierMaintenance.Worksheets("Planning").Cells(i, 13).Value
                EtatImmoOperateur = FichierMaintenance.Worksheets("Planning").Cells(i, 14).Value
                EnTeteOT = FichierMaintenance.Worksheets("Planning").Cells(i, 6).Value
                
                DerniereLignePlanningN1L = FichierPlanning.Worksheets("1 L").Range("A" & Rows.Count).End(xlUp).Row + 1
                
                FichierPlanning.Worksheets("1 L").Cells(DerniereLignePlanningN1L, 1).Value = SemaineMaintenance
                FichierPlanning.Worksheets("1 L").Cells(DerniereLignePlanningN1L, 3).Value = OT
                FichierPlanning.Worksheets("1 L").Cells(DerniereLignePlanningN1L, 10).Value = EnTeteOT
                FichierPlanning.Worksheets("1 L").Cells(DerniereLignePlanningN1L, 5).Value = EtatImmoMachine
                FichierPlanning.Worksheets("1 L").Cells(DerniereLignePlanningN1L, 7).Value = EtatImmoOperateur
            End If
        Next i
        
        '*****************************************************************************************
    J'ai rajouté un "+1" à mon count dans DerniereLignePlannigN1L et cela fonctionne à merveille

Discussions similaires

  1. Soucis code (asm) en interruption.
    Par Laboum dans le forum Électronique
    Réponses: 20
    Dernier message: 26/10/2014, 18h26
  2. Compensateur synchrone : Soucis dans mes mesures
    Par invite114fb694 dans le forum Électronique
    Réponses: 0
    Dernier message: 26/11/2009, 18h25
  3. [Brun] soucis installation clavier a code rts de somfy
    Par invitec7319f39 dans le forum Dépannage
    Réponses: 1
    Dernier message: 04/09/2008, 09h32
  4. Petit soucis dans un dm de TS
    Par invite2ade688b dans le forum Mathématiques du collège et du lycée
    Réponses: 3
    Dernier message: 07/04/2007, 15h46
  5. Soucis Tv thomson chassis ICC20 (double soucis) code err??
    Par invitefc4774fc dans le forum Dépannage
    Réponses: 6
    Dernier message: 03/03/2007, 15h23