XL 2016 Copier selon contenu d'une cellule (correction du code)

Sb_OS

XLDnaute Junior
Bonjour le forum,
je vous sollicite car je veux rajouter des fonctions à une VBA mais je les maîtrise pas.

volà mon code
Code:
Sub ff()
  Application.EnableEvents = False
    Dim i As Integer
    For i = 1 To 17
  
     If Cells(i, 7) = "OK" Then 'si la colonne 7 (G) contient OK :
      
'La valeur de la cellule de la ligne i et de la colonne 4 (D) est recopié sur la même première ligne vide en colonne 1 (A)dans la feuil Histo
'La valeur de la cellule de la ligne i et de la colonne 5 (E) est recopié sur la même première ligne vide en colonne 2 (B)dans la feuil Histo

With Sheets("Histo") 'la macro actuel ne recopié pas sur la feuil Histo je ne sais pas ou est ce qu'il est le problème
        Cells(i, 1).Value = Cells(i, 4).Value 'je ne sais pas comment déclarer la 1ere ligne vide
        Cells(i, 2).Value = Cells(i, 5).Value
End With
    End If
   
    Next i
  

    Application.EnableEvents = True
End Sub

J'ai plusieurs feuils sur chaque une j'ai un bouton pour enregistrer historique de mes pièces validées.
Dans les commentaires du code vous trouverez ce que j'ai besoin d'avoir comme fonctions.
Une autre question : est ce qu'il possible d'utiliser le meme module pour tous le bouton et avoir l'enregistrement seulement de la feuil active (la feuil du bouton exécuté). le but en fait c'est d'éviter de faire un module pour chaque feuil.
J'espère que j'ai été clair n'hésitez pas de me demander des précision ou des fichiers joints.
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour Sb_OS, bonjour le forum,

Pas très clair tout ça... Mais quand tu utilise With, pour faire référence à ce qui est décrit, il faut mettre un point (.) devant. Mais comme dans ton exemple je ne sais pas qui est qui, ça devrait donner :

VB:
With Sheets("Histo")
     Cells(i, 1).Value = .Cells(i, 4).Value
     Cells(i, 2).Value = .Cells(i, 5).Value
End With
ou :
VB:
With Sheets("Histo")
     .Cells(i, 1).Value = Cells(i, 4).Value
     .Cells(i, 2).Value = Cells(i, 5).Value
End With
 

Sb_OS

XLDnaute Junior
ah ouiii d'accord et ça corrige un problème.
une deuxième question : par exemple j'ai ok dans la ligne 1 et ligne 3 quand j'exécute mon code je veux avoir l'enregistrement sur les premières ligne vide dans la feuil Histo et pas sur la ligne 1 et 3 . savez vous comment le faire ! PEUX ETRE AVEC LA FONCTION End (XLDOWN) comme suit :
Code:
 .Cells(.Rows.Count, 2).End(xlDown).Offset(1, 0) = Cells(i, 5).Value

a la place de :
Code:
.Cells(i, 2).Value = Cells(i, 5).Value

mais j'ai des erreurs

Le but c'est de ne pas avoir des lignes vides et de ne pas écraser ce que j'ai enregistré avant

Merci @Robert
 
Dernière édition:

Sb_OS

XLDnaute Junior
J'ai pu résoudre le problème et voilà le code :
Code:
Sub ff()
  Application.EnableEvents = False
    Dim i As Integer
    For i = 1 To 17
  
     If Cells(i, 7) = "OK" Then
      

Sheets("feuil1").Cells(i, 4).Copy Sheets("Histo").Cells(Rows.Count, 2).End(xlUp)(2)
    End If
   
    Next i
  

    Application.EnableEvents = True
End Sub
Pour appliquer le code sur plusiers feuilles sans avoir créer le code pour chaque feuille il faut remplacer Sheets("feuil1") par activesheet.

le code est à mettre sur un module pour exécuter avec un bouton
si non à inscrir sur le worksheet pour exécuter en tapant OK directement

j'espère que ça va aider d'autres personnes :)
 
Dernière édition:

Discussions similaires

Réponses
5
Affichages
452
Réponses
4
Affichages
450

Statistiques des forums

Discussions
315 093
Messages
2 116 136
Membres
112 667
dernier inscrit
foyoman