Macro Excel vers Google Sheet (complexe)
Bonjour à tous,
Je me permet de vous solliciter suite aux difficultés que je rencontre sur une conversion Macro excel vers google sheet.
Voilà, j'ai un fichier excel qui me permet via une macro de générer un fichier PDF en fonction de différentes informations renseignées dans 2 feuilles excel.
une feuille appelée Fichier_interne, qui est complétée par un utilisateur, les infos de cette feuille sont déversées via des formules dans une feuille appeler Fichier_client.
Un bouton ensuite permet à l'utilisateur de générer un PDF, le fichier PDF se génère via les informations qui ont été constituées dans la feuille Fichier_client.
J'ai essayé de voir à convertir ça au format google sheet mais je dois avouer que c'est une gageure sans nom car je n'arrive pas à trouver des correspondances entre le VBA excel et le javascript de google (notamment ce qui est lié aux fonctions pures et à la génération d'un PDF avec création de répertoire automatique)
Si quelqu'un saurait m'aider, je ne suis même pas sur que ce soit faisable dans google sheet.
Ci joint mon code Macro excel
Merci encore !!
' Fonction de création de répertoire si non existant
Function RépertoireExiste(Chemin As String) As Boolean
On Error Resume Next
RépertoireExiste = GetAttr(Chemin) And vbDirectory
If RépertoireExiste = True Then
Exit Function
Else
MkDir (Chemin)
End If
End Function
-------------------------------------------------------------------------
' Fonction permettant de checker si un fichier est déjà ouvert
Function FichierEstOuvert(ByRef FichierTeste As String) As Boolean
Dim Fichier As Long
On Error GoTo Erreur
Fichier = FreeFile
Open FichierTeste For Input Lock Read As #Fichier
Close #Fichier
FichierEstOuvert = False
Exit Function
Erreur:
FichierEstOuvert = True
End Function
-----------------------------------------------------------------------------
Sub Bouton18_Cliquer()
'
' Bouton18_Cliquer Macro
'
'indication du chemin de sauvegarde des PDF
Dim chemsave As String
chemsave = "C:\TEST\" '
' Controle si la valeur BM est présente (BM ne doit pas être présent)
If Range("G3") = "BM" Then
MsgBox ("Il ne s'agit pas d'une valeur correcte !"), vbInformation, "Erreur"
Exit Sub
' Controle si la valeur a été remplie
ElseIf Range("K2") <> "AIR" And Range("K2") <> "HELIUM" And Range("K2") <> "DIAMANT" And Range("F46") = "" Then
MsgBox ("La valeur doit être remplie !"), vbInformation, "Erreur"
Exit Sub
' Controle si les taxes ont été remplies
ElseIf Range("F49").Value = "" Then
MsgBox ("Les taxes doivent être renseignées en % !"), vbInformation, "Erreur"
Exit Sub
' Controle test si fichier pdf déjà ouvert
ElseIf FichierEstOuvert(chemsave & "FICHIER_CLIENT_" & Worksheets("fichier_Interne").Range("F2").Value & "_" & Worksheets("fichier_Client").Range("E5").Value & ".pdf") Then
MsgBox ("Un fichier PDF portant le même nom est déjà ouvert," & vbCrLf & _
"merci de le fermer avant de continuer !"), vbInformation, "Erreur"
Exit Sub
Else 'Sinon on part dans la boucle de generation du PDF
'Je copie les valeurs de "fichier_Interne" vers "fichier_Client"
With Worksheets("Devis_Interne")
Worksheets("fichier_Client").Range("D1").Value = .Range("F1").Value 'nom client
Worksheets("fichier_Client").Range("E5").Value = .Range("E7").Value 'N° info
Worksheets("fichier_Client").Range("D3").Value = .Range("F4").Value 'nom
Worksheets("fichier_Client").Range("D4").Value = .Range("F5").Value 'prenom
Worksheets("fichier_Client").Range("H3").Value = .Range("J4").Value 'tel
Worksheets("fichier_Client").Range("H4").Value = .Range("J5").Value 'mail
Worksheets("fichier_Client").Range("B15").Value = .Range("E9").Value 'titre de la demande
Worksheets("fichier_Client").Range("J1").Value = DateValue(Now)
Worksheets("fichier_Client").Range("B9").Value = .Range("K1").Value 'destinataire
End With
'Je met à jour le mode en fonction de la section remplie
If UCase(Range("I7")) Like "BAN*" Then
Worksheets("fichier_Client").Range("B11").Value = "MARITIME"
ElseIf UCase(Range("J7")) Like "MAR*" Then
Worksheets("fichier_Client").Range("B11").Value = "MARITIME"
ElseIf UCase(Range("J7")) Like "ROU*" Then
Worksheets("fichier_Client").Range("B11").Value = "ROUTE"
ElseIf UCase(Range("J7")) Like "CAM*" Then
Worksheets("fichier_Client").Range("B11").Value = "ROUTE"
ElseIf UCase(Range("J7")) Like "AVI*" Then
Worksheets("fichier_Client").Range("B11").Value = "AVION"
Else
MsgBox ("la Section doit être renseignée!"), vbInformation, "Erreur"
Exit Sub
End If
Application.EnableEvents = True
Worksheets("fichier_Client").Visible = 1 'on rend la feuille fichier_Client visible afin de générer le PDF
Worksheets("fichier_Client").Activate
Call RépertoireExiste(chemsave) 'on appelle la fonction de création du repertoire si celui-ci n'existe pas
Application.ScreenUpdating = False
' Generation du PDF
ActiveSheet.PageSetup.PrintArea = "$A$1:$K$72"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=chemsave & "FICHIER_CLIENT_" & Worksheets("fichier_Interne").Range("F2").Value & "_" & ActiveSheet.Range("E5").Value & ".pdf" _
, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
:=False, OpenAfterPublish:=True
Application.ScreenUpdating = True
'MSG pour indiquer où se trouve le fichier
MsgBox "Votre fichier se trouve à cet emplacement: " & chemsave & "FICHIER_CLIENT_" & Worksheets("fichier_Interne").Range("F2").Value & "_" & ActiveSheet.Range("E5").Value & ".pdf", vbInformation, "Convertir en PDF"
Worksheets("fichier_Interne").Activate 'on se repositionne sur la feuille fichier_Interne
Worksheets("fichier_Client").Visible = 0 'on remet la feuille fichier_Client en masquée
End If
End Sub