Microsoft 365 Macro pour addition dynamique de donnees

Saumon80

XLDnaute Occasionnel
Bonjour ,

Je souhaiterais creer un macro pour automatiser avec un bouton 2 operations mais je n'ai pas trouver le moyen de le faire. Quelqu'un aurait-il une idee? Je dois automatiser la tache suivante:
  • Dans l'onglet 1 je dois coller une colonne de donnees a droite de la derniere colonne remplie.
    • Je dois ensuite repliquer la mise en forme des dates se situant dans les colonnes precedentes et l'appliquer a la derniere colonne collee.
    • Je ne souhaite etendre le format qu'a la derniere colonne colonne.

  • Dans l'onglet 2 , je dois coller une plage de donnees en A29 quotidiennement
    • Je souhaite ensuite transposer la plage de donnees de A29 - M35 sur la case correspondante a la date en A29 (ici 30/09/22) et la coller sur la case correspondante sur la ligne 1 (ici cela correspond a F1 - 30/09/22-)
    • Une fois la plage collee (voir onglet 3) je souhaite ajouter un quadrillage et centrer les nouvelles valeur comme dans l'exemple et supprimer la plage qui etait en A29 car plus necessaire mais colorer la plage pour savoir ou coller la nouvelle plage du lendemain.
    • Je dois ensuite juste copier les valeur entre la ligne 14 et 26 et les coller en tant que valeur mais uniquement jusqu'a la derniere colonne de donnees (ici L) , car je doit garder les formules pour les jours a venir. Je dois donc garder les fomules dans les colonnes ne contenant aucune donnees. Idealement je souhaiterais appliquer une couleur et mettre les valeur coller en gras comme dans l'exemple.
Merci infiniment par avance,

Cordialement
 

Pièces jointes

  • Book27.xlsx
    19.4 KB · Affichages: 16

AtTheOne

XLDnaute Impliqué
Supporter XLD
Bonjour @Saumon80
Ton fil ne semble pas attirer les foules ...
Dans l'onglet 1 je dois coller une colonne de donnees a droite de la derniere colonne remplie.
Je suppose Onglet1 ="Sheet1"
  • mais d'où sont copiées les données ?
Je suppose Onglet 2 = Sheet2
  • Les dates où copier la plage "A29:M35" peuvent-elles préexister ou faut-il les ajouter ou un peu des deux ?
  • Pourquoi certaines dates n'ont pas la partie provenant des formules (lignes 14 à 26 pour le 30/09 et le 01/10) ?
    1666016945066.png

J'attends une réponse de ta part et je m'y mets.

Amicalement
Alain
 

Saumon80

XLDnaute Occasionnel
Bonjour Alain,

En effet :( Desole de la reponse tardive d'ailleurs , j'avait desespere d'obtenir une reponse :)

Je suppose Onglet1 ="Sheet1"
  • mais d'où sont copiées les données ?
Oui en effet c'est bien cela. Je les copie manuellement d'un fichier que je recoit par email chaque jour.

Je suppose Onglet 2 = Sheet2
  • Les dates où copier la plage "A29:M35" peuvent-elles préexister ou faut-il les ajouter ou un peu des deux ?
  • Pourquoi certaines dates n'ont pas la partie provenant des formules (lignes 14 à 26 pour le 30/09 et le 01/10) ?

  • Oui c'est bien cela.
  • Concernant les dates où copier la plage "A29:M35" c'est un peu des 2 en effet. Les nouvelles dates viennent s'ajouter a celles existantes. J'ai a peine commence donc il n'y a que quelques dates mais le but est d'ajouter les nouvelles a la suite.
  • Uniquement car je commence la calculation apres une semaine de donnees mais j'aurais pu aussi appliquer les formules. Je voulais juste commencer a calculer apres quelques jours de donnees. Les formules ensuite s'appliqueront a toutes les dates.
Merci beaucoup pour ton aide!

Cordialement
 

AtTheOne

XLDnaute Impliqué
Supporter XLD
Bonjour à toutes & à tous, bonjour @Saumon80

J'ai créé quelques noms définis dans ton projet et une feuille "Modèle"qui accueille les formules à recopier ainsi que les formats à appliquer après collage des données (et que tu peux modifier à ta guise)
Zone_Dates=Relevé!$1:$1Plage contenant les dates dans la zone cible (ligne 1).
Zone_Fin=Relevé!$H$1:$H$26Plage située juste après les données collées.
Zone_Tampon=Relevé!$A$29:$M$35Plage contenant les données à coller-transposer.
Zone_Formules=Modèle!$H$4:$H$29Plage contenant les formules à appliquer aux nouvelles données.
ZFN=Modèle!$J$4:$J$29Format à appliquer aux données que l'on vient de copier.
ZFA=Modèle!$L$4:$L$29Format à appliquer aux données présentes avant le collage des nouvelles données.

Voilà le code de la macro de transposition (que j'ai abondamment commenté)
VB:
Sub Transposition()

     Dim Wsh2 As Worksheet, ZFrml As Range, ZT As Range, ZF As Range, ZD As Range, Cible As Range
     Dim Date1 As Long, NbCol As Long, col_cible As Long, NbAnciennes As Long
     Application.ScreenUpdating = False
 
     Set Wsh2 = Sheet2   'Feuille contennant la plage à transposer et le tableau cible
     With ThisWorkbook   'Récupération des plages nommées du classeur
          Set ZT = Evaluate("'" & .Name & "'!Zone_Tampon")        'Plage (transposée) à recopier nommée "Zone_Tampon"
          Set ZD = Evaluate("'" & .Name & "'!Zone_Dates")         'Plage contenant les dates du tableau cible
          Set ZF = Evaluate("'" & .Name & "'!Zone_Fin")           'Plage nommée "Zone_Fin" (zone en gris située à la fin de la zone de recopie)
          Set ZFrml = Evaluate("'" & .Name & "'!Zone_Formules")   'Plage contenant les formules nommée "Zone_Formules"
          Set ZFN = Evaluate("'" & .Name & "'!ZFN")               'Plage contenant les formats à appliquer pour les nouvelles données
          Set ZFA = Evaluate("'" & .Name & "'!ZFA")               'Plage contenant les formats à appliquer pour les anciennes données
     End With
 
     '1ère date de la zone tampon
     Date1 = ZT.Cells(1, 1).Value2
 
     'Vérifier si cette date n'est pas déjà dans la plage de données
     col_cible = -1: On Error Resume Next: col_cible = WorksheetFunction.Match(Date1, ZD, 0): On Error GoTo 0
     If col_cible <> -1 Then
          'Si c'est le cas, supprimer les données à partir de cette date incluse
          ZF.Offset(0, col_cible - ZF.Column).Resize(, ZF.Column - col_cible).Delete
     End If
 
     'Insérer le nbre de colonnes nécessaires à la transposition
     NbCol = ZT.Rows.Count    'nbre de colonnes = nbre de lignes de la zone tampon à transposer
     ZF.Resize(, NbCol).Insert Shift:=xlToRight
     'Zone cible de la transposition
     Set Cible = ZF.Offset(0, -NbCol).Resize(, NbCol)
 
     'Recopier les formules
     ZFrml.Copy
     Cible.Resize(, ZT.Rows.Count).PasteSpecial Paste:=xlPasteFormulas
 
     'Transposer les données
     ZT.Copy
     Cible.Resize(ZT.Columns.Count, ZT.Rows.Count).PasteSpecial Paste:=xlPasteValues, Transpose:=True
     'Figer les valeurs
     Cible.Value = Cible.Value
 
     'Formatage des nouvelles données
     ZFN.Copy: Cible.PasteSpecial Paste:=xlPasteFormats
     'Formatage des anciennes données (s'il y en a)
     NbAnciennes = Cible.Column - 2
     If NbAnciennes > 0 Then
          'Il y a des anciennes données :
          ZFA.Copy
          Cible.Offset(0, -NbAnciennes).Resize(, NbAnciennes).PasteSpecial Paste:=xlPasteFormats
     End If
     'Effacement de la zone tampon
     ZT.ClearContents
     Application.ScreenUpdating = True
 
End Sub

Tu n'as plus qu'à cliquer sur le bouton "Transposer les données"
Voir la pièce jointe

Par contre pour le 1er point :
"Je dois automatiser la tache suivante:
  • Dans l'onglet 1 je dois coller une colonne de donnees a droite de la derniere colonne remplie.
    • Je dois ensuite repliquer la mise en forme des dates se situant dans les colonnes precedentes et l'appliquer a la derniere colonne collee.
    • Je ne souhaite etendre le format qu'a la derniere colonne colonne."
Je n'ai pas les éléments pour automatiser cette tâche (en particulier d'où proviennent les données à copier)


Amicalement
Alain
 

Pièces jointes

  • Book AtTheOne.xlsm
    35.3 KB · Affichages: 5
Dernière édition:

Saumon80

XLDnaute Occasionnel
Bonjour Alain,

Merci infiniment pour ce fichier qui a du demande beaucoup de travail!
Je vais lire attentivement le code que tu as commente afin de bien le comprendre ,ce qui me sera super utile pour progresser avec VBA.

J'ai ouvert le fichier et cliquer sur transposer les donnees et j'obtiens le message suivant (Voir pieces jointes).

Je me demande si c'est peut-etre car j'utilise une version anglaise de Excel?

Merci par avance et en te souhaitant une bonne journee!

Cordialement
 

Pièces jointes

  • Screenshot 2022-11-13 at 10.57.08.png
    Screenshot 2022-11-13 at 10.57.08.png
    15.7 KB · Affichages: 12
  • Screenshot 2022-11-13 at 10.57.19.png
    Screenshot 2022-11-13 at 10.57.19.png
    32.3 KB · Affichages: 11

AtTheOne

XLDnaute Impliqué
Supporter XLD
Bonjour @Saumon80
Est-ce que l'erreur se produit sur le nom de la procédure ? (Ta copie d'écran avec "Sub Transposition()" surligné en jaune) auquel cas essaie de mettre un autre nom de procédure par ex :
Sub TransposerDonnées()
Peut-être que Transposition est un mot réservé dans la version anglaise.
Je vérifie ce soir car ici je suis sur mon téléphone, et je ne peux rien faire.
Amicalement
Alain
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 941
Membres
101 848
dernier inscrit
Djigbenou