VBA : Chercher cellules =/= "valeur connue" dans plage déterminée

Fermé
Maouac Messages postés 2 Date d'inscription jeudi 6 juin 2019 Statut Membre Dernière intervention 13 juin 2019 - 6 juin 2019 à 17:10
Maouac Messages postés 2 Date d'inscription jeudi 6 juin 2019 Statut Membre Dernière intervention 13 juin 2019 - 13 juin 2019 à 17:38
Bonjour,

Tout d'abord merci à ceux qui prendront la peine de lire ce message.

J'ai un fichier sur lequel je demande à des opérateurs de faire des saisies quotidiennes de données relatives à des dimensions de colis.

Chaque ligne du fichier commence par la saisie du code barre de la pièce. Or je veux également connaitre la date de chaque saisie de code barre. D'après mes recherche, ce ne sera pas possible sans passer par du VBA. (Quand l'opérateur saisie un code barre en cellule B1, automatiquement la date du jour est inscrite en cellule G1 etc).

Pour faciliter l'écriture de la macro j'ai déjà écrit une formule dans la colonne E : " =SI(B3>0;AUJOURDHUI();"") "

Donc il ne me reste "plus qu'à" écrire une macro qui doit faire les choses suivantes :
1_ Chercher en colonne E toutes les cellules dont la valeur est différente de ""
2_ Sélectionner ces cellules (et seulement celles-ci)
3_ Copier-Coller en ne conservant que les valeurs.

Cette macro doit se lancer automatiquement avant fermeture du fichier.

Cela vous parait-il réalisable ?

Sinon je suis ouvert à toute autre suggestion pour récupérer automatiquement la date de saisie de chaque ligne du fichier.

En espérant avoir été suffisamment précis
Vous remerciant par avance du temps accordé :)

1 réponse

fabien25000 Messages postés 673 Date d'inscription mercredi 5 octobre 2016 Statut Membre Dernière intervention 28 juillet 2022 59
6 juin 2019 à 17:56
bonjour
peut être quelque chose comme ça qui inscrit la date sur une colonne donnée de la "feuille de suivi" chaque fois que quelque chose est inscrit dans une cellule de la colonne B de la feuille de l'opérateur:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim derlig As Long
If Not Intersect(Target, Range("B:B")) Is Nothing Then 'adapter la colonne de saisie
    If Worksheets("NOMDETAFEUILLE").Target <> "" Then
        derlig = Worksheets("NOMDETA2emeFEUILLE").Range("B" & Rows.Count).End(xlUp).Row 'remplacer "B" par la colonne qui t'interesse
        Worksheets("NOMDETA2emeFEUILLE").Range("B" & derlig).Value = Format(Now, "dd/mm/yyyy")
    End If
End If
End Sub 

je ne l'ai pas testé mais ça doit être bon
dis moi si ça te va
0
fabien25000 Messages postés 673 Date d'inscription mercredi 5 octobre 2016 Statut Membre Dernière intervention 28 juillet 2022 59
Modifié le 7 juin 2019 à 08:46
j'étais fatigué hier soir visiblement..
ça ira mieux comme ça :
Private Sub Worksheet_Change(ByVal Target As Range)
Dim derlig As Long
If Not Intersect(Target, Range("B:B")) Is Nothing Then 'adapter la colonne de saisie
    derlig = Worksheets("NOMDETA2emeFEUILLE").Range("B" & Rows.Count).End(xlUp).Row 'remplacer "B" par la colonne qui t'interesse
    Worksheets("NOMDETA2emeFEUILLE").Range("B" & derlig).Value = Format(Now, "dd/mm/yyyy")
End If
End Sub
0
Maouac Messages postés 2 Date d'inscription jeudi 6 juin 2019 Statut Membre Dernière intervention 13 juin 2019
13 juin 2019 à 17:38
Bonjour Fabien,

Tout d'abord merci pour tes réponses rapides !

Malheureusement ta macro n'a produit aucun effet chez moi, en même temps, étant totalement débutant ça m'a permis de creuser un peu ce qu'était un événement sous VBA en tant que condition de lancement d'une macro.

Je n'ai pas répondu avant car je n'avais pas d’éléments nouveaux à proposer.

Pour retour, j'ai creuser un peu de mon côté et j'ai finalement réussi à faire ce que je voulais faire (et même plus) avec la macro suivante (attention ce code contient surement de grosses aberrations dûes à mon niveau inexistant) :

Private Sub Worksheet_Change(ByVal Target As Range)
'Lorsqu'on change manuellement la valeur d'une cellule de la feuille "Saisie"
If Target.Column = 5 Then 'si la cellule changeant de valeur est sur la colonne "E" (hauteur)
    If Target.Cells.Count = 1 Then 'si une seule cellule est sélectionnée
    If Target.Value <> 0 Then 'si la valeur de la cellule sélectionnée (après le changement de valeur" est différent de 0
    Target.Offset(1, -3).Select 'sélectionner la cellule se trouvant à 1 ligne et -3 colones de distance de la cible
    Else: Exit Sub 'mais si la valeur de la cellule sélectionnée vaut 0, arrêter la macro
    End If
    End If
    End If
    If Target.Column <> 2 Then 'si la cellule changeant de valeur n'est pas sur la colonne "B" (Code à barre)
    Exit Sub 'alors fin de la macro
    Else 'sinon
    If Target.Cells.Count > 1 Then 'si le nombre de cellule selectionnée n'est pas supérieur à 1
    Exit Sub 'alors fin de la macro
    Else 'sinon
    If Target.Value <> 0 Then 'si la valeur imputée est différente de 0
    Target.Offset(0, 4).Select 'selectionner la cellule se trouvant à +4 colonnes "F" (Date)
    ActiveCell = "=Today()" 'fonction "=Aujourd'hui()" imputé dans la cellule
    Selection.Copy 'copier la celulle
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False 'coller les valeur (la date est maintenant écrite en dure)
        Application.CutCopyMode = False 'sortir du mode copier-coller
        ActiveCell.Offset(0, -3).Select 'Selectionner la cellule à -3 colonnes (Longueur)
   Else: Exit Sub 'mais si la valeur entrée est 0 (exemple : suppr sur la cellule), stoper la macro
    End If
    End If
    End If
End Sub
0