Excel 2007 - Exporter des valeurs vers des feuilles nommées

chris6999

XLDnaute Impliqué
Bonjour le FORUM

Je souhaiterais avoir votre aide sur le projet suivant :

Je complète une feuille "Participations journée" pour une date saisie en C5.

Une fois cette grille complétée je voudrais exporter les valeurs saisies :
De la colonne C vers la feuille Réel Courrier (Je ne sais pas si ça peut aider mais le nom de l'onglet correspond à C8)
De la colonne D vers la feuille Réel R.Matricule

La valeur doit être bien sûr incrémentée sur la ligne où la date (colonne B) correspond à la date en C5 de ma feuille active.

Je joins un fichier test qui vaut mieux que de longs discours.

J'avoue avoir toujours beaucoup de mal à faire ce type de renvoi de valeur à partir de critères communs.

J'espère qu'une bonne âme pourra m'aider.

Bonne journée à tous et merci d'avance
 

Pièces jointes

  • excel test alimentation.xls
    340.5 KB · Affichages: 30
  • excel test alimentation.xls
    340.5 KB · Affichages: 46
  • excel test alimentation.xls
    340.5 KB · Affichages: 45

JBARBE

XLDnaute Barbatruc
Re : Excel 2007 - Exporter des valeurs vers des feuilles nommées

Bonjour à tous,

En cliquant sur la macro "transfert"

bonne journée
 

Pièces jointes

  • excel test alimentation.xls
    355.5 KB · Affichages: 35
  • excel test alimentation.xls
    355.5 KB · Affichages: 44
  • excel test alimentation.xls
    355.5 KB · Affichages: 31

chris6999

XLDnaute Impliqué
Re : Excel 2007 - Exporter des valeurs vers des feuilles nommées

Bonjour à tous,

En cliquant sur la macro "transfert"

bonne journée

Re JBARBE

Cela fonctionne très bien.
J'ai toutefois essayé d'ajouter un export sur le même principe pour renvoyer les valeurs de la ligne 8 vers la colonne 21 (toujours à partir du critère date) mais pas moyen!

Je suis un peu perdue avec toutes ces plages et la notion de step ...

Si tu pouvais jeter un œil pour voir ce qui cloche

Merci beaucoup
 

Pièces jointes

  • excel test alimentation.xls
    338 KB · Affichages: 26
  • excel test alimentation.xls
    338 KB · Affichages: 32
  • excel test alimentation.xls
    338 KB · Affichages: 44

Modeste

XLDnaute Barbatruc
Re : Excel 2007 - Exporter des valeurs vers des feuilles nommées

Bonjour chris6999, JBARBE,

Ça vaut ce que ça vaut, mais voici une autre version, à placer dans un module standard ... si j'ai bien compris!?
J'ai commenté le code ... si ça peut aider ...

VB:
Sub recopier()
With Sheets("Participations journée")
    ligDate = Application.Match(.[C5], Sheets("Réel Courrier").[B:B], 0) 'trouve la ligne correspondant à la date
    Sheets("Réel Courrier").Cells(ligDate, 21) = .[C8] 'recopie la durée colonne C
    Sheets("Réel R.Matricule").Cells(ligDate, 21) = .[D8] 'recopie la durée colonne D
    For Each c In .[C9:D18].SpecialCells(xlCellTypeConstants) 'pour chaque cellule contenant une constante dans la plage C9:D18
            Set f = IIf(c.Column = 3, Sheets("Réel Courrier"), Sheets("Réel R.Matricule")) 'si colonne C, feuille concernée = "Réel courrier". Si pas, c'est l'autre ;-D
            gr = IIf((c.Row Mod 2) = 1, .Cells(c.Row, 2), Cells(c.Row - 1, 2)) 'si ligne impaire, prendre le nom du groupe dans la ligne, en col B. Si pas, une ligne au-dessus
            colGr = Application.Match(gr, f.[7:7], 0) 'trouve la colonne du groupe concerné
            f.Cells(ligDate, colGr) = c 'copie la valeur dans le bonne ligne et la bonne colonne
    Next c
End With
End Sub
 

JBARBE

XLDnaute Barbatruc
Re : Excel 2007 - Exporter des valeurs vers des feuilles nommées

Bonjour Modeste !

La macro expliquée :

Code:
Option Explicit

Sub transfert()
Dim i As Long
Dim j As Long
Dim k As Integer
Dim p As Long
Dim s As Integer
Application.ScreenUpdating = False
For i = 9 To 65536 Step 2 ' boucle de la ligne 9 jusqu'à la derniére ligne par pas de 2 (Sheets("Participations journée")
 If Cells(i, 2) = "" Then Exit For ' si la cellule ligne i et colonne B est vide alors sortie de la macro
 For j = 8 To 65536 ' boucle de la ligne 8 jusqu'à la derniére ligne (Sheets("Réel Courrier")
  If Sheets("Participations journée").Range("C5") = Sheets("Réel Courrier").Cells(j, 2) Then ' si la cellule date est égale
  ' à la cellule ligne j colonne B de Sheets("Réel Courrier")
   For k = 7 To 19 Step 3 ' boucle de la ligne 7 jusqu'à la colonne S ( 19) par pas de 3 Sheets("Réel Courrier")
    If Sheets("Participations journée").Cells(i, 2) = Sheets("Réel Courrier").Cells(7, k) Then ' si la ligne i colonne B
    ' est égale à la ligne 7 colonne k ( à partir de G, Groupe1)
     Sheets("Réel Courrier").Cells(j, k) = Sheets("Participations journée").Cells(i, 3) ' la ligne j (date)colonne k (Groupe)
     ' est égale à le ligne i colonne C
     Sheets("Réel Courrier").Cells(j, k + 1) = Sheets("Participations journée").Cells(i + 1, 3) ' idem avec une colonne k+1 décalée
     ' est égale à une ligne i décalée dans colonne C
     Sheets("Réel Courrier").Cells(j, 21) = Sheets("Participations journée").Range("C8")
     ' la ligne j colonne u (21) est égale à la cellule C8 Sheets("Participations journée")
     Exit For ' sortie de la boucle k
     End If ' fin si
   Next k ' boucle k
   Exit For ' sortie de la boucle j
   End If ' fin si
 Next j ' boucle j
 
'même principe poue ces boucle p s
 For p = 8 To 65536
  If Sheets("Participations journée").Range("C5") = Sheets("Réel R.Matricule").Cells(p, 2) Then
   For s = 7 To 19 Step 3
    If Sheets("Participations journée").Cells(i, 2) = Sheets("Réel R.Matricule").Cells(7, s) Then
     Sheets("Réel R.Matricule").Cells(p, s) = Sheets("Participations journée").Cells(i, 4)
     Sheets("Réel R.Matricule").Cells(p, s + 1) = Sheets("Participations journée").Cells(i + 1, 4)
     Sheets("Réel R.Matricule").Cells(p, 21) = Sheets("Participations journée").Range("D8")
     Exit For
     End If
   Next s
   Exit For
   End If
 Next p
 
Next i ' boucle i
Application.ScreenUpdating = True
End Sub

bonne soirée
 

Pièces jointes

  • excel test alimentation-3.xls
    356.5 KB · Affichages: 26

chris6999

XLDnaute Impliqué
Re : Excel 2007 - Exporter des valeurs vers des feuilles nommées

Bonjour Modeste !

La macro expliquée :

Code:
Option Explicit

Sub transfert()
Dim i As Long
Dim j As Long
Dim k As Integer
Dim p As Long
Dim s As Integer
Application.ScreenUpdating = False
For i = 9 To 65536 Step 2 ' boucle de la ligne 9 jusqu'à la derniére ligne par pas de 2 (Sheets("Participations journée")
 If Cells(i, 2) = "" Then Exit For ' si la cellule ligne i et colonne B est vide alors sortie de la macro
 For j = 8 To 65536 ' boucle de la ligne 8 jusqu'à la derniére ligne (Sheets("Réel Courrier")
  If Sheets("Participations journée").Range("C5") = Sheets("Réel Courrier").Cells(j, 2) Then ' si la cellule date est égale
  ' à la cellule ligne j colonne B de Sheets("Réel Courrier")
   For k = 7 To 19 Step 3 ' boucle de la ligne 7 jusqu'à la colonne S ( 19) par pas de 3 Sheets("Réel Courrier")
    If Sheets("Participations journée").Cells(i, 2) = Sheets("Réel Courrier").Cells(7, k) Then ' si la ligne i colonne B
    ' est égale à la ligne 7 colonne k ( à partir de G, Groupe1)
     Sheets("Réel Courrier").Cells(j, k) = Sheets("Participations journée").Cells(i, 3) ' la ligne j (date)colonne k (Groupe)
     ' est égale à le ligne i colonne C
     Sheets("Réel Courrier").Cells(j, k + 1) = Sheets("Participations journée").Cells(i + 1, 3) ' idem avec une colonne k+1 décalée
     ' est égale à une ligne i décalée dans colonne C
     Sheets("Réel Courrier").Cells(j, 21) = Sheets("Participations journée").Range("C8")
     ' la ligne j colonne u (21) est égale à la cellule C8 Sheets("Participations journée")
     Exit For ' sortie de la boucle k
     End If ' fin si
   Next k ' boucle k
   Exit For ' sortie de la boucle j
   End If ' fin si
 Next j ' boucle j
 
'même principe poue ces boucle p s
 For p = 8 To 65536
  If Sheets("Participations journée").Range("C5") = Sheets("Réel R.Matricule").Cells(p, 2) Then
   For s = 7 To 19 Step 3
    If Sheets("Participations journée").Cells(i, 2) = Sheets("Réel R.Matricule").Cells(7, s) Then
     Sheets("Réel R.Matricule").Cells(p, s) = Sheets("Participations journée").Cells(i, 4)
     Sheets("Réel R.Matricule").Cells(p, s + 1) = Sheets("Participations journée").Cells(i + 1, 4)
     Sheets("Réel R.Matricule").Cells(p, 21) = Sheets("Participations journée").Range("D8")
     Exit For
     End If
   Next s
   Exit For
   End If
 Next p
 
Next i ' boucle i
Application.ScreenUpdating = True
End Sub

bonne soirée

Mon dieu quel travail de romain. Merci pour tous ces commentaires qui vont me permettre d'y voir plus clair.
C'est cette histoire de pas qui me gênait.
Je remarque que pour le renvoi des durée tu ne fais plus référence à une plage mais directement à la colonne 21.
Sheets("Réel Courrier").Cells(j, 21) = Sheets("Participations journée").Range("C8")
Et c'est bien ça que je n'arrivais pas à écrire.

Je garde précieusement ton exemple de code dans ma bibliothèque à trésor.

Bonne soirée
Tu
 

Discussions similaires

Statistiques des forums

Discussions
312 164
Messages
2 085 877
Membres
103 009
dernier inscrit
dede972