piga25
XLDnaute Barbatruc
Bonjour,
Je préfère créer une nouvelle discussion car le motif est différent.
Toujours sur mon projet (lien: https://www.excel-downloads.com/thr...endre-en-comptes-les-cellules-vides.20025841/ )
je suis confronté à ces codes qui me copie un tableau pour le repartir sur certaine feuille et cela lors du changement de semaine. En opération inverse, il récupère sur les feuilles et me réinscrit les données sur le tableau tous cela au moyen d'ARRAY.
Mon problème:
- La première colonne n'est pas prise en compte. Je ne sais pas pourquoi.
- La répartition sur les feuilles ne correspond pas.
Pour essayer de mieux comprendre, j'ai annoté les codes, mais sans résultat probant.
Je préfère créer une nouvelle discussion car le motif est différent.
Toujours sur mon projet (lien: https://www.excel-downloads.com/thr...endre-en-comptes-les-cellules-vides.20025841/ )
je suis confronté à ces codes qui me copie un tableau pour le repartir sur certaine feuille et cela lors du changement de semaine. En opération inverse, il récupère sur les feuilles et me réinscrit les données sur le tableau tous cela au moyen d'ARRAY.
Mon problème:
- La première colonne n'est pas prise en compte. Je ne sais pas pourquoi.
- La répartition sur les feuilles ne correspond pas.
Pour essayer de mieux comprendre, j'ai annoté les codes, mais sans résultat probant.
VB:
Sub ImportWeek(NumSemaine As Integer)
Dim TabNom() As Variant
Dim TabDay() As Variant
Dim TabWeek() As Variant
Set WsS = Worksheets("Seizure week")
With WsS
FinNom = .Range("A7").End(xlDown).Row
TabNom = .Range("B7:B" & FinNom).Value
'on commence par effacer Morning et Afternoon
.Range("K7").Offset(1, 0).Resize(UBound(TabNom) - 1, 71).ClearContents
.Range("K7").Offset(UBound(TabNom) + 2).Resize(UBound(TabNom) - 1, 71).ClearContents
'on set TabDay (permet de garder les lignes d'entete SUN, MON....
TabDay = .Range("K7").Resize(UBound(TabNom) * 2 + 1, 62).Value
'TabDay doit correspondre à la plage : ligne 7, colonne K soit 11 à la dernière ligne d'afternoon colonne k, colonne BU soit colonne n°73
'mais comme cela demarre à la colonne n°11, pour avoir le bon tableau il faut 62
'.Range("B7").Resize(UBound(TabNom) * 2 + 1, 72).Select 'pour voir ce qui vient d'etre mis dans le tableau
NumLigne = NumSemaine + 3 'ligne de destination dans les feuilles "NomX"
End With
'on Remplit le tableau à partir des feuilles
For i = LBound(TabNom, 1) + 1 To UBound(TabNom, 1)
If FeuilleExiste(CStr(TabNom(i, 1))) Then
With Sheets(TabNom(i, 1))
For j = LBound(TabDay, 2) + 1 To UBound(TabDay, 2)
'J doit commencer à la colonne 2 pour cells(NumLigne,2)
TabDay(i, j) = .Cells(NumLigne, j + 1) 'première ligne dans morning
'J doit commencer à la colonne 65 pour cells(NumLigne,65)
TabDay(i + 1, j) = .Cells(NumLigne, j + 65) 'seconde ligne dans morning
'J doit commencer à la colonne 128 pour cells(NumLigne,128)
TabDay(i + UBound(TabNom, 1) + 1, j) = .Cells(NumLigne, j + 128) 'première ligne dans afternoon
'J doit commencer à la colonne 191 pour cells(NumLigne,191)
TabDay(i + 1 + UBound(TabNom, 1) + 1, j) = .Cells(NumLigne, j + 191) 'seconde ligne dans afternoon
Next j
End With
End If
Next i
'on colle le résultat dans la feuille
With WsS
.Range("K7").Resize(UBound(TabDay, 1), UBound(TabDay, 2)) = TabDay
End With
End Sub
Sub RecordSeizureWeek(NumSemaine As Integer)
Dim TabNom() As Variant
Dim TabDay() As Variant
Set WsS = Worksheets("Seizure week")
With WsS 'dans la feuille "Seizure week"
FinNom = .Range("A7").End(xlDown).Row 'dernière ligne du nom (en partant de B7 vers le bas (jusqu'à la première ligne vide -en fin de morning)
TabNom = .Range("B7:B" & FinNom).Value 'on met la liste des noms dans un tablo VBA
'on met tout le tableau (Morning + Afternoon) dans un tablo VBA
TabDay = .Range("K7").Resize(UBound(TabNom) * 2 + 1, 62).Value
'TabDay doit correspondre à la plage : ligne 7, colonne K soit 11 à la dernière ligne d'afternoon colonne k, colonne BU soit colonne n° 73
'mais comme cela demarre à la colonne n°11, pour avoir le bon tableau il faut 62
'.Range("B7").Resize(UBound(TabNom) * 2 + 1, 72).Select 'pour voir ce qui vient d'etre mis dans le tableau
NumLigne = NumSemaine + 3 'correspondance avec les feuilles Noms...
'on efface Morning et Afternoon
.Range("K8").Resize(UBound(TabNom) - 1, 71).ClearContents
.Range("K7").Offset(UBound(TabNom) + 2).Resize(UBound(TabNom) - 1, 71).ClearContents
End With
'on recopie le tableau dans les feuilles
For i = LBound(TabNom, 1) + 1 To UBound(TabNom, 1)
If FeuilleExiste(CStr(TabNom(i, 1))) Then
With Sheets(TabNom(i, 1))
For j = LBound(TabDay, 2) + 1 To UBound(TabDay, 2)
'J doit commencer à la colonne 2 pour cells(NumLigne,2)
.Cells(NumLigne, j + 1) = TabDay(i, j) 'première ligne morning
'J doit commencer à la colonne 65 pour cells(NumLigne,65)
.Cells(NumLigne, j + 65) = TabDay(i + 1, j) 'seconde ligne morning + 1 pour seconde ligne
'J doit commencer à la colonne 128 pour cells(NumLigne,128)
.Cells(NumLigne, j + 128) = TabDay(i + 1 + UBound(TabNom, 1), j) 'première ligne afternoon + 1 pour la ligne entre morning et afternoon
'J doit commencer à la colonne 191 pour cells(NumLigne,191)
.Cells(NumLigne, j + 191) = TabDay(i + 2 + UBound(TabNom, 1), j) 'seconde ligne afternoon + 2 pour la ligne entre morning et afternoon et seconde ligne
Next j
End With
End If
Next i
End Sub