Formule ,macro??

Résolu/Fermé
xav37300 Messages postés 46 Date d'inscription mercredi 18 décembre 2013 Statut Membre Dernière intervention 4 septembre 2019 - 28 janv. 2014 à 17:43
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 - 29 janv. 2014 à 10:36
Bonjour,

J'aurais besoin de votre aide afin de gagner du tps sur un fichier. En effet,je voudrais automatiser une donnée afin que celle ci s'ajoute directement.
Je vous fais suivre le fichier afin que cela soit plus explicite (il s'agit juste d'une partie )

https://www.cjoint.com/?DACrQW9f0pK


Merci de votre aide

2 réponses

eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 250
28 janv. 2014 à 18:01
Bonjour,

une possibilité :
Sub completeCol()
    Dim c As Range
    For Each c In Selection
        If c = "" Then c = c.Offset(-1)
    Next c
End Sub 

Sélectionner la plage à compléter et lancer la macro.

eric
0
xav37300 Messages postés 46 Date d'inscription mercredi 18 décembre 2013 Statut Membre Dernière intervention 4 septembre 2019
28 janv. 2014 à 18:59
Merci beaucoup cela fonctionne tres bien
Par contre il n'est pas possible d'ajouter la colonne (avec ligne début tableau jusqu'à dernière linge) dans la macro sans avoir à la sélectionner?
Je sais j'en demande bcp!!!

Mais merci qd même
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 250
28 janv. 2014 à 20:08
Oui c'est possible, en supposant que ton tableau démarre en ligne 7 :
Sub completeCol()
Dim c As Range
Application.ScreenUpdating = False
For Each c In [A7].Resize(Cells(Rows.Count, 2).End(xlUp).Row - 6)
If c = "" Then c = c.Offset(-1)
Next c
End Sub
Je me base sur la colonne Date pour détecter la dernière ligne. Elle est sensée être remplie jusqu'au bout.
Si tu as beaucoup de lignes (plusieurs milliers) et que c'est à faire régulièrement on peut faire plus rapide.

eric
0
xav37300 Messages postés 46 Date d'inscription mercredi 18 décembre 2013 Statut Membre Dernière intervention 4 septembre 2019
29 janv. 2014 à 08:36
Merci beaucoup Eric
Par contre tu dis que l'on peut faire plus rapide cela m'intéresse!
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 250
29 janv. 2014 à 09:38
Bonjour,

combien de lignes as-tu ?
Sur mon micro, qui n'est pas récent, ça prend 1.2s pour 6500 lignes, pas le temps de prendre un café...
Mais bon, on va dire que c'est pour l'exercice :
Sub completeCol()
Dim t As Single
Dim derlig As Long, lig As Long, data As Variant
't = Timer
Application.ScreenUpdating = False
derlig = Cells(Rows.Count, 2).End(xlUp).Row
data = [A7].Resize(derlig - 6, 1)
For lig = 1 To UBound(data)
If data(lig, 1) = "" Then data(lig, 1) = data(lig - 1, 1)
Next lig
[A7].Resize(UBound(data), UBound(data, 2)) = data
Application.ScreenUpdating = True
'MsgBox Timer - t
End Sub
Toujours pour 6500 lignes on passe à 0.055s (x22)

eric
0
xav37300 Messages postés 46 Date d'inscription mercredi 18 décembre 2013 Statut Membre Dernière intervention 4 septembre 2019
29 janv. 2014 à 09:55
Merci eric c'est super tout a fait ce que je voulais
0
PHILOU10120 Messages postés 6400 Date d'inscription lundi 16 avril 2012 Statut Contributeur Dernière intervention 17 janvier 2025 812
28 janv. 2014 à 18:02
Bonjour

Avec une formule en E7 mettre ceci et la tirer vers le bas avec la poignée de recopie

=SI(A7>0;A7;A6)
0
xav37300 Messages postés 46 Date d'inscription mercredi 18 décembre 2013 Statut Membre Dernière intervention 4 septembre 2019
28 janv. 2014 à 18:39
La formule fonctionne très bien s'il y a 2 tableaux or la, il n" y en a qu'un en fait le deuxième correspond au résultat que je voudrais obtenir
0