amélioration macro

florent@77

XLDnaute Junior
Bonjour à tous,

Très faible en VBA, j'adapte des exemples de ce forum pour un projet en essayant de comprendre.
cepandant j'ai besoin égalemende votre aide car je coince sur une amélioration de ce que j'ai adapté.
j'ai 50 fois la même macro que répète dans mon fichier
je souhaiterai savoir si c'est possible de la faire qu'une fois et qu'elle se répète autant de fois que necessaire

merci pour votre aide

florent

ci dessous ma macro (que je répète 50 fois ) et un exemple en piece jointe

Sub mensuel1()

Sheets("feuil2").Activate
mot = Range("A1").Value
Sheets("feuil1").Activate
Dim nbc As Integer, i As Integer

nbc = Range("IV1").End(xlToLeft).Column

For i = 1 To nbc
If Cells(1, i).Value = mot Then

Range(Cells(1, i), Cells(1, i).End(xlDown).Offset(5000, 0)).Select

'Columns(i).Select

End If

Next
COPIEMENSUEL1
End Sub

Sub COPIEMENSUEL1()

Selection.Copy
Sheets("feuil2").Select
Range("A4").Select
ActiveSheet.Paste
Range("A1").Select
End Sub
 

Pièces jointes

  • exemple flo.zip
    9.9 KB · Affichages: 37
  • exemple flo.zip
    9.9 KB · Affichages: 28
  • exemple flo.zip
    9.9 KB · Affichages: 30

pierrejean

XLDnaute Barbatruc
Re : amélioration macro

bonjour Florent

j'ai réalisé une macro un peu plus succinte qui fait me semble-t-il ce que tu demandes

mais je ne vois pas bien pourquoi tu dois repeter 50 fois

veux-tu regarder et nous dire

edit: je crois avoir compris !

vois si cela te convient
 

Pièces jointes

  • exemple flo.zip
    14 KB · Affichages: 31
  • exemple flo.zip
    14 KB · Affichages: 28
  • exemple flo.zip
    14 KB · Affichages: 26
Dernière édition:

bof

XLDnaute Occasionnel
Re : amélioration macro

bonjour,
Une autre possibilité :
Code:
Sub mensuel1()
Dim nbc As Integer, i As Integer
Do
k = k + 1
mot = Sheets("Feuil2").Cells(k)
For i = 1 To 256
If Sheets("Feuil1").Cells(i) = mot Then
Sheets("Feuil1").Columns(i).Resize(5000).Copy Sheets("Feuil2").Cells(k).Offset(3)
Exit For
End If
Next
Loop While Sheets("Feuil2").Cells(k + 1) <> ""
End Sub
A+
 

pierrejean

XLDnaute Barbatruc
Re : amélioration macro

merci bof pour ces exemples d'une ecriture que je ne connaissais pas :

Cells(k)
Offset(3)

je suppose que l'on doit se souvenir que dans le 1er cas c'est la ligne 1 qui est sous-entendue (identité avec cells(1,k))

alors que dans le second cest le 0 de l'offset colonne qui est sous-entendu
(identité avec offset(3,0))
 

florent@77

XLDnaute Junior
Re : amélioration macro

bonjour Pierrejean,

je te remercie d'avoir regarder si rapidement ma demande
je viens de regarder l'exemple, cela fonctionne nickel

pourquoi 50 fois, je recupère 50 colonnes d'une énorme base de données . les colonnes n'étant pas toujours dans un même ordre, je recopie les colonnes qui m'interressent sur un autre onglet,en fonction de son intitulé

A moi de l'adapter à mon projet

Encore merci

Florent
 

bof

XLDnaute Occasionnel
Re : amélioration macro

merci bof pour ces exemples d'une ecriture que je ne connaissais pas :

Cells(k)
Offset(3)

je suppose que l'on doit se souvenir que dans le 1er cas c'est la ligne 1 qui est sous-entendue (identité avec cells(1,k))

alors que dans le second cest le 0 de l'offset colonne qui est sous-entendu
(identité avec offset(3,0))

Non et Oui :
Non dans le premier cas, ce n'est pas une syntaxe avec argument facultatif, mais bien une syntaxe particulière :
Avec Cells(index) nous avons une numérotation continue
de 1 à 256 pour la première ligne
de 257 à 512 pour la deuxième... et ainsi de suite.
Ainsi Cells(2561).Select est l'équivalent de Cells(11,1)

Tandis que dans le cas de l'offset l'argument colonne (facultatif) n'est pas utile ici.

A+
 

Discussions similaires

Réponses
4
Affichages
234
Réponses
6
Affichages
287

Membres actuellement en ligne

Statistiques des forums

Discussions
312 505
Messages
2 089 070
Membres
104 020
dernier inscrit
Mzghal