Macro

skun

XLDnaute Occasionnel
Macro transfere de données entre 2 feuilles

Bonjour,

Je cherche a créer une macro permettant de transferer d'une feuille de saisie à une feuille de base de donnée des memes informations mais sous une autre forme.

context: planning d'affectations de chauffeurs/camions/tournée: pour chaque jour.

J'ai fait un petit fichier joint sur lequel nous pouvons voir 2 feuilles.

La 1ere est la feuille de saisie, nous retrouvons les informations:

*Date: B1 (de couleur jaune)
*Chauffeur: D2:D44 (rouge)
*Camions: F2:F44 (gris)
*Durée de la tournée: G2:G44 (violet)

J'aimerai que à l'aide d'une macro ces informations soient reportées dans la base de donnée en fonction de la date choisi lors de la saisie.
J'ai gardé les meme couleurs pour les 2 feuilles pour facilité un peu. ^^


exemple:
Dans le fichier joint nous pouvons voir que le 1/12/2008 le chauffeur 3 est affecté à la tournée 42 avec le camion 601 pour une tournée de 07:45 h
nous pouvons retrouver les memes informations dans la 2em feuille: base de donnée.

L'idéal serait un bouton dans la feuille de saisie qui validerait la saisie est l'enregistrerai dans les cellules correspondantes de la base de donnée.

Etant novice d'excel et encore plus de VBA, je viens vous demander un peu d'aide :eek:

je vous remercie


salutations


skun


ps: la macro joint au fichier ne correspond pas à cette problématique.
 

Pièces jointes

  • Copie de planing.zip
    12.6 KB · Affichages: 32
  • Copie de planing.zip
    12.6 KB · Affichages: 33
  • Copie de planing.zip
    12.6 KB · Affichages: 31
Dernière édition:

jp14

XLDnaute Barbatruc
Re : Macro

Bonjour

Ci joint le fichier avec une macro.
Le bouton enregistrer lance la macro qui se trouve dans la feuille "Saisie"
Principe
Recherche de la ligne avec la date indiquée
Recherche de la colonne Qui contient le numéro du chauffeur.
Le numéro doit correspondre à la colonne centrale.
Ecriture des données.

A tester

JP
 

Pièces jointes

  • Copie de planing.zip
    22 KB · Affichages: 57
  • Copie de planing.zip
    22 KB · Affichages: 60
  • Copie de planing.zip
    22 KB · Affichages: 62

skun

XLDnaute Occasionnel
Re : Macro

Bonjour jp14 ,

je te remercie pour ta réponse, ta macro marche super bien !
c'est exactement ce que je cherchais !

par contre j'ai essayé de lire le code, et là j'ai vraiment pas compris ! lol

donc j'ai 3 questions à propos du code:

*Lors de l'étape: "Recherche de la ligne avec la date indiquée" de la macro, sur combien de ligne s'étend sa recherche?

*Lors de l'étape: "Recherche de la colonne Qui contient le numéro du chauffeur" sur combien de colonne s'étend la recherche?


A l'origine, j'ai une 2eme base de donnée (pour la meme feuil de saisie)presque similaire à celle du fichier joint, à la différence qu'il y a une inversion entre la position des chauffeurs et celle des camions: en gros, elle a pour colonne le numéro des camions(et à la meme position ou était le n° camion, il y a le n° chauffeur)

D'ou ma question:
Ou se situes les valeurs à inverser dans le code pour obtenir un résultat similaire & adaptée à cette nouvelle base de donnée?

je vous remercie encore pour cette superbe macro !


salutations

skun
 

jp14

XLDnaute Barbatruc
Re : Macro

Bonsoir

*Lors de l'étape: "Recherche de la ligne avec la date indiquée" de la macro, sur combien de ligne s'étend sa recherche?

L'appel au sous programme est paramètrable
La plage de recherche est donc de A1:A(dl2 qui est la dernière ligne écrite)
Il faut commence une ligne avant car find commence à la ligne suivante.

lig = recherchemot("A1:A" & dl2, Sheets(nomfeuille1).Range("b1"), nomfeuille2, 1)

*Lors de l'étape: "Recherche de la colonne Qui contient le numéro du chauffeur" sur combien de colonne s'étend la recherche?
Dans ce car la plage de recherche est A1:IV1" c'est à dire la première ligne, on cherche la colonne.
i = recherchemot("A1:IV1", cellule.Value, nomfeuille2, 3)

A l'origine, j'ai une 2eme base de donnée (pour la meme feuil de saisie)presque similaire à celle du fichier joint, à la différence qu'il y a une inversion entre la position des chauffeurs et celle des camions: en gros, elle a pour colonne le numéro des camions(et à la meme position ou était le n° camion, il y a le n° chauffeur)
D'ou ma question:
Ou se situes les valeurs à inverser dans le code pour obtenir un résultat similaire & adaptée à cette nouvelle base de donnée?

La macro est basé sur la structure des feuilles :
On recherche la date qui est dans la cellule : Sheets(nomfeuille1).Range("b1") dans la plage "A1:A" & dl2 de la deuxième feuille, ce qui donne le numéro de ligne.

On recherche dans la plage "A1:IV1" la valeur qui se trouve dans cellule.Value pour connaitre la colonne.
Cellule.value correspondant aux valeurs de la colonne d

JP
 

skun

XLDnaute Occasionnel
Re : Macro

Bonjour !!
j'ai réussi à l'adapter !!! :D
merci beaucoup !!!

par contre j'aimerai si possible lancer les 2 macro du meme bouton ou fusionner les 2 macro.
quelqu'un serait il m'aider siouplait?

c'est preque les memes à une toute petite différence (je surligne en rouge)

***donc voilà une première macro

Private Sub CommandButton1_Click()



Dim i As Long
Dim j As Long
Dim dl1 As Long
Dim dl2 As Long

Dim cellule As Range
Dim plage As Range

Dim nomfeuille1 As String
Dim col1 As String
Dim classeur1 As String
Dim lidep1 As Long

Dim lidep2 As Long
Dim nomfeuille2 As String
Dim col2 As String

Dim data1 As String
Dim chemin As String

Dim date1 As Date
Dim date2 As Date

Dim nb As Integer
Dim trouve As Boolean
Dim sh As Worksheet
'**********************************

classeur1 = ActiveWorkbook.Name
nomfeuille1 = "SAISIE"
col1 = "f"
lidep1 = 2
dl1 = Sheets(nomfeuille1).Range(col1 & "65536").End(xlUp).Row + 2


nomfeuille2 = "BD camion" '"Feuil1"
col2 = "a"
lidep2 = 2
dl2 = Sheets(nomfeuille2).Range(col2 & "65536").End(xlUp).Row + 1
'************************************

With Sheets(nomfeuille1)

lig = recherchemot("A1:A" & dl2, Sheets(nomfeuille1).Range("b1"), nomfeuille2, 1)
Set plage = .Range(col1 & lidep1 & ":" & col1 & .Range(col1 & "65536").End(xlUp).Row)

For Each cellule In plage
' lecture nom du chauffeur
If cellule.Value <> "" Then
'recherche de son numéro retour colonne
i = recherchemot("A1:IV1", cellule.Value, nomfeuille2, 3)
' ecriture
Sheets(nomfeuille2).Cells(lig, i - 1).Value = cellule.Offset(0, -1).Value
Sheets(nomfeuille2).Cells(lig, i).Value = cellule.Offset(0, -2).Value
Sheets(nomfeuille2).Cells(lig, i + 1).Value = cellule.Offset(0, 1).Value
End If
Next cellule

End With



End Sub



et voilà la 2eme:

Private Sub CommandButton1_Click()



Dim i As Long
Dim j As Long
Dim dl1 As Long
Dim dl2 As Long

Dim cellule As Range
Dim plage As Range

Dim nomfeuille1 As String
Dim col1 As String
Dim classeur1 As String
Dim lidep1 As Long

Dim lidep2 As Long
Dim nomfeuille2 As String
Dim col2 As String

Dim data1 As String
Dim chemin As String

Dim date1 As Date
Dim date2 As Date

Dim nb As Integer
Dim trouve As Boolean
Dim sh As Worksheet
'**********************************

classeur1 = ActiveWorkbook.Name
nomfeuille1 = "SAISIE"
col1 = "d"
lidep1 = 2
dl1 = Sheets(nomfeuille1).Range(col1 & "65536").End(xlUp).Row + 2


nomfeuille2 = "BD chauffeur" '"Feuil1"
col2 = "a"
lidep2 = 2
dl2 = Sheets(nomfeuille2).Range(col2 & "65536").End(xlUp).Row + 1
'************************************

With Sheets(nomfeuille1)

lig = recherchemot("A1:A" & dl2, Sheets(nomfeuille1).Range("b1"), nomfeuille2, 1)
Set plage = .Range(col1 & lidep1 & ":" & col1 & .Range(col1 & "65536").End(xlUp).Row)

For Each cellule In plage
' lecture nom du chauffeur
If cellule.Value <> "" Then
'recherche de son numéro retour colonne
i = recherchemot("A1:IV1", cellule.Value, nomfeuille2, 3)
' ecriture
Sheets(nomfeuille2).Cells(lig, i - 1).Value = cellule.Offset(0, 1).Value
Sheets(nomfeuille2).Cells(lig, i).Value = cellule.Offset(0, 2).Value
Sheets(nomfeuille2).Cells(lig, i + 1).Value = cellule.Offset(0, 3).Value

End If
Next cellule

End With



End Sub

je vous remercie d'avance.

salutations


skun
 
Dernière édition:

skun

XLDnaute Occasionnel
Re : Macro

Bonjour le forum,
je me permet de remonter ce fil, car j'ai un petit soucil, j'ai quelque peut changé mon fichier précédent et adapté les macros (voir fichier joint)

et j'aimerai créer une nouvelle macro.

je vous explique le context:

Mon fichier excel contient une page de saisie, et une base de donnée.
Actuellement, pour faire passer ma saisie jusqu'à ma base de donnée, j'utilise une macro (merci jp14) qui à l'aide d'un bouton va placer les informations saisies dans la base de donnée en fonction du numéro de chauffeur et de la date.

Ca marche parfaitement bien.
Cependant, j'aimerai créer une autre macro qui aurait l'effet inverse:

Elle s'activerai automatiquement pour tout changement de date B1 de la feuille de sasie.
Et aurait pour fonction d'aller chercher les informations dans la base de donnée en fonction de la date B1 et de les replacer sur la feuille de saisie à coté des numéro de tournées correspondants (les numéros de tournée restent toujours dans le meme ordre sur la feuille de saisie, ils ne sont jamais effacé de la feuille de saisie)



Concrètement, celà permettrait à l'utilisateur, de voir en fonction du jour choisi la saisie effectué, et permettre d'éventuelles modifications.

je travail actuellement dessus, mais étant débutant, c'est pas évident.

voilà si quelqu'un à une idée sur ma problématique, je suis à l'écoute.

je vous remercie

salutations

skun
 

Pièces jointes

  • test 1.zip
    31.4 KB · Affichages: 25
  • test 1.zip
    31.4 KB · Affichages: 31
  • test 1.zip
    31.4 KB · Affichages: 26
Dernière édition:

Discussions similaires

  • Résolu(e)
Microsoft 365 Programme VBA
Réponses
3
Affichages
423

Statistiques des forums

Discussions
312 234
Messages
2 086 470
Membres
103 226
dernier inscrit
smail12