Macro excel - copie conditionnelle
Fabrice
-
Fabrice -
Fabrice -
Bonjour,
Voila j'ai un tableau excel pour faire l'évaluation des risques pour un poste de travail. Chaque risque est écrit sur 3 lignes et pour chaque risque l'utilisateur doit cocher une case pour dire si le poste est concerné par le risque en question ou pas.
Le but de la macro est de copier les risques (donc par tranches de 3 lignes) qui concernent le poste en question sur une nouvelle feuille.
J'ai associé ma case à cocher à une cellule qui indique "VRAI" quand elle est cochée donc je pensais me servir de cette valeur. Le problème c'est que je voulais déclarer une variable "i" qui correspondrait au numéro de la ligne pour avoir en gros:
pour i=1 et j=1
Si la case X="VRAI" copier les lignes (i à i+2) sur la feuilleY à la ligne (j à j+2)
passer à j=j+3 et i=i+3
Sinon passer à i=i+3
et répéter jusqu'à la fin du tableau
Bon je gère mal le langage vba... Donc je commence petit à petit, je voulais donc commencer par copier les 3 premieres lignes de mon tableau sur une feuille vierge mais j'ai un bug je sais pas pourquoi:
Sub Bilan()
Dim i As Integer
i = 1
Sheets("Qualité").Select
Rows(i, i + 2).Select 'là il me dit qu'il y a un bug j'ai essayé en mettant des & autour des variable mais ca bug'
Selection.Copy
Sheets("Bilan").Select
ActiveSheet.Paste
End Sub
Savez vous où se trouve mon erreur et savez vous s'il existe ce genre de petit programme pré établi, ce qui pourrait me faciliter la tâche ?
Cordialement, Fabrice
Voila j'ai un tableau excel pour faire l'évaluation des risques pour un poste de travail. Chaque risque est écrit sur 3 lignes et pour chaque risque l'utilisateur doit cocher une case pour dire si le poste est concerné par le risque en question ou pas.
Le but de la macro est de copier les risques (donc par tranches de 3 lignes) qui concernent le poste en question sur une nouvelle feuille.
J'ai associé ma case à cocher à une cellule qui indique "VRAI" quand elle est cochée donc je pensais me servir de cette valeur. Le problème c'est que je voulais déclarer une variable "i" qui correspondrait au numéro de la ligne pour avoir en gros:
pour i=1 et j=1
Si la case X="VRAI" copier les lignes (i à i+2) sur la feuilleY à la ligne (j à j+2)
passer à j=j+3 et i=i+3
Sinon passer à i=i+3
et répéter jusqu'à la fin du tableau
Bon je gère mal le langage vba... Donc je commence petit à petit, je voulais donc commencer par copier les 3 premieres lignes de mon tableau sur une feuille vierge mais j'ai un bug je sais pas pourquoi:
Sub Bilan()
Dim i As Integer
i = 1
Sheets("Qualité").Select
Rows(i, i + 2).Select 'là il me dit qu'il y a un bug j'ai essayé en mettant des & autour des variable mais ca bug'
Selection.Copy
Sheets("Bilan").Select
ActiveSheet.Paste
End Sub
Savez vous où se trouve mon erreur et savez vous s'il existe ce genre de petit programme pré établi, ce qui pourrait me faciliter la tâche ?
Cordialement, Fabrice
A voir également:
- Macro excel - copie conditionnelle
- Mise en forme conditionnelle excel - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Liste déroulante excel - Guide
- Excel liste déroulante conditionnelle - Guide
- Copie cachée - Guide
6 réponses
rows(i) te ramene une ligne; cells(i,j) pour une cellule
pour avoir les 3 voulues:
for i=1 to 3
Sheets("Qualité").Select
Rows(i).Select
Selection.Copy
Sheets("Bilan").Select
ActiveSheet.Paste
next i
la même action est appliquée à chacune des 3 lignes.
Il y a moyen de selectionner les 3 ligne en une seule fois et d'y appliquer ton couper coller. j'y réfléchis
pour avoir les 3 voulues:
for i=1 to 3
Sheets("Qualité").Select
Rows(i).Select
Selection.Copy
Sheets("Bilan").Select
ActiveSheet.Paste
next i
la même action est appliquée à chacune des 3 lignes.
Il y a moyen de selectionner les 3 ligne en une seule fois et d'y appliquer ton couper coller. j'y réfléchis
row('i) pour une ligne; cells(i,j) pour une cellule
tu peux mettre ton code dans une boucle qui s'exécutera 3 fois
for i= 1 to 3
Sheets("Qualité").Select
Rows(i).Select
Selection.Copy
Sheets("Bilan").Select
ActiveSheet.Paste
next i
Il doit y avoir moyen de selectionner les 3 lignes à la fois et d'y appliquer ton copier coller. j'y réfléchi
tu peux mettre ton code dans une boucle qui s'exécutera 3 fois
for i= 1 to 3
Sheets("Qualité").Select
Rows(i).Select
Selection.Copy
Sheets("Bilan").Select
ActiveSheet.Paste
next i
Il doit y avoir moyen de selectionner les 3 lignes à la fois et d'y appliquer ton copier coller. j'y réfléchi
3ème tentative de réponse
rows(i) pour les lignes, cells(i,j) pour les cellules
For i = 1 to 3
Sheets("Qualité").Select
Rows(i)
Selection.Copy
Sheets("Bilan").Select
ActiveSheet.Paste
next i
je réfléchis à une solution qui appliquerait ton copier coller directement sur la plage voulue
rows(i) pour les lignes, cells(i,j) pour les cellules
For i = 1 to 3
Sheets("Qualité").Select
Rows(i)
Selection.Copy
Sheets("Bilan").Select
ActiveSheet.Paste
next i
je réfléchis à une solution qui appliquerait ton copier coller directement sur la plage voulue
Mes 3 messages de ce matin ne sont pas visibles ! je recommence
rows(i) pour une ligne ; cells(i,j) pour une cellule
for i = 1 to 3
Sheets("Qualité").Select
Rows(i).Select
Selection.Copy
Sheets("Bilan").Select
ActiveSheet.Paste
next i
on doit pouvoir faire une selection globale sur la plage voulue et appliquer le copier coller à l'ensemble.
J'y réfléchis
rows(i) pour une ligne ; cells(i,j) pour une cellule
for i = 1 to 3
Sheets("Qualité").Select
Rows(i).Select
Selection.Copy
Sheets("Bilan").Select
ActiveSheet.Paste
next i
on doit pouvoir faire une selection globale sur la plage voulue et appliquer le copier coller à l'ensemble.
J'y réfléchis
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Merci algoplus pour l'intéret que tu porte à ma question, tu m'as déjà beaucoup aidé et j'ai un peu avancé de mon coté
J'en viens à une sorte de programme de ce type mais l'écriture et l'appel des variable est un soucis, surtout quand je veux exprimer une variable en fonction d'une autre.
Sub Test()
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim m As Integer
m = 1
For i = 1 To 10
j = 3i + 1 'problème sur l'expression d'une variable en fonction d'une autre que j'arrive pas à résoudre'
Sheets("Qualité").Select
If Cells(J, j) = "VRAI" Then For k = j To j + 3 'Ici Cells(J,j) désigne la case qui est toujours dans la colonne J mais qui chande de ligne'
Sheets("Qualité").Select
Rows(k).Select
Selection.Copy
Sheets("Bilan").Select
Rows(m).Select 'là m est sensé représenter le numéro de ligne où coller mes informations'
ActiveSheet.Paste
m = m + 1 'là je veux passer à la ligne suivante sur la nouvelle feuille'
Next k
Next i
Else: Next i
End Sub
J'en viens à une sorte de programme de ce type mais l'écriture et l'appel des variable est un soucis, surtout quand je veux exprimer une variable en fonction d'une autre.
Sub Test()
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim m As Integer
m = 1
For i = 1 To 10
j = 3i + 1 'problème sur l'expression d'une variable en fonction d'une autre que j'arrive pas à résoudre'
Sheets("Qualité").Select
If Cells(J, j) = "VRAI" Then For k = j To j + 3 'Ici Cells(J,j) désigne la case qui est toujours dans la colonne J mais qui chande de ligne'
Sheets("Qualité").Select
Rows(k).Select
Selection.Copy
Sheets("Bilan").Select
Rows(m).Select 'là m est sensé représenter le numéro de ligne où coller mes informations'
ActiveSheet.Paste
m = m + 1 'là je veux passer à la ligne suivante sur la nouvelle feuille'
Next k
Next i
Else: Next i
End Sub
pour tes variables j = 3i + 1, tu aurais pu l'écrire j=i*3+1
Pour le reste j'ai réfléchis et même si c'est pas tout à fait ce que je voulais, ca fonctionne
Sub test()
Dim i As Integer
Dim j As Integer
Dim m As Integer
m = 1
For i = 1 To 13 Step 3
If Cells(i, 10).Value = "Vrai" Then 'on prend la cel 1 puis 4 puis 7 ...de la colonne J(n°10)
For j = 1 To 3 'on va faire copier coller pour 3 lignes
Worksheets("Qualité").Select
Cells(j + i - 1, 1).Select 'on se positionne en debut de ligne
Range(Selection, Selection.End(xlToRight)).Copy 'on selectionne jusqu'en fin de ligne et on copie
Worksheets("Bilan").Select
Worksheets("bilan").Rows(m).Select 'm vaut 1 au premier passage
Worksheets("bilan").Paste
m = m + 1 'là je veux passer à la ligne suivante sur la nouvelle feuille
Next j
End If
Next i
End Sub
on aurait pu faire une copie comme ca:
Worksheets("qualité").Rows(i+j-1).Select
mais en collant(paste) tu aurais aussi copier la valeur "vrai" de la colonne J
en espérant avoir été clair!
Pour le reste j'ai réfléchis et même si c'est pas tout à fait ce que je voulais, ca fonctionne
Sub test()
Dim i As Integer
Dim j As Integer
Dim m As Integer
m = 1
For i = 1 To 13 Step 3
If Cells(i, 10).Value = "Vrai" Then 'on prend la cel 1 puis 4 puis 7 ...de la colonne J(n°10)
For j = 1 To 3 'on va faire copier coller pour 3 lignes
Worksheets("Qualité").Select
Cells(j + i - 1, 1).Select 'on se positionne en debut de ligne
Range(Selection, Selection.End(xlToRight)).Copy 'on selectionne jusqu'en fin de ligne et on copie
Worksheets("Bilan").Select
Worksheets("bilan").Rows(m).Select 'm vaut 1 au premier passage
Worksheets("bilan").Paste
m = m + 1 'là je veux passer à la ligne suivante sur la nouvelle feuille
Next j
End If
Next i
End Sub
on aurait pu faire une copie comme ca:
Worksheets("qualité").Rows(i+j-1).Select
mais en collant(paste) tu aurais aussi copier la valeur "vrai" de la colonne J
en espérant avoir été clair!