Copier / coller entre 2 feuilles avec condition

Papy0200 Messages postés 4 Date d'inscription dimanche 15 juin 2008 Statut Membre Dernière intervention 17 juin 2008 - 15 juin 2008 à 21:10
Papy0200 Messages postés 4 Date d'inscription dimanche 15 juin 2008 Statut Membre Dernière intervention 17 juin 2008 - 17 juin 2008 à 15:27
Bonjour,

Newbie complet en VB, je dois pourtant faire une macro pour mon boulot.

le but : chercher dans une feuille "Constat" des colonnes avec un n° de référence donner, copier ces colonnes et les coller dans une feuille "Situation".

La macro fonctionne pour trouver les colonnes qui correspondent à la référence en C11 de la feuille "constat", puis copier la plage de cellule demandée et enfin coller cette plage sur la feuille "situation", en E13.

mon problème : une fois la plage collée, il faut retourner dans constat et trouver d'autres colonnes répondant à la recherche, puis coller le résultat de la recherche en E14, puis E15, puis E16... et visiblement ça s'arrête à la première recherche.

Quelqu'un peut m'aider SVP.

Ps : problème secondaire, le filtre sur la valeur "faux" à la fin fonctionne mais par contre ça ne s'affiche pas. Pourquoi ?

Merci d'avance.

Mon code :

Sub Editer_constat_mensuel()


Application.ScreenUpdating = False


Dim I As Integer
Dim J As Integer


Sheets("Situation").Select
ActiveSheet.ListObjects("Liste1_1590").Range.AutoFilter Field:=18
Range("E13:N154").ClearContents
Range("E10:N10").ClearContents


Sheets("Constat").Select
J = 5
    For I = 4 To 128 Step 1
      If Cells(11, I) = Range("C11") Then
     
      Range(Cells(17, I), Cells(158, I)).Copy
      
         Sheets("Situation").Select
        Cells(13, J).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
       
        Sheets("Constat").Select
        Cells(13, I).Copy
       
        Sheets("Situation").Select
        Cells(10, J).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
       
        J = J + 1
        End If
    Next I
   
Application.ScreenUpdating = True


ActiveSheet.ListObjects("Liste1_1590").Range.AutoFilter Field:=18, Criteria1:="FAUX"
   
End Sub


 

5 réponses

us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
15 juin 2008 à 22:16
Bonsoir,

Pour la première question, il me semble que tu as mis le retour de la feuille constat hors de la boucle...

........
Sheets("Constat").Select
J = 5
    For I = 4 To 128 Step 1
........

devrait être :

........
J = 5
    For I = 4 To 128 Step 1
    Sheets("Constat").Select
........

LA deuxième question est plus difficile à cerner. Je tente une réponse... Si il y avait la selection de la feuille "situation" avant d'effectuer un ActiveSheet... machin, truc...  ?

Amicalement,
Us.
0
Papy0200 Messages postés 4 Date d'inscription dimanche 15 juin 2008 Statut Membre Dernière intervention 17 juin 2008
16 juin 2008 à 11:12
J'essaie tes modifs et je vous tiens au courant, merci.

Papy0200
0
Papy0200 Messages postés 4 Date d'inscription dimanche 15 juin 2008 Statut Membre Dernière intervention 17 juin 2008
16 juin 2008 à 11:54
Ca marche pour la première : c'était bien un Pb de boucle, dire que j'ai cherché pendant des heures avant de lancer mon SOS... Merci.

Pour la deuxième par contre, ça ne change rien.
Ce que je ne comprends pas, c'est que le code est issu de macro faite avec l'enregistreur. il n'est pas sensé planté lui ?!



Papy0200
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
17 juin 2008 à 09:49
bonjour,

Est-ce que vous avez essayé, pour la dernière ligne de rajouter la selection ?... comme ceci :

Sheets("Situation").Select
ActiveSheet.ListObjects("Liste1_1590").Range.AutoFilter Field:=18, Criteria1:="FAUX"

En effet, la seconde instruction fait référence à un objet "Liste1" sur une feuille spécifique, il faut donc se retrouver sur cette dernière avant tout chose...

Sinon, quelle est le message d'erreur ?...

Amicalement,
Us.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Papy0200 Messages postés 4 Date d'inscription dimanche 15 juin 2008 Statut Membre Dernière intervention 17 juin 2008
17 juin 2008 à 15:27
Bonjour,

j'ai bien essayé cette solution que vous proposiez dans votre première réponse, mais sans résultat.

Aucun message d'erreur ne s'affiche. En fin d'exécution de la macro, toutes les lignes de la plage filtrée sont masquées ; il faut que je lance un filtrage "manuel" pour afficher celles qui répondent au critère "FAUX". 

Mais bon, s'il ne reste que cela à faire, ce n'est pas grand chose par rapport au copié / collé des colonnes manuel que je devais faire dans une base de près de 150 colonnes.


Cordialement, Papy0200
0
Rejoignez-nous