Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Général VBA
Général VBA Forum général VBA . Pour les logiciels spécifiques (Access, Excel, Word, ...), postez dans les bons sous forums.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/12/2011, 11h16   #1
 
Homme
Inscription : 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 : -3
Points : -3
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 :
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.
domes85 est déconnecté   Envoyer un message privé Réponse avec citation 02
Vieux 27/12/2011, 12h33   #2
 
Homme
Inscription : 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 : -3
Points : -3
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
'-----------------------------------
domes85 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 27/12/2011, 16h00   #3
 
Homme
Inscription : 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 : -3
Points : -3
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.
domes85 est déconnecté   Envoyer un message privé Réponse avec citation 02
Vieux 27/12/2011, 16h05   #4
Expert Confirmé
 
Avatar de pc75
 
Inscription : septembre 2004
Messages : 2 805
Détails du profil
Informations personnelles :
Âge : 56
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : septembre 2004
Messages : 2 805
Points : 3 003
Points : 3 003
Bonjour,

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

Code :
1
2
 
DerniereLigne = wbk.Sheets("Feuil1").Range("A1").End(xlDown).Row
__________________
Par principe, je ne réponds pas aux messages URGENT.
Il n'y a pas de choses urgentes, il n'y a que des choses en retard. (un inconnu)
pc75 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 13/01/2012, 11h41   #5
Membre régulier
 
Homme Guillaume Chaudemanche
Back Office Marchés
Inscription : mars 2011
Messages : 39
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Chaudemanche
Localisation : France, Hauts de Seine (Île de France)

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

Informations forums :
Inscription : mars 2011
Messages : 39
Points : 92
Points : 92
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 :
 Application.Screenupdating =false
et termine par

Code :
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 :
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
Golonne est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h56.


 
 
 
 
Partenaires

Hébergement Web