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 :

Problème avec l'enregistreur de Macro : Message d'Erreur : aucune donnée à analyser n'a été selectionnée


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 32
    Points : 13
    Points
    13
    Par défaut Problème avec l'enregistreur de Macro : Message d'Erreur : aucune donnée à analyser n'a été selectionnée
    Bonjour,

    J'ai effectué ce début macro avec l'enregistreur de macro, elle fonctionne très bien si je me place en A1 avant de lancer la macro, cependant si je me place sur une autre cellule avant de la lancer, la macro ne s'exécute pas correctement. Le message d'erreur qui s'affiche est le suivant : ' aucune donnée à analiser n'a été selectionnée. Si quelqu'un a un peu de temps pour m'aider à corriger cette macro je l'en remercie d'avance

    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
    Sub Macro1()
     
    ' Macro1 Macro
     
    Sheets("Foglio2").Activate
     
        Selection.TextToColumns Destination:=Range("A1"), DataType:=xlFixedWidth, _
            OtherChar:="<", FieldInfo:=Array(0, 1), TrailingMinusNumbers:=True
        Columns("A:A").Select
        Selection.TextToColumns Destination:=Range("A1"), DataType:=xlFixedWidth, _
            OtherChar:="<", FieldInfo:=Array(0, 1), TrailingMinusNumbers:=True
        Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
            TextQualifier:=xlNone, ConsecutiveDelimiter:=False, Tab:=False, _
            Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
            :=":", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1)), _
            TrailingMinusNumbers:=True
        Selection.Delete Shift:=xlToLeft
        Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
            TextQualifier:=xlNone, ConsecutiveDelimiter:=False, Tab:=False, _
            Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
            :=">", FieldInfo:=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True
        Columns("B:B").Select
        Selection.TextToColumns Destination:=Range("B1"), DataType:=xlDelimited, _
            TextQualifier:=xlNone, ConsecutiveDelimiter:=False, Tab:=False, _
            Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
            :="<", FieldInfo:=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True
        Selection.ColumnWidth = 45.43
        Selection.ColumnWidth = 94.71
        Columns("C:C").Select
        Selection.Delete Shift:=xlToLeft

  2. #2
    Membre averti Avatar de Kiouane
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 198
    Points : 394
    Points
    394
    Par défaut
    Tu peux sinon nous expliquer le but de ton code?

  3. #3
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Selection représentant la plage actuellement sélectionnée dans la feuille active ... si par exemple tes données à convertir sont en A1 ... que ta cellule active est en D45 et qu'il n'y a aucune donnée dans la cellule ... tu comprends le sens du message d'erreur ?

    tu dois retravailler le code de l'enregistreur de macro, en premier lieu remplacer Selection par la cellule où tu veux faire la conversion

    ensuite, je ne suis pas certain que tout ces TextToColumns soient ce que tu souhaites réellement faire. Ca ressemble plutôt à un code d'enregistreur de macro où tu as testé "pleins de choses".

  4. #4
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 32
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par Kiouane Voir le message
    Tu peux sinon nous expliquer le but de ton code?
    J'essaie de mettre en forme des données, je sépare des données que j'ai dans la colonne A1, en divisant gace a Excel en deux colonnes.

    J'ai des données dans ma colonne A sur plusieurs lignes :

    Exemple 1---> <tns:Issue> : je veux garder uniquement Bond dans ma premiére colonne
    Exemple 2 (ligne suivante): <tns:Entreprise>Orange</tns:Entreprise> ---> Je garde Entreprise dans la premiere colonne et orange dans la seconde colonne et je supprime le reste.

    Grace a l'enregistreur de macro j'ai reussis a faire ces manip qui me permettent de séparer les colonnes et de me retrouver avec deux colonnes nettoyées des donneés dont je n'ai pas besoin. Le probléme est que si je me place sur la cellule B2 et non A1, la macro ne se lance pas.

  5. #5
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 32
    Points : 13
    Points
    13
    Par défaut
    Bonjour,

    Merci pour ta réponse, j'ai compris, je vais remplcer Selection par la colonne dans laquelle je travaille

    Mes données sont au début dans la colonne A (A1:A140), puis dans la colonne B (B1:B140) : A partir de cet endroit j'agis sur la colonne B : Columns("B:B").Select.
    Puis sur la colonne C pour la supprimer.

    J'ai refait la macro, dans le cas ou il y avait une manip en trop


    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
    Sub TEST()
    '
    ' TEST Macro
    '
     
    '
        Columns("A:A").Select
        Selection.TextToColumns Destination:=Range("A1"), DataType:=xlFixedWidth, _
            OtherChar:="<", FieldInfo:=Array(Array(0, 1), Array(83, 1)), _
            TrailingMinusNumbers:=True
        Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
            TextQualifier:=xlNone, ConsecutiveDelimiter:=False, Tab:=False, _
            Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
            :=":", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1)), _
            TrailingMinusNumbers:=True
        Selection.Delete Shift:=xlToLeft
        Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
            TextQualifier:=xlNone, ConsecutiveDelimiter:=False, Tab:=False, _
            Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
            :=">", FieldInfo:=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True
        Columns("B:B").Select
        Selection.TextToColumns Destination:=Range("B1"), DataType:=xlDelimited, _
            TextQualifier:=xlNone, ConsecutiveDelimiter:=False, Tab:=False, _
            Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
            :="<", FieldInfo:=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True
        Columns("C:C").Select
        Selection.Delete Shift:=xlToLeft
    J'ai essayé en remplaçant la selection par Columns("A:A") mais je rencontre le meme probème

  6. #6
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Citation Envoyé par cecile1234 Voir le message
    aucune donnée à analiser n'a été selectionnée ....
    Antidote il y a urgence.

  7. #7
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Je pense que la méthode Convertir n'est pas la meilleur dans ton cas.

    La reine des méthode, c'est les expressions rationnelles ...

    Hélas, je suis absolument pas doué pour écrire les pattern
    il y a un tutoriel réalisé par Caféine à propos de cette méthode, fait une recherche sur le forum si ça t'intéresse.


    Après, on pourrait éventuellement manipuler les chaines de caractère (Mid(), Replace(), Instr() ....), mais ça me semble être moins optimal dans ce cas que d'utiliser la conversion

    Peux-tu préparer un mini fichier excel, sans macro, de préférence au format Xlsx, contenant une feuille avec un large panel d'exemples non retravaillés, et une seconde feuille qui contient les mêmes exemples mais cette fois-ci remis en forme selon tes souhaits ?

    Là clairement, j'ai un peu de mal à conceptualiser ce qu'a fait l'enregistreur de macro pour tes "multiconversions en une passe"

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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 947
    Points : 9 275
    Points
    9 275
    Par défaut
    hello,
    comme le dit , joe le vrai , les expressions rationnelles permettent de faire ce type de traitement.
    Pour pouvoir les utiliser en VBA il faut utiliser la référence Microsoft VbScript Regular Expressions 5.5 (la cocher dans visual Basic/Outils/Références
    Et voici le code qui fait ce que tu sembles vouloir pour les trois premières lignes de A :
    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
    Public Sub EclateRegexPattern()
        Dim regEx As New RegExp
        Dim strInput As String
        Dim strRemplace As String
        Dim MaPlage As Range
        Set MaPlage = ActiveSheet.Range("A1:A3")
        For Each C In MaPlage
            ' premier motif
            ' on prend les lettres compris entre <tns: et >
                strInput = C.Value
                strRemplace = "$1"
                With regEx
                    .Global = True
                    .MultiLine = True
                    .IgnoreCase = False
            ' premier motif
            ' on prend les lettres compris entre <tns: et >
                    .Pattern = "^<tns:([a-zA-Z]+)>.*"
                End With
                If regEx.test(strInput) Then C.Offset(0, 1) = regEx.Replace(strInput, "$1")
                'deuxième motif
                'on prend ce qu'il y a entre > et <
                 regEx.Pattern = ".*>([a-zA-Z]+)<.*"
                If regEx.test(strInput) Then C.Offset(0, 2) = regEx.Replace(strInput, "$1")
        Next
    End Sub
    Résultat :
    Nom : VBA_Regex.png
Affichages : 485
Taille : 4,5 Ko
    Je ne suis pas un pro des expressions rationnelles et il doit y avoir moyen d'optimiser.

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  9. #9
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut



    'soir !

    Possible aussi sans expression rationnelle via la fonction Split simple et rapide …



    _________________________________________________________________________________________________________
    Je suis Paris, Charlie, Bruxelles, …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 947
    Points : 9 275
    Points
    9 275
    Par défaut
    hello,
    et voici un code qui utilise la fonction Split. Pour pouvoir l'utiliser dans le cas présent, j'utilise une fonction qui permet de "spliter" avec de multiples séparateurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub Splitage()
        Dim TableauSplit() As String
        Dim MaPlage As Range
        Set MaPlage = ActiveSheet.Range("A1:A3")
        For Each C In MaPlage
         TableauSplit() = ReplaceAndSplit(C.Value, "<:>")
         If UBound(TableauSplit) > 1 Then C.Offset(0, 1) = TableauSplit(2)
         If UBound(TableauSplit) > 3 Then C.Offset(0, 2) = TableauSplit(3)
        Next
    End Sub
    voici la fonction qui "splite" avec de multiples séparateurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Function ReplaceAndSplit(ByRef Text As String, ByRef DelimChars As String) As String()
        Dim DelimLen As Long, Delim As Long
        Dim strTemp As String, Delim1 As String, Arr() As String, ThisDelim As String
        strTemp = Text
        Delim1 = Left$(DelimChars, 1)
        DelimLen = Len(DelimChars)
        For Delim = 2 To DelimLen
            ThisDelim = Mid$(DelimChars, Delim, 1)
            If InStr(strTemp, ThisDelim) <> 0 Then _
                strTemp = Replace(strTemp, ThisDelim, Delim1)
        Next
        ReplaceAndSplit = Split(strTemp, Delim1)
    End Function
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  11. #11
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Ah oui, bien vu le split, j'y avais même pas pensé ... quelle truffe !

  12. #12
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 32
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    hello,
    comme le dit , joe le vrai , les expressions rationnelles permettent de faire ce type de traitement.

    […]

    Ami calmant, J.P
    Merci beaucoup

  13. #13
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 32
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    hello,
    et voici un code qui utilise la fonction Split. Pour pouvoir l'utiliser dans le cas présent, j'utilise une fonction qui permet de "spliter" avec de multiples séparateurs :

    […]
    Merci

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 26/10/2015, 16h37
  2. [XL-2007] Erreur 1004 lors de la création de TCD avec l'enregistreur de macro
    Par ryobanga dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 25/02/2010, 15h35
  3. [XL-2003] Problème avec l'enregistreur de macros
    Par steps5ive dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/10/2009, 17h44
  4. Problème avec VB.net et macro excel
    Par chebmo90 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 11/08/2009, 11h55
  5. Problème avec tagset.excelxp et macro
    Par jm2507 dans le forum Macro
    Réponses: 4
    Dernier message: 24/06/2009, 16h51

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