Ca fonctionne ..... Ca fonctionne plus !!!

Philippe -  
 philippe -
Bonjour,

Voila mon petit soucis, ci-dessous la 1ère Macro (qui fonctionne) et qui me permets de copier plusieurs lignes de commandes dans un historique pour en gérer le suivi par la suite.

Sub TransfertDeCommandeDuJour()
ActiveSheet.Unprotect Password:="XXX"
Set f1 = Sheets("Commande")
Set f2 = Sheets("Hist")
For i = 4 To f1.Range("A65536").End(xlUp).Row
If f1.Range("A" & i) = f1.Range("C1") Then
x = f2.Range("A65536").End(xlUp).Row + 1
f1.Range("A" & i & ":F" & i).Copy f2.Range("A" & x)
Application.CutCopyMode = False
End If
ActiveSheet.Protect Password:="XXX"
Next
End Sub

J'ai voulus adapté cette Macro en tenant compte uniquement de la valeur des cellules qui sont copiées (macro ci-dessous).
Elle fonctionne toujours, mais au lieu de copier toutes les lignes concernées par la commande (comme c'était le cas avec la Macro de base) elle ne copie que la première ligne et oublie toutes les autres!

Sub TransfertDeCommandeDuJour()
ActiveSheet.Unprotect Password:="XXX"
Set f1 = Sheets("Commande")
Set f2 = Sheets("Hist")
For i = 4 To f1.Range("A65536").End(xlUp).Row
If f1.Range("A" & i) = f1.Range("C1") Then
x = f2.Range("A65536").End(xlUp).Row + 1
f1.Range("A" & i & ":F" & i).Copy
f2.Select
Range("A" & x).Select
Selection.PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
End If
Sheets("Commande").Select
Range("B4:F14").Select
Selection.ClearContents
Range("A4").Select
ActiveSheet.Protect Password:="XXX"
Next
End Sub

Je me creuse la tête mais je n'arrive pas à comprendre pourquoi!
Merci d'avance pour toutes l'aide que vous pourrez m'apporter.
Pour info je travaille avec Excel 2007.

Philippe

3 réponses

  1. philippe
     
    Vraiment personne pour m'aider ?

    SNIF......
    0
    1. philippe
       
      Alors c'est certain, vraiment personne pour m'aider ?
      0
  2. Bidouilleu_R Messages postés 1209 Statut Membre 296
     
    C'est un petit peu normal...! que ta macro ne fonction qu'une fois
    j'explique.

    Sub TransfertDeCommandeDuJour()
    ActiveSheet.Unprotect Password:="XXX"
    Set f1 = Sheets("Commande")
    Set f2 = Sheets("Hist")

    For i = 4 To f1.Range("A65536").End(xlUp).Row
    ' ici pour les cellules de A4 à Axxxx
    If f1.Range("A" & i) = f1.Range("C1") Then
    ' si la cellue ( A4 ...au début) est égale à C1 alors '
    Qu'y at'il dans C1?
    x = f2.Range("A65536").End(xlUp).Row + 1 ' la derniere cellule libre
    f1.Range("A" & i & ":F" & i).Copy ' on copie f2.Select
    Range("A" & x).Select
    Selection.PasteSpecial Paste:=xlPasteValues ' on colle les valeurs Application.CutCopyMode = False
    End If
    Sheets("Commande").Select ' tu devrais écrire F1.select mais c'est pareil' là ! tu efface le Pavé de B4 à F14 !!!! Ce qui signifie que si A5 =C1 tu ne copieras rien!!! Range("B4:F14").Select
    Selection.ClearContents
    Range("A4").Select
    ActiveSheet.Protect Password:="XXX"
    Next
    End Sub
    0
    1. philippe
       
      Avant toute chose merci de me répondre je commençais à désespérer!
      pour ta première question, dans C1 il y à la date du jour.
      Après si j'efface B4: F14 c'était pour rendre la page de commande vierge après l'avoir copiée dans l'historique mais probablement que je m'y prends mal.
      je ne suis pas un pro mais plutôt un apprenti sorcier.
      Donc si tu veux bien être mon mentor j'ai hâte de boire tes paroles.
      merci d'avance
      0
  3. Bidouilleu_R Messages postés 1209 Statut Membre 296
     
    je pense que tu veux faire une copie par ligne
    cette macro fais ceci:
    1) OteLaProtection : une macro à part, de cette manière
    tu sais quand ta feuile est protégée ou non
    2) déclaration de x et i
    3) la boucle for va parcourir les valeur de A4 à dernière ligne pleine en col A
    4) le test if verifie la date avec C1
    Si Axx=C1 tu copies de A(i) à F(i) ex A5:F5
    Tu vas à la dernière ligne pleine sur la feuile Hist + 1 ( donc laligne vide suivante)
    6) Tu colles les valeurs
    7) tu reviens sur "commande"
    8) tu sélectionnes de b(i) à F(i) ex B5:F5
    9) tu effaces le contenu ( donc il reste la date en A)
    10) tu vas en A4
    11) tu boucles sur le suivant
    12) fin de la boucle for on libère les objets
    13) on protège la feuille.

    Est-ce cela que tu veux faire?

    A+

    Sub TransfertDeCommandeDuJour()
    Dim x As Integer
    Dim i As Integer
    OteLaProtection
    Set f1 = Sheets("Commande")
    Set f2 = Sheets("Hist")
        For i = 4 To f1.Range("A65536").End(xlUp).Row
            If f1.Range("A" & i) = f1.Range("C1") Then
            x = f2.Range("A65536").End(xlUp).Row + 1
            f1.Range("A" & i & ":F" & i).Copy
            f2.Select
            Range("A" & x).Select
            Selection.PasteSpecial Paste:=xlPasteValues
            Application.CutCopyMode = False
            f1.Select  ' commande
            Range("B" & i & ":F" & i).Select ' la ligne
            Selection.ClearContents
            Range("A4").Select
        End If
    Next
    f1 = Nothing
    f2 = Nothing
    Protection
    
    End Sub
    
    Sub OteLaProtection()
        Sheets("Commande").Unprotect Password:="XXX"
    End Sub
    Sub Protection()
        Sheets("Commande").Protect Password:="XXX"
    End Sub
    0
    1. philippe
       
      Salut,

      je viens seulement de lire ta réponse (j'étais en déplacement).
      super, ca fonctionne!!!
      J'ai simplement du enlever

      f1 = Nothing
      f2 = Nothing

      car ça bloquais!
      Depuis comme je le disais ....ca fonctionne !!!!!
      J'espère que ma modification n'aura pas de conséquence, personnellement je n'en pas encore rencontrée.
      encore mille merci pour ton aide
      0