Vba 2pb
ptikiki
-
Bidouilleu_R Messages postés 1181 Date d'inscription Statut Membre Dernière intervention -
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
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
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.
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.
ptikiki
merci bcp et pk met on rc?
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
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
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....
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....
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
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
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.
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.
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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
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
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
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
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
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
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+
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+
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
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
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
a oui tu m 'a conseillé d enlever les filtres mais je ne sais pas faire.
bisous caro