Remplissage d'un classeur en vba

Manu13

XLDnaute Occasionnel
Bonjour le Forum,

les explications de ce que j'essaye de faire sont dans le classeur A

en espérant être clair dans mes explications

bonne journée à tous et merci pour votre aides

Manu
 

Pièces jointes

  • test.zip
    29.9 KB · Affichages: 41
  • test.zip
    29.9 KB · Affichages: 44
  • test.zip
    29.9 KB · Affichages: 43

Hippolite

XLDnaute Accro
Re : Remplissage d'un classeur en vba

Bonjour,
VB:
Sub Bouton1_Clic()
    Dim Desti As Workbook, R As Range, Chemin$, Onglet$, Nom$, sh As Worksheet
    Dim Semaine%, c As Range, n$

    Chemin = ThisWorkbook.Path & "\Frais\"
    Nom = Cells(ActiveCell.Row, 1).Value
    Semaine = Selection.Offset(0, 4)

    Set Desti = Workbooks.Open(Chemin & Nom & ".xls")
    For Each sh In Desti.Sheets
    n = sh.Name
        Set c = sh.Range("B9:F9").Find(Semaine, LookIn:=xlValues)
        If Not c Is Nothing Then
            'c est la cellule qui contient le n° de semaine donc ici, on peut
            'renseigner directement la colonne avec c.Offset...
            Onglet = sh.Name
            Exit For
        End If
    Next sh
End Sub
A+
 

Manu13

XLDnaute Occasionnel
Re : Remplissage d'un classeur en vba

Bonjour Hippolite,

Merci pour ta réponse
désolé, je n'ai pas tout suivie
quelle est l'utilité de " n = sh.Name "
quelque soit le N° de semaine c'est toujours l'onglet "Janvier" qui s'ouvre...

sinon, je n'arrive pas à renseigner les cellules du classeurs dupont en fonction du classeur A
en tout cas merci pour ton aide

amicalement,
Manu
 

Manu13

XLDnaute Occasionnel
Re : Remplissage d'un classeur en vba

Re,

avant de l'adapter à mon fichier d'origine, je fait le test sur le fichier que j'ai joint à mon post, mais voilà comme dit dans mon dernier message, ça n'ouvre pas sur le bonne onglet et je n'arrive pas à compléter la syntaxe " c.offset...." afin de renseigner le classeur " dupont ".
merci pour ton aide
a+
 

Hippolite

XLDnaute Accro
Re : Remplissage d'un classeur en vba

Bonjour,
ça n'ouvre pas sur le bon onglet
normal, ce n'est pas demandé, je te l'ai ajouté en option, ça n'empêche pas la cellule "c" d'être correctement positionnée.
je n'arrive pas à compléter la syntaxe " c.offset...."
Voir code joint.
Ne pas hésiter à uitiliser la touche F1 pour obtenir l'aide sur un élément de code.
VB:
Option Explicit
Sub Bouton1_Clic()
    Dim Desti As Workbook, R As Range, Chemin$, Onglet$, Nom$, sh As Worksheet
    Dim Semaine%, c As Range, Cnom As Range

    Application.ScreenUpdating = False
    Chemin = ThisWorkbook.Path & "\Frais\"
    Nom = Cells(ActiveCell.Row, 1).Value
    Set Cnom = Selection
    Semaine = Cnom.Offset(0, 4)
    Set Desti = Workbooks.Open(Chemin & Nom & ".xls")
    For Each sh In Desti.Sheets
        Set c = sh.Range("B9:F9").Find(Semaine, LookIn:=xlValues)
        If Not c Is Nothing Then
            'Je fais une addition au cas où il y aurait plusieurs fiches du meme jour
            'ça nécessite de mettre en place une RAZ avant un nouveau calcul
            c.Offset(2, 0) = c.Offset(2, 0) + Cnom.Offset(0, 6)
            c.Offset(6, 0) = c.Offset(6, 0) + Cnom.Offset(0, 7)
            c.Offset(9, 0) = c.Offset(9, 0) + Cnom.Offset(0, 8)
            Desti.Save
            ThisWorkbook.Activate  'optionnel pour rester sur le fichier A

            '   'SI tu veux afficher l'onglet avec la semaine, mais c'est inutile
            '   Onglet = sh.Name
            '   Sheets(Onglet).Activate
            '   c.Select

            Exit For
        End If
    Next sh
    Application.ScreenUpdating = True
End Sub
si tu ne veux pas sauvegarder à chaque fois que la macro est lancée, il faut faire un test pour s'assurer que le classeur "nom" est déjà ouvert et affecter le classeur à desti avec
Code:
Set Desti = Workbooks(Nom & ".xls")
Tout dépend comment tu utilises ce code, quand la partie "noble" du code sera fini, il faudra prévoir toute la gestion d'ouverture/fermeture des fichiers éventuellement déjà ouverts ou absents...
A+
 

Manu13

XLDnaute Occasionnel
Re : Remplissage d'un classeur en vba

Bonjour Hippolite,

Je te remercie vraiment beaucoup pour ton aide

, il faudra prévoir toute la gestion d'ouverture/fermeture des fichiers éventuellement déjà ouverts ou absents...

c'est prévu, cette partie ne devrait pas poser de problème à mettre en place, enfin je pense..., mais là, je bloquais vraiment sur le renseignement d'un tableau en double entrée.

Mille merci
bonne journée
Manu
 

Manu13

XLDnaute Occasionnel
Re : Remplissage d'un classeur en vba

Bonjour hippolite, bonjour le Forum,
je relance le fil, pour un un problème que je n'arrive à résoudre.
afin d'éviter que les données se retrouve dans la mauvaise feuille(mois), par exemple la semaine 13 est à cheval entre le mois de Mars et le mois d'Avril, je voulais que le code travaille seulement sur une feuille en fonction de la date

Code:
 Sub FraisDemo()
    Dim Desti As Workbook, R$, Chemin$, Nom$, sh As Worksheet
    Dim Semaine%, c As Range, Cnom As Range
    Dim mois$
    
    Application.ScreenUpdating = False
    R = Cells(ActiveCell.Row, 15) ' correspond à la colonne date au format jj-mmm
    mois = DatePart("m", R)
    Chemin = ThisWorkbook.Path & "\Frais\"
    Nom = Cells(ActiveCell.Row, 29).Value
    Set Cnom = Selection
    Semaine = Cnom.Offset(0, -15)
       
    Set Desti = Workbooks.Open(Chemin & Nom)
      
   ' For Each sh In Desti.Sheets ' du coup je me suis dis que la boucle sur les feuilles pour trouver le N° de semaine était inutile et j'ai voulu essayer avec, entre autre
           with desti.sheets(mois)
          
        Set c = sh.Range("B7:F7").Find(Semaine, LookIn:=xlValues)
         
        If Not c Is Nothing Then
        
            
           c.Offset(1, 0) = Cnom.Offset(0, -20)
           c.Offset(2, 0) = Cnom.Offset(0, 20)
            c.Offset(6, 0) = Cnom.Offset(0, 17)
            c.Offset(9, 0) = Cnom.Offset(0, 18)
            c.Offset(11, 0) = Cnom.Offset(0, 19)
            
        '  Exit For
    End If
'Next sh
    Application.ScreenUpdating = True
   End Sub

[\code]

Bonne journée
Manu
 

Statistiques des forums

Discussions
312 488
Messages
2 088 859
Membres
103 978
dernier inscrit
bderradji