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

  1. #1
    Membre actif Avatar de FadeToBlack
    Homme Profil pro
    ...
    Inscrit en
    août 2010
    Messages
    297
    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 : 297
    Points : 200
    Points
    200
    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
    Douter de tout, toujours, et surtout de soi-même...

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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : décembre 2008
    Messages : 3 245
    Points : 7 854
    Points
    7 854
    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
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  3. #3
    Membre actif Avatar de FadeToBlack
    Homme Profil pro
    ...
    Inscrit en
    août 2010
    Messages
    297
    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 : 297
    Points : 200
    Points
    200
    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
    Douter de tout, toujours, et surtout de soi-même...

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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : décembre 2008
    Messages : 3 245
    Points : 7 854
    Points
    7 854
    Par défaut
    Peux-tu nous montrer le code qui déclenche une erreur 13 ?
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  5. #5
    Membre actif Avatar de FadeToBlack
    Homme Profil pro
    ...
    Inscrit en
    août 2010
    Messages
    297
    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 : 297
    Points : 200
    Points
    200
    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
    Douter de tout, toujours, et surtout de soi-même...

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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : décembre 2008
    Messages : 3 245
    Points : 7 854
    Points
    7 854
    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
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  7. #7
    Membre actif Avatar de FadeToBlack
    Homme Profil pro
    ...
    Inscrit en
    août 2010
    Messages
    297
    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 : 297
    Points : 200
    Points
    200
    Par défaut
    Je te remercie.

    Cela fait trop longtemps que je n'ai pas utilisé VBA......

    JE vais quand même étudier la portance et l'utilisation de Python dans les macros.

    Bon après midi à toi.


    PS : Il n'y a rien de mieux que le ZX81, hormis peut être le TO7
    Douter de tout, toujours, et surtout de soi-même...

  8. #8
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    décembre 2008
    Messages
    3 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : décembre 2008
    Messages : 3 245
    Points : 7 854
    Points
    7 854
    Par défaut
    voici une fonction qui permet de faire l'opération avec en paramètre : la plage à balayer, l'ancienne valeur , la nouvelle valeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub RemplacerChaine(Plage, oldVal, NewVal)
    Dim c As Range
    Dim firstAddress As String
            Set c = Plage.Find(oldVal, LookIn:=xlValues)
            If Not c Is Nothing Then
                firstAddress = c.Address
                Do
                    c.Value = Replace(c.Value, oldVal, NewVal)
                    Set c = Plage.FindNext(c)
                Loop While Not c Is Nothing
            End If
    End Sub
    Code de test qui marche chez moi en Excel 2019 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub TestBigChaine()
    Dim BigChaine As String
    BigChaine = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" & _
                     "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" & _
                     "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" & _
                     "ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd"
    RemplacerChaine ActiveSheet.UsedRange, "MotARemplacer", BigChaine
    End Sub
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  9. #9
    Membre actif Avatar de FadeToBlack
    Homme Profil pro
    ...
    Inscrit en
    août 2010
    Messages
    297
    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 : 297
    Points : 200
    Points
    200
    Par défaut
    Bonjour Jurassic Pork,

    Désolé de ne pas avoir répondu plus tôt, mais j'étais pris par autrechose.
    J'ai adapté ta première solution à mon cas d'étude. Cela donne ceci

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    Sub correction_nom()
    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 String
    Dim NewVal As String
     
     
    line = 2: col = 1
     
    last_line = Cells.SpecialCells(xlCellTypeLastCell).Row
    last_col = Cells.SpecialCells(xlCellTypeLastCell).Column
     
    For line = 2 To last_line
        oldVal = Sheets("Renommer").Cells(line, 1).Value
        NewVal = Sheets("Renommer").Cells(line, 2).Value
        FindMyValue oldVal, NewVal
    '    Sheets("expguer").Replace What:=oldVal, replacement:=NewVal
    '    MsgBox CStr(Len(NewVal))
     '  replacement oldVal, newVal
    Next line
     
    End Sub
     
     
    Sub FindMyValue(oldV, NewV)
     
        Dim c As Range
        Dim firstAddress As String
     
        With Worksheets(1).Range("B2", Range("B2").End(xlDown))
            Set c = .Find(oldV, LookIn:=xlValues)
            If Not c Is Nothing Then
                firstAddress = c.Address
                Do
                    c.Value = NewV
                    Set c = .FindNext(c)
                Loop While Not c Is Nothing
            End If
        End With
     
    End Sub


    Cela fonctionne parfaitement, néanmoins, les remplacements s'effectue sur toute la case et non sur la chaine de caractères.

    J'ai par exemple en données de base trois cellules :
    Paul Auchon
    Pete Agore
    Paul Auchon ; Pete Agore

    Pour les remplacements j'ai :
    Paul Auchon --> P. AUCHON
    Pete Agore --> P. AGORE

    Je m'attends donc à avoir :
    P. AUCHON
    P. AGORE
    P. AUCHON ; P. AGORE

    or j'obtiens :
    P. AUCHON
    P. AGORE
    P. AUCHON

    Bizarre
    Douter de tout, toujours, et surtout de soi-même...

  10. #10
    Membre actif Avatar de FadeToBlack
    Homme Profil pro
    ...
    Inscrit en
    août 2010
    Messages
    297
    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 : 297
    Points : 200
    Points
    200
    Par défaut
    Bon après noeuds à ce qu'il me reste de cheveux, j'ai trouvé la solution. Purée c'est loin VBA pour moi.......

    Dans la fonction FindMyValue(), J'ai remplacé :

    Par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    c.Value = Replace(c.Value, oldV, NewV)
    Est-ce que tu peux me confiùer, la bonne logique ?

    Merci d'avance
    Douter de tout, toujours, et surtout de soi-même...

  11. #11
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    décembre 2008
    Messages
    3 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : décembre 2008
    Messages : 3 245
    Points : 7 854
    Points
    7 854
    Par défaut
    Hello,
    en utilisant le Replace comme dans mon code 2 , il n' y a pas ce problème.
    c.Value c'est la valeur de toute la cellule c.
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  12. #12
    Membre actif Avatar de FadeToBlack
    Homme Profil pro
    ...
    Inscrit en
    août 2010
    Messages
    297
    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 : 297
    Points : 200
    Points
    200
    Par défaut
    Oui, effectivement, j'ai repris en détails ton code et effectivement c'est ce qui était mentionné.

    A faire 10 trucs en même temps on s'emmêle les pinceaux....

    Quoiqu'il en soit je te remercie pour ton aide et tes indications.

    Bonne fin de journée

    JE mets le topic en "Résolu"
    Douter de tout, toujours, et surtout de soi-même...

  13. #13
    Membre actif Avatar de FadeToBlack
    Homme Profil pro
    ...
    Inscrit en
    août 2010
    Messages
    297
    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 : 297
    Points : 200
    Points
    200
    Par défaut
    Bonjour Jurassic Pork,

    JE réouvre le post car je me heurte à un nouveau problème :
    J'ai fait des tests hier soir pour voir si la macro fonctionnait convenablement et ne me générait pas de problèmes.
    Et ben j'ai bien fait :

    Je suis partie d'un liste de 1554 noms de personnes, dont certains se répètent plusieurs fois et certaines cellules en contiennent plusieurs à côté.

    Sur la seconde feuille, j'ai une liste de 600 noms unique avec dans la colonne d'à côté la modification à effectuer.
    Si je lance la macro, Excel se bloque, prend 50 % de mon CPU et reste figé. Je suis du coup obligé de tuer le processus.

    Je peux comprendre que pour une telle liste, les modifications prennent entre 5 et 10 minutes (ce qui me parait long quand même), mais pas figé l'appli.
    Il doit y avoir des boucles qui tournent dans le vide... Mais je ne comprends pas ce qui les provoque.

    Bonne journée à toi
    Douter de tout, toujours, et surtout de soi-même...

  14. #14
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    décembre 2008
    Messages
    3 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : décembre 2008
    Messages : 3 245
    Points : 7 854
    Points
    7 854
    Par défaut
    Hello,
    peux-tu nous mettre ton code actuel ?
    As-tu aussi surveiller la mémoire utilisée ? Est-ce que ça bloque avec 200, 300 , 400 , 500 noms ?
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  15. #15
    Membre actif Avatar de FadeToBlack
    Homme Profil pro
    ...
    Inscrit en
    août 2010
    Messages
    297
    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 : 297
    Points : 200
    Points
    200
    Par défaut
    voici le code du mon fichier Modif_nom.xlsm

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    Sub correction_nom()
    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 String
    Dim NewVal As String
     
     
    line = 2: col = 1
     
    last_line = Range("B2", Range("B2").End(xlDown)).Count
    last_col = Cells.SpecialCells(xlCellTypeLastCell).Column
     
     
    For line = 2 To 5
        oldVal = Sheets("Renommer").Cells(line, 1).Value
        NewVal = Sheets("Renommer").Cells(line, 2).Value
        FindMyValue oldVal, NewVal
     
    Next line
     
    End Sub
     
     
    Sub FindMyValue(oldV, NewV)
     
        Dim c As Range
        Dim firstAddress As String
     
        With Worksheets(1).Range("B2", Range("B2").End(xlDown))
            Set c = .Find(oldV, LookIn:=xlValues, SearchOrder:=xlByColumns)
            If Not c Is Nothing Then
                firstAddress = c.Address
                Do
                    c.Value = Replace(c.Value, oldV, NewV)
     
                    Set c = .FindNext(c)
                Loop While Not c Is Nothing
            End If
        End With
     
    End Sub
    En fait, j'ai essayé en mettant dans ma boucle principale :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For line = 2 To 5
        oldVal = Sheets("Renommer").Cells(line, 1).Value
        NewVal = Sheets("Renommer").Cells(line, 2).Value
        FindMyValue oldVal, NewVal
    Next line
    Donc en théorie, je ne fais la recherche que sur 3 noms cela bloque là aussi.

    Merci de ton aide
    Douter de tout, toujours, et surtout de soi-même...

  16. #16
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    décembre 2008
    Messages
    3 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : décembre 2008
    Messages : 3 245
    Points : 7 854
    Points
    7 854
    Par défaut
    oops ! c'est le Loop While Not c Is Nothing qui n'est pas bon : avec ceci on ne sort pas de la boucle car on revient refaire la recherche au début de la plage sur le dernier find next et ainsi de suite. Il faut utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Loop While c.Address <> firstAddress
    je me demandais pourquoi on n'utilisait pas firstAddress
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  17. #17
    Membre actif Avatar de FadeToBlack
    Homme Profil pro
    ...
    Inscrit en
    août 2010
    Messages
    297
    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 : 297
    Points : 200
    Points
    200
    Par défaut
    Magnifique, extraordinaire, géantissime.

    Cela fonctionne du feu de dieu. Du coup, j'ai essayé sur un fichier avec un peu plus de 10 000 ligne avec une liste de base de 6000 nom à modifier.

    Temps d'exécution : 14 secondes....


    Une merveille....

    Un grand merci à toi.
    Douter de tout, toujours, et surtout de soi-même...

  18. #18
    Membre actif Avatar de FadeToBlack
    Homme Profil pro
    ...
    Inscrit en
    août 2010
    Messages
    297
    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 : 297
    Points : 200
    Points
    200
    Par défaut
    ET non, cela ne fonctionne plus :

    Si dans mes listes je n'ai que de l'alphabétique, cela fonctionne à merveille. Mais dès qu'il y un caractère spécial (autre qu'un guillemet), cela plante. Idem pour la présence d'un chiffre.

    Par exemple si je veux transformer "Jean-Marc" en "toto", ou "Henri 4" en toto, cela fait bien la correction, mais au moment de passer à la suite, il bloque.

    J'obtiens l'erreur d'exécution 91 Varaible objet ou variable de bloc With non définie. Tout cela au niveau de la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Loop While  c.Address <> firestAddress

    En utilisant la fenêtre de variable locales, je remarque bien non pas c.value, mais c.value2 qui est effectivement en string. Donc cela ne devrait pas poser de problème.

    Encore Bizarre
    Douter de tout, toujours, et surtout de soi-même...

  19. #19
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    décembre 2008
    Messages
    3 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : décembre 2008
    Messages : 3 245
    Points : 7 854
    Points
    7 854
    Par défaut
    Hello,
    firestAddress ???? Quel est le code complet ?
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  20. #20
    Membre actif Avatar de FadeToBlack
    Homme Profil pro
    ...
    Inscrit en
    août 2010
    Messages
    297
    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 : 297
    Points : 200
    Points
    200
    Par défaut
    Hello,

    Voici le code

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    Sub correction_nom()
    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 String
    Dim NewVal As String
     
     
    line = 2: col = 1
    'Worksheets("Renommer").Activate
    last_line = Sheets("renommer").Cells.SpecialCells(xlCellTypeLastCell).Row
    'last_line = Sheets("renommer").Range("B2", Range("B2").End(xlDown)).Count
    last_col = Sheets("renommer").Cells.SpecialCells(xlCellTypeLastCell).Column
     
     
    For line = 2 To last_line
        oldVal = Sheets("Renommer").Cells(line, 1).Value
        NewVal = Sheets("Renommer").Cells(line, 2).Value
        FindMyValue oldVal, NewVal
    '    RemplacerChaine ActiveSheet.UsedRange, oldVal, NewVal
     
    Next line
     
    MsgBox "Traitement terminé !!"
     
    End Sub
     
     
    Sub FindMyValue(oldV, NewV)
     
        Dim c As Range
        Dim firstAddress As String
     
     
        With Worksheets(1).Range("B2", Range("B2").End(xlDown))
            Set c = .Find(oldV, LookIn:=xlValues, SearchOrder:=xlByColumns, MatchCase:=False)
            If Not c Is Nothing Then
                firstAddress = c.Address
                Do
    '                c.Value = c.Value.ToString
     
                    c.Value = Replace(c.Value, oldV, NewV, , , vbTextCompare)
     
                    Set c = .FindNext(c)
                Loop While c.Address <> firstAddress
            End If
        End With
     
    End Sub
    Et encore une fois merci pour ton aide
    Douter de tout, toujours, et surtout de soi-même...

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, 17h09
  2. Ouverture de fichier Excel avec macros
    Par Mathusalem dans le forum MATLAB
    Réponses: 2
    Dernier message: 15/06/2006, 12h39
  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, 01h00
  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, 19h00
  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, 11h51

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