Pour faire cela, il faut quelques notions de base en prog....
Idem pour expliquer ce dont tu as besoins.
Par exemple, si tu veux copier le N° de compte 62 dans l'Onglet 62, alors il ne s'agit pas d'une copie subordonnée à une condition. On utilise pour cela une variable:
bon, c'est très simplifié, mais cela copie le numéro de compte X dans la première cellule de la feuille X, à partir de ton tableau de départ qui est sur la feuille "Feuille_du_Tableau".
Je me mets au VBA pour mon boulot et je bloque sur un truc assez stupide, afin d'automatiser un fichier j'aimerai recopier quelque cellules d'une ligne dans une autre feuille si une condition est respectée.
Je m'explique :
La cellule J d'une ligne peut contenir différents mots pour simplifier X, Y et Z Si le mot contenu dans "J" est Y alors je voudrais que les cellules A à D soit recopier dans la feuillle 2
Et ainsi de suite pour toutes les lignes
J'ai beau prendre le problème dans tous les sens ou essayer d'abord d'enregistrer puis d'automatiser, pas moyen !!!
Pour la feuille de données "feuille1" Si la cellule J3 est égale à "Committed" Alors copier celulle A3:H3 vers la feuille 2 (commencé copiage en A3)
Et ainsi de suite
Je suis débutant mais j'ai vraiment envie de m'y mettre, alors j'ai essayé de le faire en VBA mais il y a un truc qui fonctionne pas vu que copie pas !!!!
Ok pour Copiage, Niveau français c'était très très moyen !!!
Bon lorsque j'enregistre à la main la macro après un tri de ma collone J voila ce que j'obtient :
Code :
Sub CopyCommittedCells()
Sheets("Orders Funnel" ).Select
Range("A3:H18" ).Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Committed Funnels" ).Select
Range("A2" ).Select
ActiveSheet.Paste
Range("I8" ).Select
ActiveWindow.ScrollColumn = 4
ActiveWindow.ScrollColumn = 5
ActiveWindow.ScrollColumn = 4
ActiveWindow.ScrollColumn = 1
Range("F2" ).Select
End Sub
Le seul problème c'est que je voudrais le faire automatiquement le tri et le "COPIAGE !" En insérant les cellules dans des nouvelles ligne si possible mais là j'abuse peut etre !
Ah, tu copies la zone A3:H18 dans la cellule A2 C'est nouveau.
Considérons que tu veux toujours coller A3:H3 dans A3 d'une autre feuille.
Je réécris ta procédure :
Code :
Sub CopyCommittedCells()
Sheets("Orders Funnel" ).Range("A3:H3" ).Copy
Sheets("Committed Funnels" ).Range("A2" ).Paste
End Sub
C'est plus simple.
Ajoutons le test :
Code :
Sub CopyCommittedCells()
If Sheets("Orders Funnel" ).Range("J3" ).Text = "Committed" Then
Sheets("Orders Funnel" ).Range("A3:H3" ).Copy
Sheets("Committed Funnels" ).Range("A3" ).Paste
End If
End Sub
Est-ce toujours clair ?
Bon maintenant, on le fait pour une ligne, n'importe laquelle :
Code :
Sub CopyCommittedCells()
Dim r As Integer
Dim sOF As Worksheet
Dim sCF As Worksheet
Set sOF = Worksheets("Orders Funnel" )
Set sCF = Worksheets("Committed Funnel" )
r = <N'importe laquelle>
If sOF.Cells(r, 10).Text = "Committed" Then
sOF.Range(Cells(r, 1), Cells(r, 7)).Copy
sCF.Cells(r, 1).Paste
End If
End Sub
J'utilise des variables pour les feuilles, c'est plus concis, mais pas obligatoire.
Dans ce dernier code, il y a un problème : la ligne de départ et la ligne d'arrivée sont la même dans des feuilles différentes.
Bon, maintenant pour toutes les lignes de 3 à 10000 :
Code :
Sub CopyCommittedCells()
Dim rOF As Integer
Dim rCF As Integer
Dim sOF As Worksheet
Dim sCF As Worksheet
Set sOF = Worksheets("Orders Funnel" )
Set sCF = Worksheets("Committed Funnel" )
rCF = <première ligne libre de Committed Funnel>
For rOF = 3 To 10000
If sOF.Cells(rOF, 10).Text = "Committed" Then
sOF.Range(Cells(rOF, 1), Cells(rOF, 7)).Copy
sCF.Cells(rCF, 1).Paste
End If
Next
End Sub
Alors ?
Ben il te reste à initialiser rCF, et à mettre autre chose que For 3 To 10000 pour coller à ton problème. Une boucle While est sans doute plus adéquate.
Alors ca fonctionne bien car ça selection bien une ligne avec Committed mais après ça stop pour une erreur
'1004' pour un Range qui foire ligne 15...
j'ai pas encore changer For 3 to 1000 pour l'instant et j'ai :
Code :
Sub CopyCommittedCells()
Dim rOF As Integer
Dim rCF As Integer
Dim sOF As Worksheet
Dim sCF As Worksheet
Set sOF = Worksheets("Orders Funnel" )
Set sCF = Worksheets("Committed Funnels" )
rCF = 2
For rOF = 3 To 10000
If sOF.Cells(rOF, 10).Text = "Committed" Then
sOF.Range(Cells(rOF, 1), Cells(rOF, 7)).Copy
sCF.Range(Cells(rCF, 1)).Paste
End If
Next
End Sub
Alala c'est vraiment bizare hier je prend un exemplaire de formulaire pour inserer des valeurs dans une nouvelle ligne et tout à fonctionné sans pb, maintenant c Opérationel mais ça je sais pas pourquoi ca veut pas !!
Message édité par nono le golfeur le 16-01-2007 à 12:01:39
1° tu ne t'es pas ridiculisé du tout je suis le premier à ne pas avoir réussi à le faire fonctionner !!
2° Me dégouter du VBA c'est pas loin mais ça n'est pas de ta faute plutôt de la mienne qui m'entete sur un truc comme ça !
3° Le code fonctionne et copie les bonne données
4° Mais (car il y a un mais dsl...) les cellules sont pas copiées au bon endroit, elles se décalent d'une cellule a chq fois, la premier se copie en B2 puis la deuxieme ligne en C3 puis D4 etc.
Bonjour,
quand j'execute la commande dès qu'il y a écrit committed dans la cellule du fichier Orders Funnel, cela remplace ce qui avait été copié auparavant dans le fichier Committed Funnel. Moi je voudrais que la nouvelle ligne a copier se colle à la suite de l'ancienne(dans la 1ère ligne vide). Est-ce possible ?
Merci