travail sur 3 variables

nonodu37 Messages postés 5 Date d'inscription dimanche 28 décembre 2008 Statut Membre Dernière intervention 3 mars 2009 - 13 janv. 2009 à 23:29
nonodu37 Messages postés 5 Date d'inscription dimanche 28 décembre 2008 Statut Membre Dernière intervention 3 mars 2009 - 27 janv. 2009 à 18:45
Bonsoir,

Je cherche à corriger ce code pour mon travail, mon niveau est plutôt basique en VBA j'ai simplement suivi une formation VBA excel mes notions en code s'arrêtent à peu près là ...

Voilà mon problème :
Je souhaite 1) coller une feuille dans un fichier 
                  2) la nommer suivant une variable (Rep), 
                  3) nommer le fichier créé suivant deux variables agence et mois 
                  4) puis insérer la même feuille qui est modifié d'une variable (Rep), les chiffres se mettent à jour par des formules automatiquement générées, on passe donc du Rep 1 au 2, on copie la feuille dans le fichier Agence & mois avant la 1ère feuille on nomme toujours la feuille copié du nom du vendeur, ainsi de suite jusqu'à la prochaine agence .

J'arrive à copier la première entité , à nommer le fichier mais çà bloque quand je passe à la deuxième entité dépendante de la variable Rep
Le code bloque quand je nomme la deuxième feuille çà ne nomme pas la deuxième feuille

    Dim Rep                 'L'entité




    Dim Agence




    Dim Mois              

    Dim Entité




    Dim CompteRep




    Dim Newfile1




    Dim Newfile2




    Dim RepName




   




    ' ---------------------------------------------------------




    ' TROUVER DYNAMIQUEMENT  LE NB DE LIGNES ...






    ' Selection.CurrentRegion.Select            'CTRL + * => Sel tableau




    ' nbligne = selection.rows.Count




    ' ---------------------------------------------------------






   




    Windows("Reporting commercial vers powerpoint").Activate




                   




                           ' on charge dans une variable le contenu d'une cellule




       




        Sheets("New entity").Select




            RepName = Range("A2").Text




            Agence = Range("A15").Text




            Entite = Range("A16").Text




            Mois = Range("D13").Text




       




   




    For Rep = 1 To 200




   




   




     'Changes rep




        Windows("Reporting commercial vers powerpoint").Activate






        Sheets("New entity").Select




        Range("F2").Value = Rep + 1




       




    Calculate




    Sheets("New entity").Select      ' Selection de feuille




    Sheets("New entity").Copy




   




        'Gets file names




        'Copier new diapo dans un nouveau classeur et l'enregistrer sous BIFRANCE2006\Reporting commercial






   




        ActiveWorkbook.SaveAs Filename:= _




    "c:\Mes documents" & Agence & "-" & Mois & ".xls", FileFormat:=xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, CreateBackup:=False




        Sheets("New entity").Name = Entite




Range("A1").Activate




        'Looks if it needs to create a new file




   




        Windows("Reporting commercial vers powerpoint").Activate






        Newfile1 = Sheets("Engine").Cells(Rep + 3, 7).Value




        Newfile2 = Sheets("Engine").Cells(Rep + 4, 7).Value




   




    ' ---------------------------------------------------------




    ' soit un rep exist => duplique la feuille (ELSE)




    ' soit pas de rep => enregistre (THEN)




    ' ---------------------------------------------------------






       




        If Newfile1 <> Newfile2 Then




            Sheets("New entity").Select




            Sheets("New entity").Copy




            ActiveWorkbook.SaveAs Filename:= _




    "c:\mes doc" & Agence & "-" & Mois & ".xls", FileFormat _




    :=xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:= _




    False, CreateBackup:=False




       




        Else




            Sheets("New entity").Select




            Sheets("New entity").Copy before:=Workbooks(Agence & "-" & Mois & ".xls").Worksheets(1)




   




           




       




        End If




        Sheets("New entity").Select




        Sheets("New entity").Name = Entite




           




    ActiveWorkbook.Save




   




   




Next Rep




           




End Sub




Je cherche depuis des mois cette solution j'ai confiance dans les experts de ce forum pour m'aider .

D'avance merci beaucoup j'essayerais d'apporter le plus de précisions possibles si vous voulez bien m'aider.

4 réponses

jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
14 janv. 2009 à 11:43
Tu ne types pas tes variables (aucune !) ?
J'ai alors des difficultés à savoir (entre autres) ce que peut faire exactement et à coup sûr :
Range("F2").Value = Rep + 1
0
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
14 janv. 2009 à 11:54
Et tu copies 200 fois, apparemment, ma même chose vers la même destination juste après calculate


Peux-tu commenter ton code et dire, sur chaque ligne, ce que tu veux réellement faire (en précisant la source et la destination) ?
0
nonodu37 Messages postés 5 Date d'inscription dimanche 28 décembre 2008 Statut Membre Dernière intervention 3 mars 2009
18 janv. 2009 à 23:24
Bonsoir,

Je vais apporter quelques précisions  voire corrections à mon code 

Dim Rep                as integer 'L'entité
    Dim Agence         Format texte du style Nom de l'agence_numéro de département 
    Dim Mois as date    ' Format Date         
    Dim Entité                ' format nom_matricule  
    <strike>Dim CompteRep</strike> j'efface cette variable
    Dim Newfile1 as integer
    Dim Newfile2 as integer  ces deux variables représentent chacune une agence si ces deux agences sont différentes alors créer un nouveau fichier sous le format agence & mois et coller la feuille source sur l'onglet sinon coller
     
   représentant /
    ' ---------------------------------------------------------
    ' TROUVER DYNAMIQUEMENT  LE NB DE LIGNES ...

    ' Selection.CurrentRegion.Select            'CTRL + * => Sel tableau
    ' nbligne = selection.rows.Count
    ' ---------------------------------------------------------

   
    Windows("Reporting commercial vers powerpoint").Activate
                   
                           ' on charge dans une variable le contenu d'une cellule
       
        Sheets("New entity").Select
          <strike>  RepName = Range("A2").Text</strike>
            Agence = Range("A15").Text
            Entite = Range("A16").Text
            Mois = Range("D13").Text
       
   
    For Rep = 1 To 200  'la boucle tourne autant de fois qu'il y a de vendeurs 200 est un exemple j'aimerai compter dans une colonne définie le nombre de cellules non vides ce qui conduit à déterminer n au lieu de 200    
    
     'Changes rep
        Windows("Reporting commercial vers powerpoint").Activate 'Fichier source

        Sheets("New entity").Select  ' feuille source de ce fichier 
        Range("F2").Value = Rep <strike> + 1</strike><strike></strike>
       
    Calculate 'mise à jour liée à Hyperion la feuille source contient une liste déroulante dans laquelle on a tous les vendeurs 1à n à chaque vendeur apparaît ses statistiques liés à une base de données.

    Sheets("New entity").Select      ' Selection de feuille
    Sheets("New entity").Copy
   
        'Gets file names
        'Copier new diapo dans un nouveau classeur et l'enregistrer sous C:/mes documents 

    
        ActiveWorkbook.SaveAs Filename:= _
    "c:\Mes documents" & Agence & "-" & Mois & ".xls", FileFormat:=xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, CreateBackup:=False
        Sheets("New entity").Name = Entite 'la feuille collée dans le fichier Agence&mois se nomme comme l'entité dans la liste déroulante 
Range("A1").Activate
        'Looks if it needs to create a new file
   
        Windows("Reporting commercial vers powerpoint").Activate

        Newfile1 = Sheets("Engine").Cells(Rep + 3, 7).Value
        Newfile2 = Sheets("Engine").Cells(Rep + 4, 7).Value
   
    ' ---------------------------------------------------------
    ' soit un rep exist => duplique la feuille (ELSE)
    ' soit pas de rep => enregistre (THEN)
    ' ---------------------------------------------------------

       
        If Newfile1 <> Newfile2 Then ' si les deux agences sont différentes alors on créer un fichier et on colle la feuille new entity" du fichier source dans le fichier Agence & mois
            Sheets("New entity").Select
            Sheets("New entity").Copy
            ActiveWorkbook.SaveAs Filename:= _
    "c:\mes doc" & Agence & "-" & Mois & ".xls", FileFormat _
    :=xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:= _
    False, CreateBackup:=False
       
        Else    sinon je copie new entity avant feuille (1) de agence & mois
            Sheets("New entity").Select
            Sheets("New entity").Copy before:=Workbooks(Agence & "-" & Mois & ".xls").Worksheets(1)
   
           
       
        End If
        Sheets("New entity").Select
        Sheets("New entity").Name = Entite 
            
    ActiveWorkbook.Save
   
   
Next Rep
           
End Sub

je bloque au moment où je dois passer dans la liste déroulante du rep 1 au 2, le 1 se colle l'onglet et correctement nommé, le fichier de même mais au rep 2 il colle une deuxième fois le rep 1 à côté créer un fichier refuse d le renommer normal l'agence est identique mais il colle bien le rep 2.
il y a des maladresses et des répétitions de lignes dans ce code mais j'aimerais avoir une méthode en fait c'est ma première macro qui suppose de manipuler des variables et je vous remercie par avance de votre patience.
C'est fastidieux à expliquer et relativement clair pourtant quand on l'a sous les yeux :-)
Bonne soirée,
0
nonodu37 Messages postés 5 Date d'inscription dimanche 28 décembre 2008 Statut Membre Dernière intervention 3 mars 2009
27 janv. 2009 à 18:45
Es ce que quelqu'un de bienveillant pourrait m'aider s'il vous plaît ?

Merci,
0
Rejoignez-nous