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 :

Macro lors de l'application à une plage de cellules


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Autre
    Inscrit en
    Janvier 2021
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Autre
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2021
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Macro lors de l'application à une plage de cellules
    Bonjour,

    Merci d'avance pour votre aide
    J'ai écrit la macro ci-dessous pour me permettre d'homogénéiser le format de cellules Excel. Ces cellules peuvent contenir des nombres stockés sous forme de texte ou des nombres avec un point comme séparateur décimal. Je veux sélectionner une plage de cellules, lancer la Macro et obtenir des nombres (et non plus du texte) avec virgule comme séparateur décimal.
    La Macro fonctionne très bien pour une plage de cellules avec des nombres stockés en format texte. Toute la plage sélectionnée est convertie au bon format.
    La Macro fonctionne également très bien pour 1 cellule avec un nombre ayant un point comme séparateur, mais elle ne fonctionne plus si je sélectionne une plage de ces mêmes cellules (pour lesquelles ça fonctionne ''individuellement'')

    Le message d'erreur est le suivant ''Erreur d'exécution '13' Incompatibilité de type''. Pourquoi ce problème dans le seul cas décrit ci-dessus ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        For Each cell In Selection
            ActiveCell.Replace What:=".", Replacement:=",", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False
        If (Application.WorksheetFunction.IsText(cell) = True) Then
            cell.Value = CDbl(cell.Value)
            Selection.NumberFormat = "#,##0.00"
        End If
        Next cell
    End Sub
    Merci beaucoup pour votre aide

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 661
    Points : 5 785
    Points
    5 785
    Par défaut
    Bonjour,

    Je ne comprends la raison de cet erreur.
    Mais je peux te proposer un moyen détourné pour ne pas l'avoir, puisque ça fonctionne pour une cellule seule

    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
    Sub aaa()
    Dim cell As Range
    For Each cell In Selection
    Call convertir(cell)
    Next cell
    End Sub
     
    Sub convertir(c As Range)
    c.Replace What:=".", Replacement:=",", LookAt:=xlPart, _
     SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
     ReplaceFormat:=False
     If (Application.WorksheetFunction.IsText(c) = True) Then
     c.Value = CDbl(c.Value)
    c.NumberFormat = "#,##0.00"
     End If
    End Sub
    J'aimerais bien aller vivre en Théorie, car en Théorie tout se passe bien.

  3. #3
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Bonjour,

    Dans cette partie,le replace se fait sur une seule cellule, celle qui est active.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        For Each cell In Selection
            ActiveCell.Replace What:=".", Replacement:=",", LookAt:=xlPart,
    C'est une des raisons pour laquelle je préconise de bannir l'utilisation des objets actifs (Selection, ActiveCell, ...)
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Autre
    Inscrit en
    Janvier 2021
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Autre
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2021
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Effectivement je n'ai toujours pas trouvé pourquoi ça ne marche pas.
    Mais votre solution fonctionne, merci beaucoup pour l'aide et votre réactivité

  5. #5
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Citation Envoyé par Fabwasu75 Voir le message
    Effectivement je n'ai toujours pas trouvé pourquoi ça ne marche pas.
    Je te l'ai dit : c'est parce que tu effectue le Replace sur la cellule Active (ActiveCell.Replace...)
    Comme aucune instruction de ton code modifie la position de la cellule active, c'est toujours la même cellule qui est modifiée
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Autre
    Inscrit en
    Janvier 2021
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Autre
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2021
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Nouveau problème
    Tu as raison Patrice je n'avais pas vu.
    Maintenant je veux utiliser la même macro sous Mac et là j'ai une erreur, apparemment ça bloque sur SearchFormat:=False avec comme message Compile error:Named argument not found
    Alors que ça fonctionne très bien sur PC.
    Merci

    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
    Sub aaa()
    Dim cell As Range
    For Each cell In Selection
    Call convertir(cell)
    Next cell
    End Sub
     
    Sub convertir(c As Range)
    c.Replace What:=".", Replacement:=",", LookAt:=xlPart, _
     SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
     ReplaceFormat:=False
     If (Application.WorksheetFunction.IsText(c) = True) Then
     c.Value = CDbl(c.Value)
    c.NumberFormat = "#,##0.00"
     End If
    End Sub

  7. #7
    Membre expérimenté Avatar de Transitoire
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Décembre 2017
    Messages
    724
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Décembre 2017
    Messages : 724
    Points : 1 454
    Points
    1 454
    Par défaut
    Bonjour, essayez avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    c.Replace What:=".", Replacement:=",", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False
    Sur mon Mac ça semble marcher.

    Cordialement
    On a deux vies, la deuxième commence quand on se rend compte qu'on n'en a qu'une.
    Confucius

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Autre
    Inscrit en
    Janvier 2021
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Autre
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2021
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Merci Transitoire,
    Je pourrai tester d'ici 10 jours.
    Pour être certain, en gros tu me conseilles de supprimer SearchFormat:=False, _
    ReplaceFormat:=False
    c'est bien ça ?

  9. #9
    Membre expérimenté Avatar de Transitoire
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Décembre 2017
    Messages
    724
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Décembre 2017
    Messages : 724
    Points : 1 454
    Points
    1 454
    Par défaut
    Bonjour, j'ai simplement effectué la manoeuvre avec l'enregistreur de macro. J'ai obtenu cet enregistrement qui fonctionne sur mon Mac.
    Sur ce type de problème, avec des standards différents, PC=>Mac, ou l'inverse, il est souvent très interessant d'utiliser l'enregistreur qui nous permet de trouver l'écriture du standard.
    Cordialement
    On a deux vies, la deuxième commence quand on se rend compte qu'on n'en a qu'une.
    Confucius

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    Autre
    Inscrit en
    Janvier 2021
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Autre
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2021
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Oui, c'est pas faux... Merci du conseil, je testerai

Discussions similaires

  1. [XL-2016] Macro pour Fractionner puis etirer une plage de cellule
    Par Luxaris dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 06/03/2019, 13h48
  2. [OpenOffice][Tableur] [Macro] Fusionner une plage de cellule
    Par Jgotheboss dans le forum OpenOffice & LibreOffice
    Réponses: 5
    Dernier message: 26/06/2016, 18h41
  3. Arrêt d'une macro lors de l'application d'un filtre automatique
    Par slu974 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 05/05/2014, 11h31
  4. [XL-2003] Exécution d'une macro lors de la modification d'une plage de cellules
    Par martinmacfly dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 08/01/2010, 10h51
  5. appliquer une macro a une plage de cellule variable
    Par johndeuf dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 10/11/2006, 16h18

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