Automatise tâches dans Excel 2007

mikael2235

XLDnaute Occasionnel
Bonjour à tous,

Je souhaite automatiser une tache dans un tableur Excel. Et autant dire qu'il va falloir passer par du V.B.A. et c'est maintenant que j'ai besoin de votre aide.

Je vous explique mon cas :

- Le tableau est organisé en groupes, je souhaite tout d'abord que la macro supprime tous les sous-groupes (niveau 2). C'est à dire, dans mon exemple les lignes 7,9,11,12 & 17,19,20,21,23,24).

On pourrait le traduire par, supprimer la ligne entière lorsque la cellule A est vide, et quand B est non vide.

Maintenant, j'ai beaucoup de mal a le traduire en VBA.

Merci pour votre aide.

Mikael
 

Pièces jointes

  • Classeur1.xls
    29.5 KB · Affichages: 111
  • Classeur1.xls
    29.5 KB · Affichages: 110
  • Classeur1.xls
    29.5 KB · Affichages: 120

youky(BJ)

XLDnaute Barbatruc
Re : Automatise tâches dans Excel 2007

Re suite,
A tester aussi pour connaitre la derligne sur les col de A à H
Donc à essayer


Code:
With Sheets("TransfertInterMagasins")
For k = .[A:H].Find("*", , , , 1, 2).Row To 6 Step -1
If .Cells(k, 1) = "" And .Cells(k, 2) <> "" Then .Rows(k).Delete
Next
End With
 

mikael2235

XLDnaute Occasionnel
Re : Automatise tâches dans Excel 2007

Re suite,
A tester aussi pour connaitre la derligne sur les col de A à H
Donc à essayer


Code:
With Sheets("TransfertInterMagasins")
For k = .[A:H].Find("*", , , , 1, 2).Row To 6 Step -1
If .Cells(k, 1) = "" And .Cells(k, 2) <> "" Then .Rows(k).Delete
Next
End With

Apparemment au premier test, ça fonctionne !!! J'en fait d'autres et te tiens au courant...

Après j'ai encore un soucis, sur certain fichier, il peut m'arriver de ne pas avoir de tableau Sorties et donc la macro plante, normal !
il faudrait une condition qui vérifie la présence du tableau et si il n'y a pas le premier mot "Entrée" ou "Sortie", une partie du code est chunté...

Code:
Sheets.Add.Move After:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = "ENTREES"                                                                      Sheets.Add.Move After:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = "SORTIES"                                                                      
With Sheets("TransfertInterMagasins")
haut = .[A:A].Find("[B]Entrées[/B]", , , , 1, 2).Row                                                               
bas = .Range("B" & haut).End(xlDown).Row                                                                     
.Range("A" & haut & ":J" & bas).Copy _
Sheets("ENTREES").[A1]                                                                                      
haut = .[A:A].Find("[B]Sorties[/B]", , , , 1, 2).Row                                                               
bas = .[A:J].Find("*", , , , 1, 2).Row                                                                      
.Range("A" & haut & ":J" & bas).Copy _
Sheets("SORTIES").[A1]                                                                                      
End With
 

youky(BJ)

XLDnaute Barbatruc
Re : Automatise tâches dans Excel 2007

Re,re
Tu ne controle pas si les feuilles crées existe déja
donc la macro dois être exécutée qu'une seule fois
pour le reste c'est bon.

Code:
Sheets.Add.Move After:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = "ENTREES"
Sheets.Add.Move After:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = "SORTIES"
With Sheets("TransfertInterMagasins")
On Error Resume Next
haut = .[A:A].Find("Entrées", , , , 1, 2).Row
bas = .Range("B" & haut).End(xlDown).Row
If haut <> "" Then
.Range("A" & haut & ":J" & bas).Copy _
Sheets("ENTREES").[A1]
End If
Err.Clear
On Error Resume Next
haut = .[A:A].Find("Sorties", , , , 1, 2).Row
bas = .[A:J].Find("*", , , , 1, 2).Row
If haut <> "" Then
.Range("A" & haut & ":J" & bas).Copy _
Sheets("SORTIES").[A1]
End If
End With
 

mikael2235

XLDnaute Occasionnel
Re : Automatise tâches dans Excel 2007

Code:
Sheets.Add.Move After:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = "ENTREES"
Sheets.Add.Move After:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = "SORTIES"

With Sheets("TransfertInterMagasins")


haut = .[A:A].Find("Entrées", , , , 1, 2).Row
bas = .Range("B" & haut).End(xlDown).Row
.Range("A" & haut & ":J" & bas).Copy _
Sheets("ENTREES").[A1]


haut = .[A:A].Find("Sorties", , , , 1, 2).Row
bas = .[A:J].Find("*", , , , 1, 2).Row
.Range("A" & haut & ":J" & bas).Copy _
Sheets("SORTIES").[A1]

End With

Alors en fait, il faudrait que, lorsque qu'il cherche respectivement les mots "entrée" et "sortie", s'il ne les trouve pas, il aille directement à la fin du code.


Je ne sais pas comment l'écrire, mais c'est en gros ceci :
IF
condition si vrai -> on continue
condition si faux -> on va a la fin du code.

J'ai trouvé quelques conseils ici, je vais essayé de le faire.
 
Dernière édition:

youky(BJ)

XLDnaute Barbatruc
Re : Automatise tâches dans Excel 2007

Bon voila qui doit faire...
de plus les nouveaux onglets sont fait si pas d'erreurs
Code:
With Sheets("TransfertInterMagasins")
On Error GoTo fin
haut = .[A:A].Find("Entrées", , , , 1, 2).Row
haut2 = .[A:A].Find("Sorties", , , , 1, 2).Row
Sheets.Add.Move After:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = "ENTREES"
Sheets.Add.Move After:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = "SORTIES"
bas = .Range("B" & haut).End(xlDown).Row
.Range("A" & haut & ":J" & bas).Copy _
Sheets("ENTREES").[A1]
bas = .[A:J].Find("*", , , , 1, 2).Row
.Range("A" & haut2 & ":J" & bas).Copy _
Sheets("SORTIES").[A1]
End With
fin:
 

mikael2235

XLDnaute Occasionnel
Re : Automatise tâches dans Excel 2007

Alors le problème ici, c'est que sur une de mes feuilles "TransfertInterMagasins" je n'ai pas de tableau 'Sorties' donc il trouve une erreur et passe directement à la suite sans créer mes 2 onglets et sans traiter le tableau des Entrées.

Et donc je retrouve l'erreur juste aprés dans le code.
 

mikael2235

XLDnaute Occasionnel
Re : Automatise tâches dans Excel 2007

En fait, a ce stade, j'ai fait une seule macro pour l'ensemble, je la décris.

-Supprime les lignes blanches sur feuille 'TransfertInterMagasins'
-Copie le tableau Entrée sur nouvelle feuille ENTREES
-Copie le tableau Sortie sur nouvelle feuille SORTIES
-Crée un TCD des Entrées sur nouvelle feuille TCD_ENTREES
-Crée un TCD des Sorties sur nouvelle feuille TCD_SORTIES
-Crée un TCD de synthèse des Entrées sur nouvelle feuille E2
-Crée un TCD de synthèse des Sorties sur nouvelle feuille S2

Tout ça en une seule Macro. Penses-tu que je devrais dissocier en 2 macros differentes (1 pour les entrées, et 1 pour les sorties) ?

Et mon problème serait plus facile à gérer, c a d si pas de tableau E ou S, fin de la macro puisque pas besoin de creer les TCD.
Et je pourrais executer mon autre macro sans problème

Merci pour tes conseils.
 

youky(BJ)

XLDnaute Barbatruc
Re : Automatise tâches dans Excel 2007

Voici une autre solution.
Si trouve Entrées crée la feuille et copie sinon "suite" et trouve Sorties
crée la feuille et copie sinon "fin"
Code:
With Sheets("TransfertInterMagasins")
On Error GoTo suite
haut = .[A:A].Find("Entrées", , , , 1, 2).Row
Sheets.Add.Move After:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = "ENTREES"
bas = .Range("B" & haut).End(xlDown).Row
.Range("A" & haut & ":J" & bas).Copy _
Sheets("ENTREES").[A1]
suite:
Err.Clear 'effacement error s'il y a
On Error GoTo fin
haut = .[A:A].Find("Sorties", , , , 1, 2).Row
Sheets.Add.Move After:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = "SORTIES"
bas = .[A:J].Find("*", , , , 1, 2).Row
.Range("A" & haut2 & ":J" & bas).Copy _
Sheets("SORTIES").[A1]
fin:
End With
 

mikael2235

XLDnaute Occasionnel
Re : Automatise tâches dans Excel 2007

J'ai voulu faire de même pour la suite de mon code, j'ai mis ceci et il me met l'indice n'appartient pas à la selection pour la ligne en rouge

Normal puisqu'il n'y a pas de feuilles SORTIES, mais il aurait du passer à fin2 ???

Code:
[B]On Error GoTo suite2[/B] 
Sheets"ENTREES").Select                                                                         
    Dim c
    For c = 20 To 1 Step -1
    If Cells(65536, c).End(xlUp).Row = 1 Then Cells(1, c).EntireColumn.Delete
    Next c
    
[B]suite2:
Err.Clear
On Error GoTo fin2[/B]    [COLOR="Red"]Sheets"SORTIES").Select    [/COLOR]                                                                       
   Dim s
    For s = 20 To 1 Step -1
    If Cells(65536, s).End(xlUp).Row = 1 Then Cells(1, s).EntireColumn.Delete
    Next s
[B]fin2:
Err.Clear[/B]
 
Dernière édition:

mikael2235

XLDnaute Occasionnel
Re : Automatise tâches dans Excel 2007

En fait, a ce stade, j'ai fait une seule macro pour l'ensemble, je la décris.

-Supprime les lignes blanches sur feuille 'TransfertInterMagasins'
-Copie le tableau Entrée sur nouvelle feuille ENTREES
-Copie le tableau Sortie sur nouvelle feuille SORTIES
-Crée un TCD des Entrées sur nouvelle feuille TCD_ENTREES
-Crée un TCD des Sorties sur nouvelle feuille TCD_SORTIES
-Crée un TCD de synthèse des Entrées sur nouvelle feuille E2
-Crée un TCD de synthèse des Sorties sur nouvelle feuille S2

Peut-être devrais-je organiser ma macro comme ceci, au lieu de précedemment, plutôt que de grouper par taches, grouper par Entrée ou Sortie :

-Supprime les lignes blanches sur feuille 'TransfertInterMagasins'
-Copie le tableau Entrée sur nouvelle feuille ENTREES
-Crée un TCD des Entrées sur nouvelle feuille TCD_ENTREES
-Crée un TCD de synthèse des Entrées sur nouvelle feuille E2


-Copie le tableau Sortie sur nouvelle feuille SORTIES
-Crée un TCD des Sorties sur nouvelle feuille TCD_SORTIES
-Crée un TCD de synthèse des Sorties sur nouvelle feuille S2


Qu'en pensez vous ? comme ça je peux mettre mon 'On error Goto...' à aller directement à End Sub si pas de tableau Sorties sur la 1ere feuille.
 

youky(BJ)

XLDnaute Barbatruc
Re : Automatise tâches dans Excel 2007

Oui ta suite logique dans ton message #42 est parfaite
Le tout est de bien gérer "error" ;tu as eu plusieurs solutions . . .
Je pense avec quelques essais tu dois t'en sortir.
Sur aussi que...
On Error GoTo fin2 Sheets"SORTIES").Select
'manque qlq chose "(" . . et a mettre sur 2 lignes
 

mikael2235

XLDnaute Occasionnel
Re : Automatise tâches dans Excel 2007

Donc j'ai divisé ma macro en 2 parties (E & S).

Et j'ai mis le 'On error Goto' pour chacune des parties.

C a d, que si il n'y a pas de tableaux de Sorties sur la 1ere feuille, il va directement à la fin de la macro.

Je pense que c'est mieux comme cela, plutôt que de le mettre à chaque étape...

Merci encore.

Je vais voir à l'utilisation si je trouve d'autres bugs.
 

mikael2235

XLDnaute Occasionnel
Re : Automatise tâches dans Excel 2007

C'est bon tout marche, sauf ma fonction pour le nom des villes.

J'ai mis ceci
Code:
Function VILLE(Target As Range) As String
If [Target] Like "*140*" Then VILLE = "ANGERS I"
If [Target] Like "*141*" Then VILLE = "ANGERS II"
If [Target] Like "*306*" Then VILLE = "ANGERS III"
If [Target] Like "*104*" Then VILLE = "CAEN I"
If [Target] Like "*106*" Then VILLE = "CAEN II"
If [Target] Like "*327*" Then VILLE = "CAEN III"
If [Target] Like "*142*" Then VILLE = "CHERBOURG"
If [Target] Like "*68*" Then VILLE = "FOUGERES"
If [Target] Like "*148*" Then VILLE = "VANNES"
End Function

Mais ça ne marche pas, il me met : #NOM?
 

Discussions similaires

Statistiques des forums

Discussions
312 737
Messages
2 091 500
Membres
104 961
dernier inscrit
LE GÉNIE ABDOU MAIGA