Action conditionnee dans MACRO

Fusky

XLDnaute Junior
Bonjour,


Je passe directement par un exemple :

j'ai une macro qui me fait 36 truc dans mon fichier, et en plus je voudrais quelle me copie la plage A1:C5 si et seulement si Z1>0.

Est-ce possible d'ecrire ca en VBA ?
 

Gorfael

XLDnaute Barbatruc
Re : Action conditionnee dans MACRO

Fusky à dit:
Bonjour,


Je passe directement par un exemple :

j'ai une macro qui me fait 36 truc dans mon fichier, et en plus je voudrais quelle me copie la plage A1:C5 si et seulement si Z1>0.

Est-ce possible d'ecrire ca en VBA ?
Salut
if range("Z1")>0 then range("A1:C5").copy Range("A17")
37ème truc qui copie A1:C5 à partir de A17 si Z1 est supérieur à 0
A+
 

Fusky

XLDnaute Junior
Re : Action conditionnee dans MACRO

Rien de tel que de déterrer un ses propres post !

La question qui m'amène est relativement similaire, je voudrais créer une macro qui supprime les lignes de la ma feuille si la valeur contenu à l'intersection avec la colonne A est "FAUX".

Dit autrement : si A1="FAUX" alors supprimer la ligne 1, et ainsi de suite pour les 500 premières lignes.


Est-ce facile ?
 

Pierrot93

XLDnaute Barbatruc
Re : Action conditionnee dans MACRO

Bonsoir Fusky, Gorfael

essaye peut être ainsi :

Code:
Sub test()
Dim i As Long
For i = Range("A65536").End(xlUp).Row To 1 Step -1
    If Cells(i, 1).Text = "FAUX" Then Rows(i).Delete
Next i
End Sub
bonne soirée
@+
 

Fusky

XLDnaute Junior
Re : Action conditionnee dans MACRO

Bonjour Pierrot,

C'est exactement ce que je cherchais !
Merci beaucoup.


Peux-être peux-tu m'aider avec ça aussi : je dois créer une macro qui colle une plage de cellule dans la Xème colonne d'une feuille.

Je me débrouille de mon côté pour calculer le nombre X, mais ce qui me bloque c'est, d'une part, convertir ce nombre en référence de colonne (ex: 145 correspond à EO), puis écrire en VB, par exemple : copier A1:B4 / coller à partir de "Xème colonne":1.
 

Pierrot93

XLDnaute Barbatruc
Re : Action conditionnee dans MACRO

Bonjour,

peut être ainsi, en utilisant la propriété "cells", 'exemple ci-dessous copiera ta plage A1 B4 à partir de la ligne 5 et de la 9ème colonne (I), et ce sur la feuille active...

Code:
Range("A1:B4").Copy Cells(5, 9)

bon après midi
@+
 

Fusky

XLDnaute Junior
Re : Action conditionnee dans MACRO

Ca m'a l'air intéressant ...

La formule qui me donne le rang de la colonne dans laquelle coller ma plage est la suivante : COUNTIF(B:B;"Total")*18+2

Est-il possible de calculer ce nombre directement dans la macro ?
Dans le cas contraire je serai obligé de coller cette formule dans une cellule puis d'y faire référence dans ma macro ... mais c'est moins "propre" !
 

Fusky

XLDnaute Junior
Re : Action conditionnee dans MACRO

Parfait, merci beaucoup !
Par contre la colonne B:B dans laquelle il faut chercher le nombre de "Total" est sur une feuille (mettons "Feuille1") et la plage de cellules à copie/coller sur une autre ("feuille 2"),

Dois-je insérer quelque chose comme ça ?

Code:
Sheets("Feuille 1").Select
 

Pierrot93

XLDnaute Barbatruc
Re : Action conditionnee dans MACRO

Re,

en l'absence de 2passage que je salue, modifie peut être le code qu'il t'a donné ainsi :

Code:
Range("A1:B4").Copy Cells(5, worksheetfunction.COUNTIF(Sheets("Feuil1").range("B:B"),"Total")*18+2)

A noter, la feuille active étant celle où se trouvent les données à copier... De plus en vba rarement utile de sélectionner...
 

Fusky

XLDnaute Junior
Re : Action conditionnee dans MACRO

A noter, la feuille active étant celle où se trouvent les données à copier... De plus en vba rarement utile de sélectionner...

Je ne suis pas sûr de comprendre, tu veux dire qu'on ne nome la "Feuille 2" nulle part (feuille sur laquelle on on colle les données) ? Comment VB s'y retrouve si j'ai une dizaine de feuilles dans le classeur ?
Je pourrai assigner cette macro à un bouton sur une autre feuille ?
 

Pierrot93

XLDnaute Barbatruc
Re : Action conditionnee dans MACRO

Re,

non pas besoin de nommer une feuille si celle ci est active, comme lorsque le code est exécuté à partir du module d'une feuille, sinon on pourrait également coder comme ceci :

Code:
Sheets("FeuilleDestination").Range("A1:B4").Copy Sheets("FeuilleSource").Cells(5, worksheetfunction.COUNTIF(Sheets("AutreFeuille").range("B:B"),"Total")*18+2)

le nom des feuilles est bien sur à adapter en fonction....
 

Fusky

XLDnaute Junior
Re : Action conditionnee dans MACRO

OK, super, je vais utiliser ce code !

Comme vous êtes trop bon (dans tous les sens du terme :D ) je vous remets à contribution.
Pouvez vous m'aider à construire une macro qui copie des cellules d'un fichier vers un autre ?

Voici la structure :

copier la plage A1:S500 d'un fichier dont l'emplacement et le nom dépendent de formules présentes dans le fichier de destination.
(La Macro devrait faire quelque chose comme CONCATENATE("C:\";'Feuile 1'A1;"\";'Feuile 1'A2;".xls") pour trouver l'emplacement)
coller ces cellules dans le fichier d'où est activé la macro (dans une feuille précise, dans une cellule précise)



je reprend tout avec un exemple :

fichier A : feuille 1 : (A1 contient le nom du dossier dans lequel est le fichier contenant les données à copier ; A2 contient le nom du fichier)
fichier A : feuille 2 : endroit où j'aimerai coller les données
fichier B : feuille 1 : A1:S500 contient les données que j'aimerai copier
 

Pierrot93

XLDnaute Barbatruc
Re : Action conditionnee dans MACRO

Re,

pour des classeurs ouverts, même principe, toujours nommer les objets....

Code:
Workbooks("NomClasseurSource.xls").Sheets("FeuilleSource").Range("A1:S500").Copy _
    Destination:=Workbooks("ClasseurDestination.xls").Sheets("FuilleDestination").Range("A1")


@+
 

Fusky

XLDnaute Junior
Re : Action conditionnee dans MACRO

  • Très bien, sauf que le problème c'est que le nom et le chemin d'accès du classeur à copier sont générés dans des cellule (car ils changent chaque mois).
  • Tu me dis que les classeurs doivent forcément être ouverts ? C'est incontournable ?
 

Statistiques des forums

Discussions
312 502
Messages
2 089 047
Membres
104 011
dernier inscrit
dfr