De traduction d'une macro

Bonsoir à tous.

J'aurais besoin d'un énorme coup de main de la part de qui en aurait le courage et la gentillesse.

N'étant pas très bon dans le codage des macros, mais voulant absolument comprendre celle ci, qui pourrait me traduire, étape par étape, ce que celle ci fait (les actions)... Cela me permettrait de remplacer par mes valeurs.

Je la trouve hyper utile, mais quand je la mets dans mon tableau, impossible de transposer...

Merci d'avance!

La voici :

Sub Recopie()

Dim F1 As Worksheet, F2 As Worksheet

Dim LigF1 As Long, LigF2 As Long

Dim ColF1 As Integer, ColF2 As Integer

Dim I As Integer

Dim F3 As Worksheet

Application.ScreenUpdating = False

Set F1 = Sheets("Start")

Set F2 = Sheets("Label")

Set F3 = Sheets.Add

F1.Cells.Copy

F3.Range("A1").PasteSpecial Paste:=xlPasteValues

Application.Calculation = xlCalculationManual

F2.Rows("24:" & Rows.Count).Delete

LigF1 = 7: LigF2 = 1: ColF2 = 2

While F1.Cells(LigF1, "G") <> ""

If LigF1 <> 7 Then

F2.Range("B1:S22").Copy F2.Range("B" & LigF2)

F2.Rows(LigF2 + 10).RowHeight = 12.75

End If

F2.Cells(LigF2, "B") = F3.Cells(LigF1, "G")

For I = 0 To 5

F2.Cells(LigF2 + 11, ColF2 + (3 * I)) = F3.Cells(LigF1 + 6 + I, "O")

F2.Cells(LigF2 + 14, ColF2 + (3 * I)) = F3.Cells(LigF1 + 6 + I, "I")

F2.Cells(LigF2 + 17, ColF2 + (3 * I)) = F3.Cells(LigF1 + 6 + I, "X")

F2.Cells(LigF2 + 17, ColF2 + 1 + (3 * I)) = F3.Cells(LigF1 + 6 + I, "Z")

F2.Cells(LigF2 + 20, ColF2 + (3 * I)) = F3.Cells(LigF1, "AJ")

Next I

LigF2 = LigF2 + 23: LigF1 = LigF1 + 13

Wend

Application.DisplayAlerts = False

F3.Delete

Application.DisplayAlerts = True

Application.Calculation = xlCalculationAutomatic

MsgBox "Création terminée"

End Sub

Bonjour,

En espérant que ce sera suffisant ...

Sub Recopie()                          ' début de la macro
Dim F1 As Worksheet, F2 As Worksheet   ' déclaration des variables
Dim LigF1 As Long, LigF2 As Long       ' décla..
Dim ColF1 As Integer, ColF2 As Integer ' décla..
Dim i As Integer                       ' décla..
Dim F3 As Worksheet                    ' déclaration des variables

Application.ScreenUpdating = False     ' fige temporairement l'affichage pour augmenter la rapidité de l'exécution de la macro
Set F1 = Sheets("Start")               ' renseigne la variable (donne une valeur)
Set F2 = Sheets("Label")               ' renseigne la variable (donne une valeur)

Set F3 = Sheets.Add                    ' F3 sera une nouvelle feuille temporaire

   F1.Cells.Copy                                      ' prépare la copie de toutes les cellules de F1 qui est la (Sheets("Start"))
   F3.Range("A1").PasteSpecial Paste:=xlPasteValues   ' collage spécial de la copie de F1 en F3 (sheets("Label")) cellule A1
   Application.Calculation = xlCalculationManual      ' passe le calcul de la feuille en mode manuel

   F2.Rows("24:" & Rows.Count).Delete   ' supprime les lignes de 24 jusqu'à la fin de la feuille
   LigF1 = 7: LigF2 = 1: ColF2 = 2      ' renseigne les 3 variables

   While F1.Cells(LigF1, "G") <> ""     ' démarre une boucle qui s'exécutera tant que la condition sera fausse

      If LigF1 <> 7 Then                                 ' Si la variable est différente de 7
         F2.Range("B1:S22").Copy F2.Range("B" & LigF2)   ' copie B1:S22 dans B à la ligne contenue dans la variable
         F2.Rows(LigF2 + 10).RowHeight = 12.75           ' ajuste la hauteur des lignes
      End If                                             ' fin du Si

      F2.Cells(LigF2, "B") = F3.Cells(LigF1, "G")        ' copie la valeur de F3.Gx dans F2.Gx (x étant la valeur de la variable FigFx)

      For i = 0 To 5                                     ' boucle ne changeant la valeur de i
         F2.Cells(LigF2 + 11, ColF2 + (3 * i)) = F3.Cells(LigF1 + 6 + i, "O")     ' copie une cellule de F3 en F2
         F2.Cells(LigF2 + 14, ColF2 + (3 * i)) = F3.Cells(LigF1 + 6 + i, "I")     ' copie une cellule de F3 en F2
         F2.Cells(LigF2 + 17, ColF2 + (3 * i)) = F3.Cells(LigF1 + 6 + i, "X")     ' copie une cellule de F3 en F2
         F2.Cells(LigF2 + 17, ColF2 + 1 + (3 * i)) = F3.Cells(LigF1 + 6 + i, "Z") ' copie une cellule de F3 en F2
         F2.Cells(LigF2 + 20, ColF2 + (3 * i)) = F3.Cells(LigF1, "AJ")            ' copie une cellule de F3 en F2
      Next i

      LigF2 = LigF2 + 23: LigF1 = LigF1 + 13    ' renseigne les variables
   Wend                                         ' boucle avec l'appel de la boucle While

   Application.DisplayAlerts = False         ' mets en pause les alertes (fenêtre de dialogue)
   F3.Delete                                 ' supprime la feuille temporaire sans demander confirmation
   Application.DisplayAlerts = True          ' réactive les alertes

   Application.Calculation = xlCalculationAutomatic   ' repasse le calcul de la feuille en automatique
   MsgBox "Création terminée"                ' message
End Sub                                      ' fin de la macro

ric

Bonjour,

En espérant que ce sera suffisant ...

Sub Recopie()                          ' début de la macro
Dim F1 As Worksheet, F2 As Worksheet   ' déclaration des variables
Dim LigF1 As Long, LigF2 As Long       ' décla..
Dim ColF1 As Integer, ColF2 As Integer ' décla..
Dim i As Integer                       ' décla..
Dim F3 As Worksheet                    ' déclaration des variables

Application.ScreenUpdating = False     ' fige temporairement l'affichage pour augmenter la rapidité de l'exécution de la macro
Set F1 = Sheets("Start")               ' renseigne la variable (donne une valeur)
Set F2 = Sheets("Label")               ' renseigne la variable (donne une valeur)

Set F3 = Sheets.Add                    ' F3 sera une nouvelle feuille temporaire

   F1.Cells.Copy                                      ' prépare la copie de toutes les cellules de F1 qui est la (Sheets("Start"))
   F3.Range("A1").PasteSpecial Paste:=xlPasteValues   ' collage spécial de la copie de F1 en F3 (sheets("Label")) cellule A1
   Application.Calculation = xlCalculationManual      ' passe le calcul de la feuille en mode manuel

   F2.Rows("24:" & Rows.Count).Delete   ' supprime les lignes de 24 jusqu'à la fin de la feuille
   LigF1 = 7: LigF2 = 1: ColF2 = 2      ' renseigne les 3 variables

   While F1.Cells(LigF1, "G") <> ""     ' démarre une boucle qui s'exécutera tant que la condition sera fausse

      If LigF1 <> 7 Then                                 ' Si la variable est différente de 7
         F2.Range("B1:S22").Copy F2.Range("B" & LigF2)   ' copie B1:S22 dans B à la ligne contenue dans la variable
         F2.Rows(LigF2 + 10).RowHeight = 12.75           ' ajuste la hauteur des lignes
      End If                                             ' fin du Si

      F2.Cells(LigF2, "B") = F3.Cells(LigF1, "G")        ' copie la valeur de F3.Gx dans F2.Gx (x étant la valeur de la variable FigFx)

      For i = 0 To 5                                     ' boucle ne changeant la valeur de i
         F2.Cells(LigF2 + 11, ColF2 + (3 * i)) = F3.Cells(LigF1 + 6 + i, "O")     ' copie une cellule de F3 en F2
         F2.Cells(LigF2 + 14, ColF2 + (3 * i)) = F3.Cells(LigF1 + 6 + i, "I")     ' copie une cellule de F3 en F2
         F2.Cells(LigF2 + 17, ColF2 + (3 * i)) = F3.Cells(LigF1 + 6 + i, "X")     ' copie une cellule de F3 en F2
         F2.Cells(LigF2 + 17, ColF2 + 1 + (3 * i)) = F3.Cells(LigF1 + 6 + i, "Z") ' copie une cellule de F3 en F2
         F2.Cells(LigF2 + 20, ColF2 + (3 * i)) = F3.Cells(LigF1, "AJ")            ' copie une cellule de F3 en F2
      Next i

      LigF2 = LigF2 + 23: LigF1 = LigF1 + 13    ' renseigne les variables
   Wend                                         ' boucle avec l'appel de la boucle While

   Application.DisplayAlerts = False         ' mets en pause les alertes (fenêtre de dialogue)
   F3.Delete                                 ' supprime la feuille temporaire sans demander confirmation
   Application.DisplayAlerts = True          ' réactive les alertes

   Application.Calculation = xlCalculationAutomatic   ' repasse le calcul de la feuille en automatique
   MsgBox "Création terminée"                ' message
End Sub                                      ' fin de la macro

ric

Bonsoir et tout d'abord un très grand merci! Cela m'aide beaucoup

Cependant, je ne comprends pas :

- les 3 variables

 LigF1 = 7: LigF2 = 1: ColF2 = 2

. A quoi correspondent les nombres? Des lignes? Des colonnes? Comment c'est instauré?

-

While F1.Cells(LigF1, "G")

, quelle est cette condition?

-

If LigF1 <> 7 Then

si LigF1=7, la ligne est la 7eme? Comment LigF1 peut être différente?

Merci et bon weekend

Bonjour,

Il me serait plus facile de répondre si je pouvais accéder au fichier.

Mais je vais faire ce que je peux...

Cependant, je ne comprends pas :

- les 3 variables

 LigF1 = 7: LigF2 = 1: ColF2 = 2

. A quoi correspondent les nombres? Des lignes? Des colonnes? Comment c'est instauré?

LigF1 > ligne > renseigné avec la valeur 7 > donc, 7e ligne

LigF2 > ligne > renseigné avec la valeur 1 > donc, 1re ligne

ColF2 > colonne > renseigné avec la valeur 2 > donc, 2e colonne

Le choix du nom des variables revient à la personne qui a composé le code.

Ces valeurs ont été données selon la structure du fichier.

-

While F1.Cells(LigF1, "G") <> ""

, quelle est cette condition?

Boucle tant que le contenu de la cellule Gx (x étant la valeur de LigF1 à ce moment) sera différente de "" (vide), < plus petit que, > plus grand que, <> valeur située entre les deux... donc différente de.

2 guillemets collés veut dire vide.

If LigF1 <> 7 Then si LigF1=7

, la ligne est la 7eme? Comment LigF1 peut être différente?

Regarde juste avant la commande Wend, les variables LigF2 et LigF1 reçoivent de nouvelles valeurs

La valeur de la variable LigF2 est incrémentée de 23 > donc si au début la variable valait 7, elle vaut maintenant 30, un saut de 23 lignes > et ce à chaque fois que la boucle passe par là, elle en augmente la valeur de 23.

Idem pour LigF1, mais pour elle la valeur de l'incrément est de 13 (saut de 13 lignes plus bas).

ric

Bonjour,

Il me serait plus facile de répondre si je pouvais accéder au fichier.

Mais je vais faire ce que je peux...

Cependant, je ne comprends pas :

- les 3 variables

 LigF1 = 7: LigF2 = 1: ColF2 = 2

. A quoi correspondent les nombres? Des lignes? Des colonnes? Comment c'est instauré?

LigF1 > ligne > renseigné avec la valeur 7 > donc, 7e ligne

LigF2 > ligne > renseigné avec la valeur 1 > donc, 1re ligne

ColF2 > colonne > renseigné avec la valeur 2 > donc, 2e colonne

Le choix du nom des variables revient à la personne qui a composé le code.

Ces valeurs ont été données selon la structure du fichier.

-

While F1.Cells(LigF1, "G") <> ""

, quelle est cette condition?

Boucle tant que le contenu de la cellule Gx (x étant la valeur de LigF1 à ce moment) sera différente de "" (vide), < plus petit que, > plus grand que, <> valeur située entre les deux... donc différente de.

2 guillemets collés veut dire vide.

If LigF1 <> 7 Then si LigF1=7

, la ligne est la 7eme? Comment LigF1 peut être différente?

Regarde juste avant la commande Wend, les variables LigF2 et LigF1 reçoivent de nouvelles valeurs

La valeur de la variable LigF2 est incrémentée de 23 > donc si au début la variable valait 7, elle vaut maintenant 30, un saut de 23 lignes > et ce à chaque fois que la boucle passe par là, elle en augmente la valeur de 23.

Idem pour LigF1, mais pour elle la valeur de l'incrément est de 13 (saut de 13 lignes plus bas).

ric

MERCI BEAUCOUP RIC!!

J'ai reussi à appliqué la macro à mon fichier.

Il n'y a plus une seule erreur

Est ce qu'à tout hasard, tu saurais me dire si je peux intégrer une ligne à cette macro qui me mettrait toutes les colonnes de la feuille F2 à 1,80cm (sortie d'imprimante)

Je sais que c'est plutôt galère à gérer les dimensions dans excel...

Bonjour,

Complément ...

Si je parle de range = plage d’une ou plusieurs cellules ... on écrit la colonne puis la ligne :

  • Range("A1") > une cellule
  • Range("A1:C5") > une plage de cellules

Si je parle de Cells = une seule cellule ... on écrit la ligne puis la colonne :

- Cells(2, 4) > équivaut à D2

Dans les 2 cas, les valeurs peuvent être remplacées par des variables contenant des valeurs :

Supposons que X = 3 et Y = 5

  • Cells(X, Y) > équivaut à E3
  • Cells(X, "E") > équivaut à E3
  • Range("A" & X) > équivaut à A3
  • Range("A1:D" & Y) > équivaut à la plage A1:D5
  • Range("A"& X & ":D" & Y) > équivaut à la plage A3:D5

Espérant avoir réussi à te mêler un peu ...

ric

Bonjour,

Complément ...

Si je parle de range = plage d’une ou plusieurs cellules ... on écrit la colonne puis la ligne :

  • Range("A1") > une cellule
  • Range("A1:C5") > une plage de cellules

Si je parle de Cells = une seule cellule ... on écrit la ligne puis la colonne :

- Cells(2, 4) > équivaut à D2

Dans les 2 cas, les valeurs peuvent être remplacées par des variables contenant des valeurs :

Supposons que X = 3 et Y = 5

  • Cells(X, Y) > équivaut à E3
  • Cells(X, "E") > équivaut à E3
  • Range("A" & X) > équivaut à A3
  • Range("A1:D" & Y) > équivaut à la plage A1:D5
  • Range("A"& X & ":D" & Y) > équivaut à la plage A3:D5

Espérant avoir réussi à te mêler un peu ...

ric

Un ÉNORME merci !!! Tu ne m'as pas du tout emmêlé mais au contraire beaucoup aidé!

Rechercher des sujets similaires à "traduction macro"