macro automatique Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
j
jad73
Membre fidèle
Membre fidèle
Messages : 329
Inscrit le : 18 mai 2011
Version d'Excel : 2010

Message par jad73 » 26 mai 2012, 15:09

bonjour le forum
j'ai fait une macro çi-dessous et j'aimerais quelle c'éxécute plusieurs fois de suite jusqu'a la fin de la base de données qui est en H34:L200,mais lorsqu'elle c'est éxécuter la premiere fois elle passe a la ligne suivante dans la bdd.La elle prend la ligne H34:L34,la copie,la range et puis efface cette ligne H34:L34,pour la fois suivante elle prendra la ligne H35:L35,la copie ,la range puis éfface la ligne H35:L35 et continue son éxécution et ainsi de suite H36:L36,s'éxécute puisH37:L37 etc...
Mais comment inscrire cela dans le code.
merci
 Range("H34:L34").Select
    Selection.Copy
    Range("C1").Select
    ActiveSheet.Paste
    Range("H34:L34").Select
    Application.CutCopyMode = False
    Selection.ClearContents
    Range("A6:B54").Select
    Selection.Copy
    ActiveWindow.SmallScroll Down:=-30
    Range("C6").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    ActiveWorkbook.Worksheets("40").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("40").Sort.SortFields.Add Key:=Range("D6:D54"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("40").Sort
        .SetRange Range("C6:D54")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Calculate
    Calculate
    Range("G5").Select
    vLigne = Range("AD65536").End(xlUp).Row
vLigne = vLigne + 1
    Range("C3:G3").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range("AD" & vLigne).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
Range("G5").Select
 Dim Cellule As Range
Dim Plage As Range

Dim i, l, c As Integer
i = 6
Set Plage = Range("C1:G1")

While IsEmpty(Range("A" & i)) = False
     For Each Cellule In Plage
      If Range(Cellule.Address).Value = Range("C" & i).Value Then
      l = Range("E" & i).Value + 8
      c = Range("F" & i).Value + 10
      Cells(c, l) = Cells(c, l) + 1
      End If
     Next Cellule
      i = i + 1
Wend
    Range("G5").Select
End Sub
Avatar du membre
Dan
Modérateur
Modérateur
Messages : 6'387
Appréciations reçues : 112
Inscrit le : 27 avril 2007
Version d'Excel : Office 365, Mac 2011

Message par Dan » 26 mai 2012, 15:20

Bonjour

Mets ton fichier en ligne. ce sera plus simple de corriger

A te relire
@+ Dan ;)
j
jad73
Membre fidèle
Membre fidèle
Messages : 329
Inscrit le : 18 mai 2011
Version d'Excel : 2010

Message par jad73 » 26 mai 2012, 17:11

bonjour dan,le forum

voici un fichier que j'ai fait avec les 2 feuilles correspondantes
merci
statsL.zip
(46.21 Kio) Téléchargé 18 fois
Avatar du membre
Dan
Modérateur
Modérateur
Messages : 6'387
Appréciations reçues : 112
Inscrit le : 27 avril 2007
Version d'Excel : Office 365, Mac 2011

Message par Dan » 26 mai 2012, 17:28

Re,

faudrait que tu expliques mieux ton souci car là je ne comprends pas le pourquoi des intructions lorsque tu copies H34:L34 vers C1 etc...
Est-ce que tout le code est concerné ?
exemple : est-ce que tu dois toujours copier le Range("A6:B54") à chaque passage de copie de H x : Lx vers C1 ??

A te relire
@+ Dan ;)
j
jad73
Membre fidèle
Membre fidèle
Messages : 329
Inscrit le : 18 mai 2011
Version d'Excel : 2010

Message par jad73 » 26 mai 2012, 18:05

re Dan,le forum

Quand je le fait manuellement
1)je prend H34:L34 je le copie en C1
2)j'éfface H34:L34,puis calcul
3)Je clique sur la macro 1
4)F9(calcul
5)F9
6)clique sur macro 2
7))clique sur macro 3
8)je prend une ligne plus bas H35:L35,je copie en C1
9)j'efface H35:L35
10)je change la valeur de la cellule B6.$B$2:$F$41 devient $B$3:$F$42.une ligne plus bas dans BdD
11)je recopie la cellule B6 jusqu'a B54
12)calcul
13)macro 1
calcul(pour la colonneE)
calcul(pour la colonneF)
puis macro 2,macro 3 et je recommence
Les seules valeurs qui change c'est en H:L et B:Fdes cellules B6 a B54

a+
Avatar du membre
Dan
Modérateur
Modérateur
Messages : 6'387
Appréciations reçues : 112
Inscrit le : 27 avril 2007
Version d'Excel : Office 365, Mac 2011

Message par Dan » 26 mai 2012, 18:50

Re,

Ok je vois que ta macro 4 reprend les macro 1 2 et 3

Essaie ta macro 4 comme ceci :
Sub Macro4()
' Macro4 - 40-Auto
Dim plg As Byte
Dim dlg As Integer, vligne As Integer
dlg = Range("L" & Rows.Count).End(xlUp).Row
Application.ScreenUpdating = True
For plg = 34 To dlg
    With Range("H" & plg & ":L" & plg)
        .Copy Range("C1")
        .ClearContents
    End With
    Range("A6:B54").Copy
    Range("C6").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    With ActiveWorkbook.Worksheets("40").Sort
        .SortFields.Clear
        .SortFields.Add Key:=Range("D6:D54"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .SetRange Range("C6:D54")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Calculate
    'Range("G5").Select
    vligne = Range("AD65536").End(xlUp).Row + 1
    Range("C3:G3").Copy
    Range("AD" & vligne).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

Dim Cellule As Range
Dim Plage As Range

Dim i, l, c As Integer
i = 6
Set Plage = Range("C1:G1")
While IsEmpty(Range("A" & i)) = False
     For Each Cellule In Plage
      If Range(Cellule.Address).Value = Range("C" & i).Value Then
      l = Range("E" & i).Value + 8
      c = Range("F" & i).Value + 10
      Cells(c, l) = Cells(c, l) + 1
      End If
     Next Cellule
      i = i + 1
Wend
Next
Application.ScreenUpdating = False
Range("G5").Select
End Sub
Pas eu le temps de vérifier mais pas sur que le "calculate" serve à quelque chose.
Si ok, merci de cloturer le fil en cliquant sur le V vert à coté du bouton EDITER

Amicalement
Amicalement
@+ Dan ;)
j
jad73
Membre fidèle
Membre fidèle
Messages : 329
Inscrit le : 18 mai 2011
Version d'Excel : 2010

Message par jad73 » 26 mai 2012, 23:07

rebj Dan

il manque une étape dans le processus celle du changement des valeurs des cellules B2:B54.En effet pour avoir les bons résultats en col E et F il faut avoir le nombre de sortie de chaque numeros des 40 tirages précedent classé par ordre de sortie en D du plus petit nombre au plus grand,ces valeurs change chaque fois d'une ligne plus bas.Au départ elles sont col B6 "NB.SI(BdD!$B2:$F41;A6)"
dés que la macro est fini elle change en "NB.SI(BdD!$B3:$F42;A6)" ,une ligne plus bas.

Dans le code elles peuvent etre ajoutées soit en fin de code ou avant le "Range("A6:B54"). Copy.
j'ai refait une feuille avec la BdD sur la meme feuille si ça peut-etre plus facile pour le code
merci
a+
statsL (2).zip
(56.99 Kio) Téléchargé 7 fois
Avatar du membre
Dan
Modérateur
Modérateur
Messages : 6'387
Appréciations reçues : 112
Inscrit le : 27 avril 2007
Version d'Excel : Office 365, Mac 2011

Message par Dan » 4 juin 2012, 13:36

re,
dés que la macro est fini elle change en "NB.SI(BdD!$B3:$F42;A6)" ,une ligne plus bas.
Dans le code elles peuvent etre ajoutées soit en fin de code ou avant le "Range("A6:B54"). Copy
Je ne comprends pas bien le pourquoi et cette demande ne faisait pas partie de ta demande sur ce fil

Veux-tu dire qu'à chaque changement de la variable plg, la formule doit évoluer d'une ligne ??
NB.SI(BdD!$B3:$F42;A6)" -> NB.SI(BdD!$B4:$F43;A6)"

A te relire
@+ Dan ;)
j
jad73
Membre fidèle
Membre fidèle
Messages : 329
Inscrit le : 18 mai 2011
Version d'Excel : 2010

Message par jad73 » 4 juin 2012, 15:36

bonjour Dan,le forum

effectivement, j'aurais du mieux le préciser dans le point 10, elle change chaque fois de une ligne plus bas.
NB.SI(BdD!$B3:$F42;A6) en NB.SI(BdD!$B4:$F43;A6)
mes excuses pour ces mauvaises explications
merci
a+
Avatar du membre
Dan
Modérateur
Modérateur
Messages : 6'387
Appréciations reçues : 112
Inscrit le : 27 avril 2007
Version d'Excel : Office 365, Mac 2011

Message par Dan » 4 juin 2012, 21:30

Re,

Juste avant
Range("A6:B54").Copy
Mets ce code
If plg > 34 Then
        Range("B6") = "=COUNTIF(BdD!$B$" & plg - 32 & ":$F$" & plg + 8 & ",$a6)"
        Range("B6").AutoFill Destination:=Range("B6:B54"), Type:=xlFillDefault
End If
Tu peux désactiver cette ligne ou mieux la mettre à la fin du code
Application.CutCopyMode = False
Si ok, merci de cloturer le fil en cliquant sur le V vert à coté du bouton EDITER

Amicalement
@+ Dan ;)
Répondre
  • Sujets similaires
    Réponses
    Vues
    Dernier message