Vba 2pb

ptikiki -  
Bidouilleu_R Messages postés 1181 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
j ai 2 petit soucis avec ma macro vba excel.
je génère un nouveau fichier et sur ce nvo je veux creer trois nouvel colonne qui st simplement un left () d'une autre colonne.
j arrive a le faire sous excel en metant gaucha(a2,5) (c'est une chaine de6 caractères à l'origine) mais je n'arrive pas a la générer automatiquement.
le deuxieme point g trouvé la fonction subtotal() mais je sais pas comment elle fonctionne :
Selection.FormulaR1C1 = "=SUBTOTAL(9,R[-" & nb_lignes & "]C:R[-1]C)"
qu'est ce que le neuf
et RC?
nb_ligne est ma variable mais pk on met d moins?
merci d'avance

12 réponses

Bidouilleu_R Messages postés 1181 Date d'inscription   Statut Membre Dernière intervention   295
 
Bonjour,

pour la deuxième question c'est facile avec l'aide

ça donne ça!

1 101 MOYENNE
2 102 NB
3 103 NBVAL
4 104 MAX
5 105 MIN
6 106 PRODUIT
7 107 ECARTYPE
8 108 ECARTYPEP
9 109 SOMME 10 110 VAR
11 111 VAR.P

le sous-total contient une somme. Mais je crois que tu viens de découvrir quelquechose.


pour "je veux créer trois nouvelles colonnes qui sont simplement un left () d'une autre colonne. "
puisque la fonction left est nommée, il s'agit d'un code vba
pour mettre un titre dans une cellule: on écrit range("A1").value=left(range("B1",5))
la cellule A1 contiendra le 5 premiers caractères en partant de la gauche de la cellule B1.
0
ptikiki
 
merci bcp et pk met on rc?
0
ptikiki
 
Mon probleme n'est pas résolu
Range("AF").Value = Left(Range("a1"), 5)
Si j'ai bien compris en af je devrai avoir les 5 premier caractere de A
la methode ' range' de l'objet '_global' a echoue apparait
0
Bidouilleu_R Messages postés 1181 Date d'inscription   Statut Membre Dernière intervention   295
 
Mon probleme n'est pas résolu
Ecris comme cela c'est normal
Range("AF").Value = Left(Range("a1"), 5)
Si j'ai bien compris en af je devrai avoir les 5 premier caractere de A
la methode ' range' de l'objet '_global' a echoue car range n'était pas défini....

Range("AF1").Value = Left(Range("A1"), 5)

la méthode range(ligne,colonne) fait référence à une lettre et à un chiffre.
A moins que je n'ai pas compris ce que tu souhaites faire....
0
ptikiki
 
on y est presque sauf que je desire faire toute la colonne et pas seulement la premiere cellule
merci
0
ptikiki
 
j'ai quelque idée en fait
j'ai seletionner ma colonne deja pour le nb de ligne
donc si je fais
for each cell in selection
Range("AF1").Value = Left(Range("A1"), 5)

next
seulement que je vais faire seulement la cellule a1 donc je ne sais pas comment faire
et la seule chose que je trouve sur subtotal c'est que 9 = ecart type ce qui explique ma question
mas je trouve pas ce que signifie r -16400c:r-1c Vous savez?
mercccci caro
0
Bidouilleu_R Messages postés 1181 Date d'inscription   Statut Membre Dernière intervention   295
 
il vaudrait mieux préciser les dimension de ton tableau
et j'ajouterai que ta demande n'étais pas claire pour moi.

place ce code dans un module


Sub essai()


Dim nligne As Integer
Dim i As Integer
Dim C As Variant
i=0

nligne = Range("A1").CurrentRegion.Rows.Count ' le début de la base
For Each C In Range("f1:F" & nligne)
C.Value = Left(Range("A1").Offset(i, 0), 5) ' permet d'écrire sur la ligne suivante
' A1 represente la cellule que tu copies ( on extrait 5 caractères avec left
i = i + 1 ' ligne suivante
Next ' cellule suivante

End Sub

dis moi si ça marche.
0
ptikiki
 
j'essaye ton programme merci
0
ptikiki
 
ça marche je t ai mis les renseignements demandés sur un message pas adressé a toi mais sur la discussion en tout cas jte remerci et souhaite te dire que j ai pleins de soucis donc jte réembetterai souvent merci encore
bisous caro
0
ptikiki
 
bon ç marche pas partout :
Dim i, j, k, l As Integer
Dim C As Variant
i = 0
j = 0
k = 0
For Each C In Range("AF1:AF" & nb_lignes)
C.Value = Left(Range("A1").Offset(i, 0), 5) ' permet d'écrire sur la ligne suivante
' A1 represente la cellule que tu copies ( on extrait 5 caractères avec left
i = i + 1 ' ligne suivante
Next ' cellule suivante
For Each C In Range("AG1:AG" & nb_lignes)
C.Value = Left(Range("A1").Offset(j, 0), 4) ' permet d'écrire sur la ligne suivante
' A1 represente la cellule que tu copies ( on extrait 4 caractères avec left
j = i + 1 ' ligne suivante
Next ' cellule suivante
For Each C In Range("AH1:AH" & nb_lignes)
C.Value = Left(Range("A1").Offset(k, 0), 3) ' permet d'écrire sur la ligne suivante
' A1 represente la cellule que tu copies ( on extrait 3 caractères avec left
k = i + 1 ' ligne suivante
Next ' cellule suivante

voila mon bout de code
af ag ah
CCPTA CCPT CCP
10110
11100
12151
12151
12160
12710
13226

voila un bout de résultat
je veux prendre les 5 4 puis 3 caractère de le colonne a mais je sais pas si il y a tjs une selection
0
ptikiki
 
J ai trouvé j'incrémenté pas la bonne variable
oops desolee de t avoir embetté mais si tu t y connais en autofilter jsui preneuse
merci bisous
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ptikiki
 
Sub Macro2()

Application.ScreenUpdating = False

date_arrete = InputBox("Quelle est le PLCR utilisé? (format JJ-MM-AAAA)")

Sheets("tout").Select
Range(("A1"), Range("A1").End(xlDown)).Select
nb_lignes = Selection.Count
Range("AF1").Value = Left(Range("A1"), 5)

Sheets("Détail").Select
Range("C11", Range("C11").End(xlDown)).Select

For Each cell In Selection

Sheets("Détail").Select
num_compte = ActiveCell
sens = ActiveCell.Offset(0, 5)
solde = ActiveCell.Offset(0, 15)


Sheets("tout").Select


'sélection du numéro de compte
If Len(num_compte) = 2 Then
Selection.AutoFilter Field:=1, Criteria1:=num_compte
ElseIf Len(num_compte) = 3 Then
Selection.AutoFilter Field:=1, Criteria1:=num_compte
ElseIf Len(num_compte) = 4 Then
Selection.AutoFilter Field:=1, Criteria1:=num_compte
ElseIf Len(num_compte) = 5 Then
Selection.AutoFilter Field:=1, Criteria1:=num_compte
ElseIf Len(num_compte) = 6 Then
Selection.AutoFilter Field:=1, Criteria1:=num_compte
End If


Range("AD" & nb_lignes + 1).Select
Selection.FormulaR1C1 = "=SUBTOTAL(9,R[-" & nb_lignes & "]C:R[-1]C)"
solde_debit = Selection.Value

Range("AE" & nb_lignes + 1).Select
Selection.FormulaR1C1 = "=SUBTOTAL(9,R[-" & nb_lignes & "]C:R[-1]C)"
solde_credit = Selection.Value


ActiveSheet.ShowAllData


Sheets("Détail").Select

If sens = "D+" Or sens = "D-" Then
ActiveCell.Offset(0, 11) = solde_debit
ElseIf sens = "+C" Or sens = "-C" Then
ActiveCell.Offset(0, 11) = solde_credit
End If
ActiveCell.Offset(0, 14) = Len(num_compte)
ActiveCell.Offset(1, 0).Select
Next

ActiveWorkbook.SaveAs Filename:= _
"L:\RL " & date_arrete & " .xls", FileFormat:= _
xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
, CreateBackup:=False



MsgBox ("Le calcul est terminé!")


End Sub

je t ai mis tout monn code
mon tableau de la feuille "tout fais 16400lignes et va jusqua la colonne AD
j ai mis un autre post car j ai d soucis avec autofilter si tu veux
merci
caro
0
Bidouilleu_R Messages postés 1181 Date d'inscription   Statut Membre Dernière intervention   295
 
je n'ai plus le temps je regarde demain ou je laisse un autre te conseiller
0
ptikiki
 
ok en meme tu as résolu mes problème j ai plus qu un soucis d autofilter et c sur un autre poste et puid pr le rc mais je pense que tu sais pas un grand merci
0
Bidouilleu_R Messages postés 1181 Date d'inscription   Statut Membre Dernière intervention   295
 
Bonjour,

je te suggère de modifier ton code pour éviter un risque d'erreur Important
tu fais référence à une zone sélectionnée puis plus loin tu en sélectionnes une autre.
du fait qu'il s'agit d'une collection (for each tu pourrais avoir une erreur ou des lignes non traitées)
je te propose ceci.
Explique ton deuxième problème.


Sheets("Détail").Select
'Range("C11", Range("C11").End(xlDown)).Select ' ici nomme la zone
Range("C11", Range("C11").End(xlDown)).name="MaZone"


'For Each cell In Selection ' remplacé par
For Each cell In range("MaZone") ' comme cela tu feras toujours référence à la même Zone

Sheets("Détail").Select
num_compte = ActiveCell
sens = ActiveCell.Offset(0, 5)
solde = ActiveCell.Offset(0, 15)


Sheets("tout").Select


'sélection du numéro de compte
If Len(num_compte) = 2 Then
Selection.AutoFilter Field:=1, Criteria1:=num_compte
ElseIf Len(num_compte) = 3 Then
Selection.AutoFilter Field:=1, Criteria1:=num_compte
ElseIf Len(num_compte) = 4 Then
Selection.AutoFilter Field:=1, Criteria1:=num_compte
ElseIf Len(num_compte) = 5 Then
Selection.AutoFilter Field:=1, Criteria1:=num_compte
ElseIf Len(num_compte) = 6 Then
Selection.AutoFilter Field:=1, Criteria1:=num_compte
End If


Range("AD" & nb_lignes + 1).Select
Selection.FormulaR1C1 = "=SUBTOTAL(9,R[-" & nb_lignes & "]C:R[-1]C)"
solde_debit = Selection.Value

Range("AE" & nb_lignes + 1).Select
Selection.FormulaR1C1 = "=SUBTOTAL(9,R[-" & nb_lignes & "]C:R[-1]C)"
solde_credit = Selection.Value


ActiveSheet.ShowAllData


Sheets("Détail").Select

If sens = "D+" Or sens = "D-" Then
ActiveCell.Offset(0, 11) = solde_debit
ElseIf sens = "+C" Or sens = "-C" Then
ActiveCell.Offset(0, 11) = solde_credit
End If
ActiveCell.Offset(0, 14) = Len(num_compte)
ActiveCell.Offset(1, 0).Select

Next
0
ptikiki
 
Bonjour,
bonjour je vous explique g deux feuilles la premier est un num compte au format texte comme dessous
2011
2021
2031
2031
2041
2061
2051
205200

g une 2eme feuille
201119 201 2011 20111
201119 201 2011 20111
201119 201 2011 20111
201119 201 2011 20111
201119 201 2011 20111
201119 201 2011 20111
201119 201 2011 20111
201119 201 2011 20111
201119 201 2011 20111
201119 201 2011 20111
201119 201 2011 20111
201119 201 2011 20111
201119 201 2011 20111
201119 201 2011 20111
les 3 derniere colonne sont des gauche de la premiere colonne
je veux filtrer la feuille grace au num de la premiere donc g codé ainsi :
'sélection du numéro de compte
If Len(num_compte) = 2 Then
Selection.AutoFilter Field:=1, Criteria1:=num_compte
ElseIf Len(num_compte) = 3 Then
Selection.AutoFilter Field:=2, Criteria1:=num_compte
ElseIf Len(num_compte) = 4 Then
Selection.AutoFilter Field:=3, Criteria1:=num_compte
ElseIf Len(num_compte) = 5 Then
Selection.AutoFilter Field:=4, Criteria1:=num_compte
ElseIf Len(num_compte) = 6 Then
Selection.AutoFilter Field:=1, Criteria1:=num_compte
End If
la longueur des numéro de compte est bonne
mais lorsque j'ai un champ différent du champ 1ça ne marche plus peut il y avoir un probleme de format?
merci
voilaz mon soucis
mais maintenant tout est soucis je vais recommencé au début
0
ptikiki
 
voila g refait mais g tjs mon pb de filtre mais pour tout le reste ça fonctionne donc je te remecie bcp et si tu as un idéee du pk ça plante ça m'interesse si je met un champs different de 1 le message d erreur suivant apparait : erreur 1004 la methode autofilter de la classe range a échoué
0
ptikiki
 
j'arrive pas a mettre résolu!!!
0
ptikiki
 
je crois que tu as raison ma selection pour l'autofilter je crois que ça prend pas la bonne page mais je c pas comment faire
0
ptikiki
 
ça y'est g trouver en faite toute la feuille en filtrer automatique
merci bcp
caro
0
Bidouilleu_R Messages postés 1181 Date d'inscription   Statut Membre Dernière intervention   295
 
je suis content car de mon côté
je testé une structure avec un filtre comme le tiens
et ça marché!

un conseil, quand tu fais des filtres successifs il est souvent utile d'enlever le filtre puis
de le remettre.

A+
0
ptikiki
 
MERCI BCP EN TOUT CAS
0
ptikiki
 
j ai deux dernierequestion
1. Peut on mettre une feuille entiere en filtre automatique car ma feuille est un copier coller donc faut que j aille dans donnees filtrer pour la mettre hors j aimerais qu elle s'y mette toute seule dans ma macro

2.peut on faire un filtre d'un filtre?
merci
0
Bidouilleu_R Messages postés 1181 Date d'inscription   Statut Membre Dernière intervention   295
 
1) oui il est possible de faire un filtre sur une feuille entière.

Fais attention à la quantité de donnée.

2) faire un filtre d'un filtre cela s'appelle un deuxième critère n'est-ce pas.

ex:
fruit qte region
poire 12 est
pomme 100 ouest
raisin 50 sud
raisin 120 sud

un filtre sur Qte (field2) avec un critère >51 extrait la ligne 2 et 4 (ouest et sud)
si tu rajoute field 3 avec comme critère sud seule la ligne 4 sera extraite.

lorsque tu as beaucoup de données à extraire en cascade il est interessant de voir les
tableaux croisés dynamiques.

Roger
0
ptikiki
 
je sais pas mes servir des tcd lol mais bon
a oui tu m 'a conseillé d enlever les filtres mais je ne sais pas faire.
bisous caro
0
Bidouilleu_R Messages postés 1181 Date d'inscription   Statut Membre Dernière intervention   295
 
salut,
il suffit d'écrire

Selection.AutoFilter

en c'est une bascule avec ou sans
Donc quand tu as plus besoin du filtre tu l'enlèves

pour le tableau croisé dynamique je te conseillerai d'y jeter un oeil
un site qui explique bien ( mon point de vue personnel ) www.excelabo.net

bon courage
A+
R
0