IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Excel et macro en Python


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de FadeToBlack
    Homme Profil pro
    ...
    Inscrit en
    Août 2010
    Messages
    321
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : ...
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Août 2010
    Messages : 321
    Par défaut Excel et macro en Python
    Bonjour à tous,

    Plusieurs utilisateurs de mon entreprise me demandent de leur créer des macros pour traiter des éléments sur leurs fichiers Excel.
    N'ayant pas fait de VBA depuis un siècle, je me sens moyen de me replonger dedans, surtout que j'ai appris qu'il était possible de faire des macros en python.

    En pratique, j'ai mon fichier excel et mon script python. Je traite les éléments avec Pandas (pour ceux qui connaissent). Cette partie là n'a pas vraiment d'importance.
    Ce que j'aimerai savoir c'est comment, au clic dans le fichier excel, déclencher le code python ?
    Bien évidemment les utilisateurs n'ont pas Python installé sur leurs ordinateurs

    Du coup faut-il que je compile mon script Python pour avoir un .exe qui sera appelé dans Excel ?

    J'avoue que je suis un peu perdu.

    Auriez vous des pistes afin que je puisse venir en aide à mes collègues.
    JE vous remercie par avance.

    Bonne journée à tous

  2. #2
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 242
    Par défaut
    Hello,
    Avec OpenOffice et LibreOffice on peut utiliser des macros écrites en python. Reste à savoir si les documents Excel de ton entreprise s'ouvre correctement dans LibreOffice ou OpenOffice (il y a parfois des problèmes de mise en page). Si tu ne peux pas installer OpenOffice ou LibreOffice dans ton entreprise tu peux les installer en version portable (dans un répertoire où tu as tous les droits).
    Pour excel il y a aussi pyxll et xlwings (voir ici une comparaison des deux)
    Ami calmant, J.P

  3. #3
    Membre éclairé Avatar de FadeToBlack
    Homme Profil pro
    ...
    Inscrit en
    Août 2010
    Messages
    321
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : ...
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Août 2010
    Messages : 321
    Par défaut
    Bonjour Jurassic Pork,


    Nous n'avons pas OPenOffice et il ne m'est pas permis d'installer des softs comme cela même en portable. Il me semblait que Office permettait des macro Python. Ce n'est pas le cas ?

    Du coup en attendant, je reprends un peu VBA mais je me heurte à un remplacemement de données dans une cellule.

    je voudrait remplacer un mot par un texte de plus de 255 charactères. En général, plutôt quelques chose du genre 1000.
    et du coup, j'ai une erreur d'exécution 13. JE n'arrive pas à trouver la solution, qui en Python serait réglable en 10 s par un longText...

    Merci d'avance

  4. #4
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 242
    Par défaut
    Peux-tu nous montrer le code qui déclenche une erreur 13 ?

  5. #5
    Membre éclairé Avatar de FadeToBlack
    Homme Profil pro
    ...
    Inscrit en
    Août 2010
    Messages
    321
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : ...
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Août 2010
    Messages : 321
    Par défaut
    Voici le code qui pose problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    Sub rename_data()
    Dim line As Integer
    Dim col As Integer
    Dim last_line As Integer
    Dim last_col As Integer
    Dim val As String
     
    Dim oldVal As Text
    Dim newVal As Text
     
     
    line = 2: col = 1
     
    last_line = Cells.SpecialCells(xlCellTypeLastCell).Row
    last_col = Cells.SpecialCells(xlCellTypeLastCell).Column
     
    For line = 2 To last_line
        oldVal = Sheets("Rename").Cells(line, 1).Value
        newVal = Sheets("Rename").Cells(line, 2).Value
        Sheets("expguer").UsedRange.Replace What:=oldVal, replacement:=newVal
        MsgBox CStr(Len(newVal))
     
    Next line
     
    End Sub

    Cela bloque à cette ligne là
    Sheets("expguer").UsedRange.Replace What:=oldVal, replacement:=newVal

  6. #6
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 242
    Par défaut
    La fonction Range.Replace est limitée en nombre de caractères contrairement à la fonction VBA Replace. Mais dans ce cas il faut faire la recherche . Microsoft propose dans ses exemples :
    Cet exemple montre comment rechercher toutes les cellules de la plage A1:A500 dans la première feuille de calcul contenant la sous-chaîne « abc », et comment remplacer « abc » par « xyz ».
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub FindString()
        Dim c As Range
        Dim firstAddress As String
        With Worksheets(1).Range("A1:A500")
            Set c = .Find("abc", LookIn:=xlValues)
            If Not c Is Nothing Then
                firstAddress = c.Address
                Do
                    c.Value = Replace(c.Value, "abc", "xyz")
                    Set c = .FindNext(c)
                Loop While Not c Is Nothing
            End If
        End With
    End Sub
    Ami calmant, J.P

Discussions similaires

  1. [Excel] Une macro pour F4
    Par Viper7 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 20/06/2006, 16h09
  2. Ouverture de fichier Excel avec macros
    Par Mathusalem dans le forum MATLAB
    Réponses: 2
    Dernier message: 15/06/2006, 11h39
  3. [VBA][Excel]Exécution macro avec fichiers source
    Par ouezon dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/12/2005, 00h00
  4. VBA et EXCEL et MACRO
    Par life is magic dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 14/11/2005, 18h00
  5. probleme de selection aleatoire sur excel avec macro vba
    Par guillaume sors dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/10/2005, 10h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo