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 :

Erreur 1004 liée à une commande Set


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 29
    Par défaut Erreur 1004 liée à une commande Set
    Bonjour,

    Je suis confrontée à une erreur de type 1004 et je n'ai pas la moindre idée de ce qui la provoque (apprentissage de VBA sur le tas...).
    J'ai créé une macro pour substituer des caractères dans des cellules :

    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
     
    Dim i As Integer, j As Integer, k As Integer, nbreLignes As Long
        Dim Feuillet(1 To 1) As String, Caract(1 To 16) As String, Subst(1 To 16) As String
        Dim c As Range
        Dim ColNom, ColPrenom As Integer
        Dim Nom As String
     
        Nom = InputBox("Quel est le nom du feuillet contenant les caractères à modifier ?", vbQuestion, "")
        ColNom = InputBox("Quel est le numéro de la colonne contenant le nom ? (1 pour A, 2 pour B...)", vbQuestion, "")
        ColPrenom = InputBox("Quel est le numéro de la colonne contenant le prenom ? (1 pour A, 2 pour B...)", vbQuestion, "")
     
        Caract(1) = "é"
        ...
        Subst(1) = "e"
        ...
     
        Sheets(Feuillet(1)).Activate
        Sheets(Feuillet(1)).Range("A1").Select
        nbreLignes = Range(ActiveCell, ActiveCell.End(xlDown)).Count
     
            For k = 1 To 16
                For i = 1 To nbreLignes
                    Set c = Sheets(Feuillet(1)).Cells(i, ColNom).Find(Caract(k))
                    If Not c Is Nothing Then
                        Sheets(Feuillet(1)).Cells(i, ColNom).Value = Replace(Sheets(Feuillet(1)).Cells(i, ColNom).Value, Caract(k), Subst(k))
                    End If
                    Set c = Sheets(Feuillet(1)).Cells(i, ColPrenom).Find(Caract(k))
                    If Not c Is Nothing Then
                        Sheets(Feuillet(1)).Cells(i, ColPrenom).Value = Replace(Sheets(Feuillet(1)).Cells(i, ColPrenom).Value, Caract(k), Subst(k))
                    End If
                Next i
            Next k
    La macro plante au moment de l'affectation "Set c".
    Quelqu'un pourait-il m'éclairer sur le problème ?

    Merci d'avance
    Christelle

  2. #2
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut ERREUR
    Bonjour Chrisbdx, Bonjour le Forum,

    Pour mieux repérer l'origine de l'erreur, imprime dans la fenêtre Exécution toutes les composantes de la ligne en erreur.
    k, Caract(k), etc..

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonsoir,
    D'une je ne comprends pas ce qui suit, et de deux je ne vois pas où tu le renseignes!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Feuillet(1 To 1) As String

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Il n'est pas utile de faire une boucle pour remplacer des caractères.
    La méthode Replace de l'objet Range est suffisante
    Exemple d'un remplacement de é par e dans colonne 2 de la plage de données commencant en cellule A1 de la feuille nommée db
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With ThisWorkbook.Worksheets("db").Range("A1").CurrentRegion
    .Columns(2).Replace "é", "e"
    End With
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 29
    Par défaut
    Bonjour,

    @rudupt

    Je n'avais pas collé entièrement mon code, j'ai effectivement une instruction pour affecter le nom dans mon code initial. Sinon, le code est prévu pour pouvoir passer d'un feuillet à un autre, mais limité ici à un feuillet en phase de test.

    @MarcelG

    À l'éxécution, la fenêtre reste vide...

    @Philippe Tulliez,

    Votre remarque me permet de voir comment je peux mieux utiliser la méthode "Replace". Néanmoins, et j'aurais dû dès le début mettre mon code en entier, cette macro n'a pas seulement pour objectif de remplacer des caractères (c'ets la 1re étape), elle a pour but de créer une clé d'identification en concaténant 3 variables, dont Nom et Prenom. C'est pourquoi, je souhaite gommer les problèmes d'écriture en substituant toute une liste de caractères. J'avoue que je ne suis pas très au fait des commandes qui permettent de sélectionner des plages complètes. Naturellement, je reviens toujours à des boucles pour me déplacer ligne par ligne. Du fait de mes connaissances limitées, c'est plus sûr. Du coup, puis-je "mixer" toutes ces méthodes pour obtenir uen concaténation à la fin ?

    Voici mon code complet :
    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
     
    Option Explicit
     
    Sub CaracteresAccentuesEtSpeciaux()
        Dim i As Integer, j As Integer, k As Integer, nbreLignes As Long
        Dim Feuillet(1 To 1) As String, Caract(1 To 16) As String, Subst(1 To 16) As String
        Dim c As Range
        Dim ColNom, ColPrenom As Integer
        Dim Nom As String
     
        Nom = InputBox("Quel est le nom du feuillet contenant les caractères à modifier ?", vbQuestion, "")
        ColNom = InputBox("Quel est le numéro de la colonne contenant le nom ? (1 pour A, 2 pour B...)", vbQuestion, "")
        ColPrenom = InputBox("Quel est le numéro de la colonne contenant le prenom ? (1 pour A, 2 pour B...)", vbQuestion, "")
     
        Feuillet(1) = Nom
     
        Caract(1) = "é"
        Caract(2) = "è"
        Caract(3) = "ë"
        Caract(4) = "ê"
        Caract(5) = "ï"
        Caract(6) = "î"
        Caract(7) = "ö"
        Caract(8) = "ô"
        Caract(9) = "ü"
        Caract(10) = "û"
        Caract(11) = "ç"
        Caract(12) = "'"
        Caract(13) = "-"
        Caract(14) = ";"
        Caract(15) = ","
        Caract(16) = " "
     
     
        Subst(1) = "e"
        Subst(2) = "e"
        Subst(3) = "e"
        Subst(4) = "e"
        Subst(5) = "i"
        Subst(6) = "i"
        Subst(7) = "o"
        Subst(8) = "o"
        Subst(9) = "u"
        Subst(10) = "u"
        Subst(11) = "c"
        Subst(12) = ""
        Subst(13) = ""
        Subst(14) = ""
        Subst(15) = ""
        Subst(16) = ""
     
        Sheets(Feuillet(1)).Activate
        Sheets(Feuillet(1)).Range("A1").Select
        nbreLignes = Range(ActiveCell, ActiveCell.End(xlDown)).Count
     
            For k = 1 To 16
                For i = 1 To nbreLignes
                    Set c = Sheets(Feuillet(1)).Cells(i, ColNom).Find(Caract(k))
                    If Not c Is Nothing Then
                        Sheets(Feuillet(1)).Cells(i, ColNom).Value = Replace(Sheets(Feuillet(1)).Cells(i, ColNom).Value, Caract(k), Subst(k))
                    End If
                    Set c = Sheets(Feuillet(1)).Cells(i, ColPrenom).Find(Caract(k))
                    If Not c Is Nothing Then
                        Sheets(Feuillet(1)).Cells(i, ColPrenom).Value = Replace(Sheets(Feuillet(1)).Cells(i, ColPrenom).Value, Caract(k), Subst(k))
                    End If
                Next i
            Next k
                Sheets(Feuillet(1)).Columns("G:G").Select
                Selection.EntireColumn.Insert
                For i = 2 To nbreLignes
                    Sheets(Feuillet(1)).Cells(i, 7).Value = LCase(Sheets(Feuillet(1)).Cells(i, 4)) & LCase(Sheets(Feuillet(1)).Cells(i, 5)) & Sheets(Feuillet(1)).Cells(i, 6)
                Next i
     
    End Sub

  6. #6
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour à vous, Bonjour au Forum,

    J'ai l'impresion que tu ne sais pas de quoi je parle.
    Ce qui est légitime.
    Au demeurant, recherche le mot clé "Fenêtre Exécution" (son affichage, son usage...).
    Et reviens si nécessaire.

    Si je peux me permettre, le message de Philippe (salut à lui), est que la simplification du code est toujours à privilégier.
    Comme dirait Pierre, penser Excel avant de coder VBA.
    Autrement dit, utilise la fonction SommeProd dans ta feuille de travail, et ne code en VBA que les actions utiles qui ne peuvent outrepasser une procédure.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    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 test()
    Dim Caract()
    Dim Subst()
    Caract = Array("", "é", "è", "ë", "ê", "ï", "î", "ö", "ô", "ü", "û", "ç", "'", "-", ";", ",", " ")
    Subst = Array("", "e", "e", "e", "e", "i", "i", "o", "o", "u", "u", "c", "", "", "", "", "")
    For i = 1 To 16
    ReplacChar Sheets("Feuil1").Columns(1), Caract(i), Subst(i)
    ReplacChar Sheets("Feuil1").Columns(1), UCase(Caract(i)), UCase(Subst(i))
    Next
    End Sub
     
    Sub ReplacChar(Plage As Range, Quoi, Par)
        Plage.Replace What:=Quoi, Replacement:=Par, LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _
            ReplaceFormat:=False
    End Sub

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. erreur 1004 sur une méthode select
    Par lollo dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/11/2008, 19h21
  2. Réponses: 1
    Dernier message: 17/07/2008, 22h07
  3. Réponses: 16
    Dernier message: 13/03/2008, 21h51
  4. Erreur 1004 sur une boucle simple
    Par ruzakruzak dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 06/07/2007, 09h00
  5. [VB-E] Erreur 1004 dans une boucle For
    Par lycaon dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 02/11/2006, 22h41

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