Copie celluleS sous conditionS d'une feuille à l'autre
Bonjour à tous,
Une copie sous condition en VBA, très originale, mais il y a tant de variables et de problèmes différents que je n'ai pas trouvé ma solution.
Ce que je cherche à faire :
pour chaque ligne de la feuille 1
si (condition 1) colonne B ="" et (condition 2) colonne C = "" et (condition 3) colonne D <> "" alors copier cellules de F à M
puis coller les cellules en feuille2 à un endroit bien précis (pour cela j'ai nommé certaine cellule, donc l'idée après c'est de copier comme manuellement en sélectionnant la cellule nommée, clic droit > insérer les cellules copiées > décaler les cellules vers le bas)
pour l'instant j'en suis là:
Sub transfert11()
Dim i As Long
For i = 3 To 500
If Range("B" & i) = "1. Maîtrise d'ouvrage déléguée" And Range("E" & i) = "x" Then Range("F" & i & ":M" & i).Copy
Next i
mais pour la copie je ne doit pas avoir la bonne syntaxe, j'en ai essayé une bonne 20taine, rien à faire.
Je vous mets un fichier exemple pour être claire au cas où...
Le but de l'opération est en fait que j'ai une feuille où sont répertoriés des intervenants (1000 en 7 catégories), sur cette feuille on peut sélectionner les intervenants (en colonne D) et ainsi générer sur une feuille2 type avoir une liste des intervenants pour un projet donné rangés par catégorie.
Merci pour toutes votre aide.
iArmeek
Bonsoir,
j'ai repris ton code.
ça a l'air de tourner chez moi comme ça :
Sub transfert01()
Sheets("INTERVENANTS").Select
Dim i As Long
For i = 3 To 50
If Range("B" & i).Value = "1. Maîtrise d'ouvrage déléguée" And Range("D" & i).Value = "X" Then
Range("F" & i & ":M" & i).Copy
Sheets("TABLEAU DES INTERVENANTS").Select
Range("MOD").Select
Selection.Insert Shift:=xlDown
Sheets("INTERVENANTS").Select
End If
Next i
End SubTu avais un petit x dans "x" et tu ne revenais pas dans ta page de base pour faire dérouler les i, donc peu de risque de retomber sur une ligne qui correspond ^^
J'espère que ça te permettra de poursuivre.
Cdlt,
Bonjour,
Un point de départ :
Sub Galopin()
Dim i%, Tablo, cible$
Application.ScreenUpdating = False
Tablo = Split("MOD MO MOE BUC SPS EXP ENT")
With Sheets("INTERVENANTS")
For i = 3 To 50
cible = Tablo(CInt(Left(.Range("B" & i), 1)) - 1)
If .Range("D" & i) = "X" Then
.Range("F" & i & ":M" & i).Copy
Sheets("TABLEAU DES INTERVENANTS").Range(cible).Insert Shift:=xlDown
Sheets("TABLEAU DES INTERVENANTS").Range(cible).Offset(-1).PasteSpecial Paste:=xlPasteValues
End If
Next
End With
End SubAttention ! Les lignes bleues ou gris/marron ne doivent pas être cochées !
A+
Plop, Galopin01,
Merci à tous les deux, avec les deux rapides essais ce matin -journée speed- les deux fonctionnent parfaitement.
ça fait une petit moment que je n'avais pas fait de VBA, je dois effectivement revoir les essentiels, merci Plop.
Galopin, c'est du grand art, je vais essayer de comprendre ta macro, car bien jouer, j'espère que je pourrais te poser quelques questions.
Il me reste plus qu'à nettoyer le fichier avant sa fermeture.
Introduire un simple "ne pas enregistrer" dans la macro "éditer" qui fera le transfert et copie de la feuille dans un autre classeur
Mais je crois que je préfèrerais une macro dans "rétablir" qui efface les lignes copiées, je vais me pencher maintenant là dessus ; en nommant d'autres cellules peut-être, et écrire une commande qui supprime toutes les lignes entre deux cellules nommées, une piste.
Merci encore
Je mettrais le fichier peaufiné dans quelques jours, pour tous ceux qui se balade comme moi et apprend grâce à vos réponse.
enjoy:)