Automatise tâches dans Excel 2007

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

Re : Automatise tâches dans Excel 2007

bonsoir Mikael,
cette macro fait l'affaire.
A+
Code:
Sub supprime()
With Sheets("Transfert")
For k = .[B65000].End(xlUp).Row To 6 Step -1
If .Cells(k, 1) = "" And .Cells(k, 2) <> "" Then .Rows(k).Delete
Next
End With
End Sub
 
Re : Automatise tâches dans Excel 2007

Bonjour le fil 🙂,
Si tu as du A non vide en fin de fichier alors que B est vide, .[B65000].End(xlUp).Row cherche la dernière cellule non vide de B, et les dernières lignes ne sont pas traitées...
Si c'est le cas,
Code:
For k = Application.WorksheetFunction.Max(.[A65000].End(xlUp).Row, .[B65000].End(xlUp).Row) To 6 Step -1
devrait faire l'affaire.
Bonne journée 😎
 
Re : Automatise tâches dans Excel 2007

Code:
For k = Application.WorksheetFunction.Max(.[A65000].End(xlUp).Row, .[B65000].End(xlUp).Row) To 6 Step -1

Merci JNP, je n'en ai pas eu besoin. L'erreur venait de moi, en recopiant dans mon fichier original, la ligne suivante n'était pas bonne parce que le nom de ma feuille n'était pas la même.
Code:
With Sheets("Transfert")

Merci. Je vous tiens au courant.
 
Dernière édition:
Re : Automatise tâches dans Excel 2007

Merci à vous pour votre aide.

Je voudrais copier les 2 tableaux, le problème est que le contenu, donc la hauteur des tableaux est variable :

- Sur une nouvelle feuille (Feuil1), copier le tableau qui commence ou il y a le mot "entrées" (normalement toujours en A5) et se termine en J et la ligne de fin change en fonction du contenu du tableau. (ici en J8)

- Sur une nouvelle feuille (Feuil2), copier le tableau qui commence ou il y a le mot "sorties" (en l'occurence en A11 ici) et se termine en J et la ligne de fin change en fonction du contenu du tableau. (ici en J14)

Merci.

Mikael
 
Re : Automatise tâches dans Excel 2007

Re bonjour,,
Bonjour aussi JNP
voilà qui doit faire...
Code:
Sub macopie()
With Sheets("Transfert")
haut = .[A:A].Find("Entrées", , , , 1, 2).Row
bas = .Range("B" & haut).End(xlDown).Row
.Range("A" & haut & ":J" & bas).Copy _
Sheets("Feuil1").[A1]
haut = .[A:A].Find("Sorties", , , , 1, 2).Row
bas = .[A:J].Find("*", , , , 1, 2).Row
.Range("A" & haut & ":J" & bas).Copy _
Sheets("Feuil2").[A1]
End With
End Sub
 
Re : Automatise tâches dans Excel 2007

Merci youky(BJ) !

En fait, ça ne marchait pas parce que j'essayé d'éxecuter la macro avant d'avoir crée mes 2 feuilles.

J'ai donc rajouté au début de ma macro :
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"
Et j'ai renommé mes feuilles...

Merci pour votre aide.

Mikael.
 
Re : Automatise tâches dans Excel 2007

Bonjour,

Je reviens encore avec un problème... J'ai voulu faire une macro qui me supprime les colonnes vides (en l'occurence C & F).

J'ai fait cette macro mais lorsque je l'éxécute, il me supprime ces deux colonne, mais aussi la colonne "Date" et "Quantité".

J'ai donc essayé de le faire manuellement en faisant enregistrer la macro. Mais le résultat est le même.

Voici mon code
Code:
Sub Supprime_col_CF()
    Sheets("ENTREES").Select
    Columns("C:C").Select
    Range("C5").Activate
    Selection.Delete Shift:=xlToLeft
    Columns("E:E").Select
    Range("E5").Activate
    Selection.Delete Shift:=xlToLeft
    Sheets("SORTIES").Select
    Columns("C:C").Select
    Range("C5").Activate
    Selection.Delete Shift:=xlToLeft
    Columns("E:E").Select
    Range("E5").Activate
    Selection.Delete Shift:=xlToLeft
    Range("I14").Select
End Sub

Je ne comprends pas d'ou vient le problème.

J'ai trouvé ce code qui marche :

Code:
Sub sup_col_vides_ENTREES()
    Sheets("ENTREES").Select
    Dim c
    For c = 256 To 1 Step -1
    If Cells(65536, c).End(xlUp).Row = 1 Then Cells(1, c).EntireColumn.Delete
    Next c
End Sub

Mikael


P.S. Au passage, quel livre me conseilleriez-vous pour apprendre le V.B.A. ?
 
Dernière édition:
Re : Automatise tâches dans Excel 2007

Re 🙂,
Teste la suppression en commençant par la colonne la plus à droite, car quand tu supprimes B par exemple, C devient B, D devient C, etc.
Donc tu n'est pas sûr de supprimer la bonne colonne...
D'autre part, évite les Select qui ralentissent la procédure
Code:
Sub Supprime_col_CF()
With Sheets("ENTREES")
.Columns("E:E").Delete Shift:=xlToLeft
.Columns("C:C").Delete Shift:=xlToLeft
End With
With Sheets("SORTIES")
.Columns("E:E").Delete Shift:=xlToLeft
.Columns("C:C").Delete Shift:=xlToLeft
.Range("I14").Select
End With
End Sub
Bonne journée 😎
 
Re : Automatise tâches dans Excel 2007

Merci a vous tous, pour votre aide. J'ai reussi a faire ce que je souhaitais.

Cependant, j'ai encore une question, la macro doit être utilise chaque mois avec un nouveau fichier.
Comment puis-je faire pour ne pas devoir insérer mon module a chaque fois dans ce nouveau fichier ?
Est-il possible de la stocker dans Excel ?
Autrement, j'ai pense la mettre dans un classeur vide, que j'ouvrirai, et ensuite dans mon fichier j'executerai directement la macro a partir de mon classeur vide.

Merci pour vos conseils.

Mikael.
 
Re : Automatise tâches dans Excel 2007

Re 🙂,
Teste la suppression en commençant par la colonne la plus à droite, car quand tu supprimes B par exemple, C devient B, D devient C, etc.
Donc tu n'est pas sûr de supprimer la bonne colonne...
D'autre part, évite les Select qui ralentissent la procédure
Code:
Sub Supprime_col_CF()
With Sheets("ENTREES")
.Columns("E:E").Delete Shift:=xlToLeft
.Columns("C:C").Delete Shift:=xlToLeft
End With
With Sheets("SORTIES")
.Columns("E:E").Delete Shift:=xlToLeft
.Columns("C:C").Delete Shift:=xlToLeft
.Range("I14").Select
End With
End Sub
Bonne journée 😎

Merci JNP, pour cette astuce, je n'y avais pas pense. J'avais donc trouve cette macro
Code:
Sub sup_col_vides_ENTREES()
    Sheets("ENTREES").Select
    Dim c
    For c = 256 To 1 Step -1
    If Cells(65536, c).End(xlUp).Row = 1 Then Cells(1, c).EntireColumn.Delete
    Next c
End Sub

qui supprime toutes les colonnes vides, mais elle met longtemps a s'exécuter, environ 1 minute. C'est peut-être a cause de la boucle ? Comment pourrait on faire pour qu'elle soit plus rapide ?
 
Re : Automatise tâches dans Excel 2007

re bonjour à vous,
Mikael tu peux raccourcir la boucle For
tu testes sur 256 colonnes ton tableau n'utilise pas les 256 colonnes
exemple si ton tableau s'arrete à la col J tu mets... For c = 10 To 1 Step -1

Ps pour JNP:as-tu réussis à installer le calendar>moi c'est ok
A+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

E
  • Question Question
Réponses
0
Affichages
682
Excelée
E
Réponses
3
Affichages
2 K
N
Réponses
2
Affichages
2 K
Novice38
N
N
Réponses
4
Affichages
2 K
Novice38
N
B
Réponses
2
Affichages
1 K
K
Réponses
1
Affichages
1 K
K
Retour