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

VBA Discussion :

Modification code VB excel et création nouveau classeur


Sujet :

VBA

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 8
    Points : 0
    Points
    0
    Par défaut Modification code VB excel et création nouveau classeur
    Bonjour,

    De nouveau de demande d'aides pour :


    1- Léger modification code, c'est-à-dire à la place de :

    "For i = 1 To 718" et "For compteur = 1 To 718", je voudrais pouvoir ne pas définir les lignes à l'avance mais mettre un code générique qui dit que lorsqu'il y à quelque chose sur la ligne, le traitement doit être fait.

    ci-après les 2 macros imbriquées concernées.

    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
    Sub Main()
     
    'Sub Transposition_text()
    '-----------------------------------
    ' recup texte (date) et coller dans autre Col
    '-----------------------------------
    Dim MesText, i
    For i = 1 To 718 'de la ligne 1 à 718 concernée.
    Range("A" & i).Select 'à partir des valeurs textes initiales de la ColA.
    MesText = ActiveCell.Value
    Range("E" & i).Select    'copier coller dans ColE.
    ActiveCell.Value = MesText
     
    '-----------------------------------
    ' recup texte (libellé) et coller dans autre Col
    '-----------------------------------
    Range("B" & i).Select    'à partir des valeurs textes initiales de la ColB.
    MesText = ActiveCell.Value
    Range("F" & i).Select    'copier coller dans ColF.
    ActiveCell.Value = MesText
     
    Next
     
    'Sub Conver_text_nb()
    '-----------------------------------
    ' recup texte (debit) et transforme en nombre
    '-----------------------------------
    Dim MaValeur, compteur
    For compteur = 1 To 718 'de la ligne 1 à 718 concernée.
    Range("C" & compteur).Select 'à partir des valeurs textes initiales de la ColC.
    MaValeur = ActiveCell.Value
    Range("G" & compteur).Select    'transformer en chiffre et copier coller dans ColG.
    ActiveCell.Value = MaValeur * -1
     
    '-----------------------------------
    ' recup texte (credit) et transforme en nombre
    '-----------------------------------
    Range("D" & compteur).Select    'à partir des valeurs textes initiales de la ColD.
    MaValeur = ActiveCell.Value
    Range("H" & compteur).Select    'transformer en chiffre et copier coller dans ColH.
    ActiveCell.Value = MaValeur * 1
     
    Next
     
    End Sub
    2- Générer un nouveau classeur excel automatiquement et y injecter les résultats suivant Colonnes désignées.

    3- Et si possible générer en fichier ".csv", ce dernière demande n'est pas une obligation.

    Merci d'avance pour tout.

  2. #2
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 8
    Points : 0
    Points
    0
    Par défaut Suite....
    J'éssaie également d'y intégrer un code qui devrait permettre de supprimer les espace vide avant et après la copie coller de caractères textes:

    avec tel que (trouver sur le forum..) :
    MesText = Trim(MesText) '- supression des espaces à gauche et à droite

    mais ça ne marche pas dans :


    'Sub Transposition_text()
    '-----------------------------------
    ' recup texte (date) et coller dans autre Col
    '-----------------------------------

    .........et ....................


    '-----------------------------------
    ' recup texte (libellé) et coller dans autre Col
    '-----------------------------------

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 8
    Points : 0
    Points
    0
    Par défaut Réponse trouvée
    En fait, ce n'est pas un espace mais un caractère spécial.
    Celui-ci apparaissant comme un espace dans un classeur excel, une fois transformé en fichier "csv", apparait en caractère spécial.

    Donc solution OK en intégrant le code suivant :

    --------------------
    MesText = Right(ActiveCell.Value, Len(ActiveCell.Value) - 1) 'suppr premier caractere de gauche
    --------------------

    et bien sur pour effacer un vrai espace c'est bien :

    --------------------
    'MesText = LTrim(ActiveCell.Value) 'suppr espace gauche
    --------------------

    Une solution trouvée reste pour les suivants.

  4. #4
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Bonjour,

    Si 718 correspond au nombre de lignes, tu peux l'obtenir avec ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DerniereLigne = wbk.Sheets("Feuil1").Range("A1").End(xlDown).Row

  5. #5
    Membre habitué
    Homme Profil pro
    Back Office Marchés
    Inscrit en
    Mars 2011
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Back Office Marchés
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2011
    Messages : 65
    Points : 139
    Points
    139
    Par défaut
    Bonjour Domes85,

    Si je comprends bien ton code, tu as un tableau de 4 colonnes (A à D) que tu copies/colles sur les colonnes (E à H) avec un nombre de lignes variables ?

    Comme certaines données sont au format texte tu les convertis en nombres - colonnes C-D => G-H en inversant le signe pour la colonne débit.

    Tu veux inclure les données transformées dans un nouveau classeur. Est ce qu'il s'agit des 8 colonnes ou bien uniquement les 4 transformées ?

    Quelques remarques : ton code doit être affreusement lent car il utilise .Select ce qui est MAL Cependant si tu veux l'accélérer utilises le code suivant au début de la procédure

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Application.Screenupdating =false
    et termine par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Application.Screenupdating=true
    End Sub
    ça devrait aller plus vite.

    Cordialement,

    Guillaume

    Rebonjour,

    Je reviens sur ton code. Le mieux est de passer par une variable tableau pour éviter les Select en boucle.

    Essaie avec le code suivant :

    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
    Option Explicit
     
    Sub Domes85()
     
    Dim DerLigne As Integer, i As Integer
    Dim Plage As Range
    Dim Tableau() As Variant
     
    Set Plage = ActiveWorkbook.ActiveSheet.UsedRange
    Tableau = Plage.Value
    DerLigne = Plage.Rows.Count
     
        For i = 1 To DerLigne
            If Tableau(i, 3) > 0 Then
                Tableau(i, 3) = Tableau(i, 3) * -1
            End If
        Next i
     
    Range(Cells(1, 5), Cells(DerLigne, 8)) = Tableau
     
    Set Plage = Nothing
     
    End Sub
    Je n'ai pas traité ta problématique de caractère spéciaux ni l'ajout à un classeur mais cela devrait être plus rapide.

    EDIT : je n'ai pas commenté le code mais reviens moi si tu veux des explications.

    Cordialement,

    Guillaume

Discussions similaires

  1. [VBA][Excel]Copier une feuille dans un nouveau classeur
    Par illight dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 02/10/2020, 13h51
  2. [XL-2007] Modification code pour Excel en Plein Ecran
    Par cathodique dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 30/12/2013, 11h39
  3. [XL-2010] Création auto d'un nouveau classeur pour chaque modification de celui ci
    Par lilou.gl dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 18/01/2013, 12h55
  4. Création nouveau Excel + Classeur via un Bouton
    Par jackborogar dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 15/05/2012, 13h21
  5. [C#][Excel]Création d'un nouveau classeur?
    Par bakonu dans le forum C#
    Réponses: 8
    Dernier message: 09/06/2008, 16h33

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