XL 2019 incrémentation fichier automatiquement

Quicksland

XLDnaute Occasionnel
Bonjour le forum ;)

J'ai un fichier Excel que je récupère d'un logiciel tiers (effectifs réel par point de livraison ) non structuré mais qui reste identique chaque jours

avec ce fichier je souhaiterai pouvoir alimenter automatiquement le fichier(VINAIGRETTE AUTOMATIQUE) qui celui ci me convient parfaitement

toutes les cellules jaune dans (effectifs réel par point de livraison) alimente toutes les cellules jaune du fichier (VINAIGRETTE AUTOMATIQUE)

Je vous remercie
 

Pièces jointes

  • Effectifs réels par point de livraison.xlsx
    14.4 KB · Affichages: 16
  • VINAIGRETTE AUTOMATIQUE.xlsm
    27.3 KB · Affichages: 15

vgendron

XLDnaute Barbatruc
Bonjour

Avant de se lancer dans du code, il y a plusieurs choses
1) les données de ton fichier "Vinaigrette" ne correspondent pas à celles du fichier "Effectifs"
ex: la date n'est pas la meme
les totaux ne sont pas les memes..

2) dans le fichier Vinaigrette
Pourquoi fusionner les lignes deux par deux? ca complique systémtiquemnet le tratieemnt alors qu'il suffit d'agrandir la hauteur des lignes

3) pourquoi les lignes "Casse" / "Laboratoire" / "Personnel UPC" ne sont elles pas importées ?
 

Quicksland

XLDnaute Occasionnel
Bonjour

Avant de se lancer dans du code, il y a plusieurs choses
1) les données de ton fichier "Vinaigrette" ne correspondent pas à celles du fichier "Effectifs"
ex: la date n'est pas la meme
les totaux ne sont pas les memes..

2) dans le fichier Vinaigrette
Pourquoi fusionner les lignes deux par deux? ca complique systémtiquemnet le tratieemnt alors qu'il suffit d'agrandir la hauteur des lignes

3) pourquoi les lignes "Casse" / "Laboratoire" / "Personnel UPC" ne sont elles pas importées ?
Bonjour vgendron

Merci pour ta réponse 👍

En pj le fichier avec modification de la date et des effectifs identique au fichier source
J'ai aussi modifier la fusion des cellules si plus pratique pour le traitement et codage ;)

La ligne "Casse" / "Laboratoire" / "Personnel " ne nous intéresse pas vu que c'est un prévisionnel
de ce fait la "casse" est rentrer après coup si besoin , la ligne "laboratoire" est automatique et pour le personnel la encore rentrer le jour J dans une autre feuille "effectifs réel" qui nous sert pas pour l'automatisation

Je souhaiterai également que la macro fonctionne avec la feuille protégée par mot de passe

Voila je pense avoir répondu a tes questions

je te remercie par avance pour l'aide
 

Pièces jointes

  • VINAIGRETTE AUTOMATIQUE - Copie.xlsm
    25.2 KB · Affichages: 7

vgendron

XLDnaute Barbatruc
code à mettre dans un module standard dans le fichier Vinaigrette

VB:
Sub MajDonnées()
Dim WBOrigine As Workbook
Dim WBDest As Workbook
Dim WSOrigine As Worksheet
Dim WSDest As Worksheet

Dim TabData() As Variant
Dim fin, i, j As Long
Dim NomEcole As String
Dim Jour As Date

Set WBDest = ActiveWorkbook 'fichier actif
Set WBOrigine = Workbooks("Effectifs Réels par point de livraison.xlsx") 'le fichier est ouvert

Set WSOrigine = WBOrigine.Sheets("A") 'la feuille de données DOIT s'appeler "A"
Set WSDest = WBDest.Sheets("RESULTAT") 'la feuille de résultat

With WSOrigine 'dans le fichier origine
    fin = .Range("A" & .Rows.Count).End(xlUp).Row 'dernière ligne NON vide de la colonne A
    Jour = .Range("C2") 'on récupère le jour
    TabData = .Range("A5:O" & fin).Value 'on place toutes les données dans un tableau vba (plus rapide pour le traitement ensuite)
End With

With WSDest 'dans la feuille de résultat
    .Range("A4") = Jour 'on colle le jour
    fin = .Range("B" & .Rows.Count).End(xlUp).Row 'dernière ligne NON vide de la colonne B
    For i = 8 To fin 'pour chaque ligne
        NomEcole = Trim(.Range("B" & i)) 'on récupère le nom de l'école en enlevant tous les espaces qui trainent
        For j = LBound(TabData, 1) To UBound(TabData, 1) - 1 'pour chaque ligne du tableau
            If TabData(j, 1) Like "*" & NomEcole And TabData(j + 1, 1) = "Total" Then 'on cherche la ligne qui contient le nom de l'école avec le mot "Total" en dessous
                .Range("D" & i) = TabData(j + 1, 10) 'on récupère la valeur
                Exit For 'pas besoin de continuer à parcourir le tableau
            End If
        Next j
    Next i
End With
End Sub
 

Quicksland

XLDnaute Occasionnel
code à mettre dans un module standard dans le fichier Vinaigrette

VB:
Sub MajDonnées()
Dim WBOrigine As Workbook
Dim WBDest As Workbook
Dim WSOrigine As Worksheet
Dim WSDest As Worksheet

Dim TabData() As Variant
Dim fin, i, j As Long
Dim NomEcole As String
Dim Jour As Date

Set WBDest = ActiveWorkbook 'fichier actif
Set WBOrigine = Workbooks("Effectifs Réels par point de livraison.xlsx") 'le fichier est ouvert

Set WSOrigine = WBOrigine.Sheets("A") 'la feuille de données DOIT s'appeler "A"
Set WSDest = WBDest.Sheets("RESULTAT") 'la feuille de résultat

With WSOrigine 'dans le fichier origine
    fin = .Range("A" & .Rows.Count).End(xlUp).Row 'dernière ligne NON vide de la colonne A
    Jour = .Range("C2") 'on récupère le jour
    TabData = .Range("A5:O" & fin).Value 'on place toutes les données dans un tableau vba (plus rapide pour le traitement ensuite)
End With

With WSDest 'dans la feuille de résultat
    .Range("A4") = Jour 'on colle le jour
    fin = .Range("B" & .Rows.Count).End(xlUp).Row 'dernière ligne NON vide de la colonne B
    For i = 8 To fin 'pour chaque ligne
        NomEcole = Trim(.Range("B" & i)) 'on récupère le nom de l'école en enlevant tous les espaces qui trainent
        For j = LBound(TabData, 1) To UBound(TabData, 1) - 1 'pour chaque ligne du tableau
            If TabData(j, 1) Like "*" & NomEcole And TabData(j + 1, 1) = "Total" Then 'on cherche la ligne qui contient le nom de l'école avec le mot "Total" en dessous
                .Range("D" & i) = TabData(j + 1, 10) 'on récupère la valeur
                Exit For 'pas besoin de continuer à parcourir le tableau
            End If
        Next j
    Next i
End With
End Sub
Jai mis le code dans module 1( voir fichier en pj )

Mais cela ne fonctionne pas

Merci
 

Pièces jointes

  • VINAIGRETTE.xlsm
    28.6 KB · Affichages: 4

vgendron

XLDnaute Barbatruc
ca fonctionne très bien pour peu que tu ne modifies pas la structure de ton fichier entre temps..
la date n'est plus à metre en A4, mais A2
la première ligne n'est plus la ligne 8 mais la ligne 4

il faut donc adapter le code
 

Quicksland

XLDnaute Occasionnel
ca fonctionne très bien pour peu que tu ne modifies pas la structure de ton fichier entre temps..
la date n'est plus à metre en A4, mais A2
la première ligne n'est plus la ligne 8 mais la ligne 4

il faut donc adapter le code
Re

je change dans le code les valeurs que j'ai mis en rouge ?

With WSDest 'dans la feuille de résultat
.Range("A4") = Jour 'on colle le jour
fin = .Range("B" & .Rows.Count).End(xlUp).Row 'dernière ligne NON vide de la colonne B
For i = 8 To fin 'pour chaque ligne
 

Quicksland

XLDnaute Occasionnel
si la feuille est protégée, il faut la déprotéger puis la reprotéger
va voir du coté de unprotect
Re

C'est sur mais j'aurai préférer ne pas faire le mot de passe a chaque fois

Sinon j'ai récupérer ce bout de code qui fonctionne sur un autre fichier

" .Protect userinterfaceonly:=True, Contents:=True, Password:="....." "

mais je ne sais pas l'incorporer avec ton code
 

vgendron

XLDnaute Barbatruc
La protection et déprotection peut se faire par la macro elle meme

il suffit de déprotéger la feuille en début de macro avec
sheets("Nom de la feuille").unprotect, password:="Ton Password")

et reprotéger en fin de macro
sheets("Nom de la feuille").protect, password:="Ton Password")

Comme je ne sais pas quel classeur est protégé (Classeur Origine ou Classeur destination??)
je te laisse adapater
 

Quicksland

XLDnaute Occasionnel
La protection et déprotection peut se faire par la macro elle meme

il suffit de déprotéger la feuille en début de macro avec
sheets("Nom de la feuille").unprotect, password:="Ton Password")

et reprotéger en fin de macro
sheets("Nom de la feuille").protect, password:="Ton Password")

Comme je ne sais pas quel classeur est protégé (Classeur Origine ou Classeur destination??)
je te laisse adapater
Bonjour vgendron

Donc je met ceci "
sheets("RESULTAT").protect, password:="Quicksland")

VB:
Sub MajDonnées()
sheets("RESULTAT").unprotect, password:="Quicksland")
Dim WBOrigine As Workbook
Dim WBDest As Workbook
Dim WSOrigine As Worksheet
Dim WSDest As Worksheet

Dim TabData() As Variant
Dim fin, i, j As Long
Dim NomEcole As String
Dim Jour As Date

Set WBDest = ActiveWorkbook 'fichier actif
Set WBOrigine = Workbooks("Effectifs Réels par point de livraison.xlsx") 'le fichier est ouvert

Set WSOrigine = WBOrigine.Sheets("A") 'la feuille de données DOIT s'appeler "A"
Set WSDest = WBDest.Sheets("RESULTAT") 'la feuille de résultat

With WSOrigine 'dans le fichier origine
    fin = .Range("A" & .Rows.Count).End(xlUp).Row 'dernière ligne NON vide de la colonne A
    Jour = .Range("C2") 'on récupère le jour
    TabData = .Range("A5:O" & fin).Value 'on place toutes les données dans un tableau vba (plus rapide pour le traitement ensuite)
End With

With WSDest 'dans la feuille de résultat
    .Range("A4") = Jour 'on colle le jour
    fin = .Range("B" & .Rows.Count).End(xlUp).Row 'dernière ligne NON vide de la colonne B
    For i = 8 To fin 'pour chaque ligne
        NomEcole = Trim(.Range("B" & i)) 'on récupère le nom de l'école en enlevant tous les espaces qui trainent
        For j = LBound(TabData, 1) To UBound(TabData, 1) - 1 'pour chaque ligne du tableau
            If TabData(j, 1) Like "*" & NomEcole And TabData(j + 1, 1) = "Total" Then 'on cherche la ligne qui contient le nom de l'école avec le mot "Total" en dessous
                .Range("D" & i) = TabData(j + 1, 10) 'on récupère la valeur
                Exit For 'pas besoin de continuer à parcourir le tableau
            End If
        Next j
    Next i
End With
sheets("RESULTAT").unprotect, password:="Quicksland")
End Sub

Merci
 

Discussions similaires

Réponses
12
Affichages
529

Statistiques des forums

Discussions
312 215
Messages
2 086 330
Membres
103 187
dernier inscrit
ebenhamel