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 :

Besoin d'aide pour mise en forme d'un fichier


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2019
    Messages : 5
    Par défaut Besoin d'aide pour mise en forme d'un fichier
    Bonjour à tous,

    J'ai un fichier a convertir. J'ai donc essayé de faire une macro.

    Ma difficulté est la suivante: dans ma macro, je crée une nouvelle feuille. Les instructions suivantes doivent donc être exécutées dans cette nouvelle feuille uniquement. Cependant, les instructions s'exécutent dans l'ancienne feuille. Et ce dysfonctionnement bloque le reste de ma macro.

    Pouvez vous m'aider svp ?

    Ci joint les fichiers:

    - fichier à convertir,
    - la macro que j'ai compilé grâce à vos apports sur ce site,
    - le résultat que j'escompte.

    Merci d'avance
    Fichiers attachés Fichiers attachés

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2019
    Messages : 5
    Par défaut Merci
    Citation Envoyé par Alqualonde Voir le message
    Voila un code "complet" avec les questions de tes deux sujets

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Public Sub essai()
    Dim maVariable As Long
    maVariable = Application.WorksheetFunction.Max(Range("d1:d" & Range("d65530").End(xlUp).Row))
    Columns("A:A").Select 'A modifier suivant l'endroit où tu veux rajouter tes colonones
        For i = 1 To maVariable
            Selection.Insert Shift:=xlToRight
        Next
    End Sub

    Ce code marche

  3. #3
    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
    Bonsoir,

    Pourquoi une sélection? Pourquoi une boucle?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public Sub essai_Marcel()
     
    Dim maVariable As Long
     
    With Worksheets(1)
            maVariable = Application.WorksheetFunction.Max(.Range("d1:d" & Range("d65530").End(xlUp).Row))
            .Range("A1").Resize(1, maVariable).EntireColumn.Insert Shift:=xlRight, CopyOrigin:=xlFormatFromRightOrBelow
    End With
     
    End Sub
    Quant aux End(xl??), mieux vaut travailler sur table de données (tableau structuré)
    Soit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public Sub essai_Marcel_V2()
     
    Dim maVariable As Long
     
    With Worksheets(1).ListObjects("Tableau1")
            maVariable = Application.WorksheetFunction.Max(.ListColumns("col4").Range)
            .ListColumns("col2").Range.Resize(1, maVariable).EntireColumn.Insert
    End With
     
    End Sub

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2019
    Messages : 5
    Par défaut Besoin d'aide pour mise en forme fichier
    Bonjour MarcelG,

    Pouvez vous donner plus de détail sur les codes publiés le 04/11/2020 svp ?

    Aussi, pouvez vous m'aider à finaliser ma macro svp ?

    J'ai fait un post le 04/11/2020.

    Cordialement

  5. #5
    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
    Salut,

    Quel point t'interroge particulièrement?

    Au demeurant, voici 2 tutoriels de base sur les tableaux structurés
    Présentation
    VBA

    Sur la méthode Resize de l'objet Range
    Cet espace

    Après consultation, tu peux, bien entendu, revenir afin de préciser le(s) point(s) d'achoppement éventuel(s).

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2019
    Messages : 5
    Par défaut
    Bonjour Marcel G,

    Merci pour les tutoriel ci dessus.

    Par ailleurs, pouvez vous m'aider sur les points ci dessous ?

    J'ai un fichier a convertir. J'ai donc essayé de faire une macro.

    Ma difficulté est la suivante: dans ma macro, je crée une nouvelle feuille. Les instructions suivantes doivent donc être exécutées dans cette nouvelle feuille uniquement. Cependant, les instructions s'exécutent dans l'ancienne feuille. Et ce dysfonctionnement bloque le reste de ma macro.

    Pouvez vous m'aider svp ?

    Ci joint les fichiers:

    - fichier à convertir,
    - la macro que j'ai compilé grâce à vos apports sur ce site,
    - le résultat que j'escompte.

    Merci d'avance
    Fichiers attachés Fichiers attachés

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    Il est préférable de donner le code que tu utilises. Devoir télécharger trois fichiers pour essayer de comprendre ton besoin ou problème est rédhibitoire et peu de contributeurs vont le faire.

    Cela étant dit, il est toujours efficace de travailler avec des variables. Dès lors, si tu créées un nouvelle feuille, attribue-là à une variable dès sa création de façon à pouvoir la manipuler facilement par code par la suite.

    Voici un exemple qui crée une nouvelle feuille de calcul et qui la manipule par la suite.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub AddWorksheet()
      Dim NewWorksheet As Worksheet
     
      Set NewWorksheet = Worksheets.Add(after:=Worksheets(Worksheets.Count))
      With NewWorksheet
        .Name = "Ma nouvelle feuille"
      End With
    End Sub
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2019
    Messages : 5
    Par défaut
    Bonjour Monsieur,

    Merci pour vos conseils. Ci dessous le code que j'utilise.

    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
    Sub principale() 'Programme principal
        Call Convert_creationfeuille
        Call Espacement
        Call Délimitation
        Call Espacement_2
        Call Insertion_colonne
        Call fractionnement_2
    End Sub
    Sub Convert_creationfeuille()
        Columns("A:A").EntireColumn.AutoFit
        Range("B1").Select
        ActiveCell.FormulaR1C1 = "=MID(RC[-1],1,4)"
        Range("B1").Select
        Selection.AutoFill Destination:=Range("B1:B355")
        Range("B1:B355").Select
        Selection.Copy
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Cells.Select
        Application.CutCopyMode = False
        Selection.AutoFilter
        ActiveSheet.Range("$A$1:$B$355").AutoFilter Field:=2, Criteria1:=":61:"
        Selection.Copy
        Sheets.Add After:=ActiveSheet
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
    Dim onglet As Worksheet
    Dim colonne_a_supprimer As Long
    Set onglet = Worksheets(2)
    colonne_a_supprimer = 2
    onglet.Cells(1, colonne_a_supprimer).EntireColumn.Delete
    End Sub
     
    ‘ toutes les instruction ci-dessous doivent etre exécuter dans le nouvel onglet crée ci-dessus. Mais ce n’est pas le cas dans ma macro. Pouvez-vous m’aider svp ?
     
    Sub Espacement()
    Dim plage As Range
    Set plage = Range("A1:A1000")
     For Each c In plage
         c.Value = Replace(c.Value, "S103", "                                                   S103")
         c.Value = Replace(c.Value, "S202", "                                                   S202")
         c.Value = Replace(c.Value, "//", "                                                      //")
         c.Value = Replace(c.Value, ":61:", ":61:                                                ")
         Next c
    End Sub
    Sub Délimitation()
        Range("A:A").TextToColumns Destination:=Range("A1")
    End Sub
     
    Sub Espacement_2 ()
    Dim plage As Range
    Set plage = Range("c1:C1000")
     For Each c In plage
         c.Value = Replace(c.Value, "C", "                                                   C                                         ")
         c.Value = Replace(c.Value, "D", "                                                   D                                        ")
    Next c
    End Sub
     
    Sub Insertion_colonne
    Dim maVariable As Long
    maVariable = 3 'Selectionner le nombre de colonne
    Columns("D:D").Select 'A modifier suivant l'endroit où tu veux rajouter tes colonones
        For i = 1 To maVariable
            Selection.Insert Shift:=xlToRight
        Next
    End Sub
    Sub fractionnement_2 ()
        Range("C:C").TextToColumns Destination:=Range("C1")
    End Sub

  9. #9
    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 à toi, Bonjour au Forum,

    Avant tout, s'il te plaît, afin de ne pas polluer les discussions, merci de ne pas utiliser de citation.

    Le plus direct serait d'utiliser la fonction Split décrite dans cet espace et celui-ci.

    La fonction Split retourne un tableau (Array) à 1 dimension, établi selon un délimiteur qui est aussi une chaîne de caractères.
    Chaque élément du tableau contient la chaîne de caractères issue de ce "découpage"

    La fonction Split peut très bien s'affecter à un résultat issu d'une 1ère fonction Split

    Exemple, pour la 1ère chaîne

    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
    Option Explicit
     
    Sub essai_split()
     
    Dim lachaine As String
    lachaine = ":61:201002C343241,S103K01STAR202680502//12686963"
     
    Dim s1 As Variant, car1 As String
    s1 = Split(lachaine, ",S103")
    car1 = s1(1)
    Debug.Print car1
     
    Dim s2 As Variant, car2 As String
    s2 = Split(car1, "TAR")
    car2 = s2(0)
    Debug.Print car2
     
    End Sub
    2 remarques:
    - le 1er indice du tableau retourné est 0
    - Pour activer, dans VBE, la fenêtre Exécution, CTRL + G (ou menu Affichage\Fenêtre Exécution)
    Tu verras ainsi les résultats des instructions Pourrais-tu consulter la procédure reportée dans le tutoriel de Silkyroad ci-dessus.
    puis adapter l'exemple que je t'ai proposé à un autre délimiteur (exemple "//"), puis à un autre (exemple ":")

    Reviens avec un code que tu auras testé.

    A bientôt

Discussions similaires

  1. Aide pour mise en forme conditionnelle
    Par djoenis dans le forum Excel
    Réponses: 12
    Dernier message: 31/03/2011, 10h21
  2. Besoin d'aide pour mise en page avec 2 images, dans un fichier xml
    Par guillaume7684 dans le forum XML/XSL et SOAP
    Réponses: 0
    Dernier message: 30/03/2011, 18h25
  3. [AC-2007] besoin d'aide pour mise en place gestion d'erreur
    Par tibofo dans le forum VBA Access
    Réponses: 3
    Dernier message: 10/03/2010, 23h08
  4. Réponses: 2
    Dernier message: 20/09/2005, 15h10
  5. [CSS] Besoin d'aide pour mise en forme !
    Par TorF dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 19/03/2005, 19h28

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