Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

décaler seulement dans les cellule filtrées

  • Initiateur de la discussion Initiateur de la discussion clo2pla
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

C

clo2pla

Guest
Bonjour à tous, c'est ma premiére question. je n'est pas trouvé de poste de présentation, j'ai un petit niveau en VBA et je parcours le site depuis quelques jours mais je ne trouve pas mon bonheur donc j'attaque ma question.

aprés un flitre je voudrais copier une valeur dans un nombre de cellules superposés déterminé par le resultat d'une inputbox.

j'utilse le fonction offset et une boucle mais si les lignes ne sont pas consécutives ça ne fonctionne pas.

si joint un exemple :

on choisi en I2, aprés clic sur recherche

selection de la premiere cellule vide - si vous avez une solution pour y acceder directement aprés le filtre je suis preneur.🙂

au clic sur remplissage si les cellule se suivent c'est ok sinon ça ne fonctionne pas.

Claude
 

Pièces jointes

Re : décaler seulement dans les cellule filtrées

Bonjour,
selection de la premiere cellule vide - si vous avez une solution pour y acceder directement aprés le filtre je suis preneur.🙂
Vraiment loin d'être clair
Dans quelle colonne ?
Après le filtre, par définition, il n'y a pas de cellules vides, donc hormis d'en insérer de nouvelles
Copier quelles valeurs, dans quelles colonnes...
Sinon pour modifier la plage filtrée
Code:
Sub Macro9()
nB = Application.InputBox("Combien de reférence à entrer ?", Type:=1)
    If nB = "" Or nB = 0 Then Exit Sub
    ActiveSheet.AutoFilterMode = False
    Application.ScreenUpdating = False
    crit = Range("J2")
    Range("A4").AutoFilter Field:=7, Criteria1:="=" & crit
    With ActiveSheet.AutoFilter.Range
        Set rngFilter = .Offset(1, 0).Resize(.Rows.Count - 1, 1).SpecialCells(xlCellTypeVisible)
        x = rngFilter.Rows.Count
        If x < nB Then
            MsgBox "Nb trop important"
            ActiveSheet.AutoFilterMode = False
            Exit Sub
        End If
        For i = 1 To x
            Cells(rngFilter(i).Row, 8) = Range("I2")
        Next
    End With
    Application.ScreenUpdating = True
End Sub
A+
kjin
 
Re : décaler seulement dans les cellule filtrées

Effectivement mon message aurait dût être dans le Forum spécial Excel2007. est ce que l'on peut le déplacer ?

pour répondre à Kjin.

je vais essayer d'être plus clair

je selectionne "c" en I2 et je lance la recherche

j'obtient les lignes 5;6;7;22;24;26

ensuite je lance la macro remplissage des emplacements

si je mets 3 dans la box il faut que les cellules I5;I6;I7 soit rempli avec la valeur de I2 et les cellules J5;J6;J7 soit rempli avec la date du jour

si je mets 4 dans la box il faut que les cellules I5;I6;I7;I22 soit rempli avec la valeur de I2 et les cellules J5;J6;J7;J22 soit rempli avec la date du jour

merci

Claude
 
Re : décaler seulement dans les cellule filtrées

Re,
C'est très exactement ce que fait ma macro mais tu n'as sans doute pas testé 🙄
Note toutefois qu'il y a 2 erreurs, une de ma part (trompage sur le nb de ligne) et une de la tienne faute d'explication claire (colonne à modifier) et ajout de la date colonne J
Donc
Code:
Sub Macro9()
Nb = Application.InputBox("Combien de reférence à entrer ?", Type:=1)
    If Nb = "" Or Nb = 0 Then Exit Sub
    ActiveSheet.AutoFilterMode = False
    Application.ScreenUpdating = False
    crit = Range("J2")
    Range("A4").AutoFilter Field:=7, Criteria1:="=" & crit
    With ActiveSheet.AutoFilter.Range
        Set rngFilter = .Offset(1, 0).Resize(.Rows.Count - 1, 1).SpecialCells(xlCellTypeVisible)
        x = rngFilter.Rows.Count
        If x < Nb Then
            MsgBox "Nb trop important"
            Exit Sub
        End If
        For i = 1 To [COLOR="Red"]Nb[/COLOR]
            Cells(rngFilter(i).Row, [COLOR="Blue"]9[/COLOR]) = Range("I2")
            [COLOR="Blue"]Cells(rngFilter(i).Row, 10) = Date[/COLOR]
        Next
    End With
    Application.ScreenUpdating = False
End Sub
Note également que si tu entres un chiffre supérieur au nombre de ligne de la plage filtrée tu as droit à un message
Note que je ne sais pas si toutes les valeurs des colonnes I et J de la plage filtrée doivent être effacées au préalable, faute de précision de ta part.
Note enfin que j'ai testé sous 2000 sans pb et 2007 ne devrait pas poser de pb non plus
A+
kjin
 
Dernière édition:
Re : décaler seulement dans les cellule filtrées

bonjour kjin

j'avais tester ta premiere version mais effectivement j'ai encore oublié une précision importante

je ne veux mettre à jour que les lignes qui sont vides des colonnes I et J

quand les premieres lignes n'ont pas des numéros consécutifs je n'arrive pas à mettre à jour les cellules vides

j'essais d'être clair si aprés flitrage sur la colonne 7=J2 et colonne 9=vide j'obtien les lignes 5;6;9;10 et que je choisi 3 dans la imput box je met à jour les cellules des lignes 5;6;7 au lieu des cellules des ligne 5;6;9

j'ai essayé de modifier ton code en rajoutant un deuxieme filtre sur la colonne 9 en choississant seulement les cases vides. mais je n'arrive pas à le faire fonctionner.

merci

Claude
 
Re : décaler seulement dans les cellule filtrées

Bonsoir,
J'ai donc réadapté
J'ai également supprimer le msg : si le chiffre que tu as entré dans l'inputbox est supérieur au nb de cellules vides dans la plage filtrée (tu saisies 10 alors que 5 cellules seulement sont vides par exemple), c'est le nb de cellules vides qui sera retenu.
Code:
Sub Macro9()
nB = Application.InputBox("Combien de reférence à entrer ?", Type:=1)
    If nB = "" Or nB = 0 Then Exit Sub
    ActiveSheet.AutoFilterMode = False
    Application.ScreenUpdating = False
    crit = Range("J2")
    Range("A4").AutoFilter Field:=7, Criteria1:="=" & crit
    With ActiveSheet.AutoFilter.Range
        Set rngFilter = .Offset(1, 0).Resize(.Rows.Count - 1, 1).SpecialCells(xlCellTypeVisible)
        i = 1
        Do
            If IsEmpty(Cells(rngFilter(i).Row, 9)) Then
                Cells(rngFilter(i).Row, 9) = Range("I2")
                Cells(rngFilter(i).Row, 10) = Date
                j = j + 1
            End If
            i = i + 1
        Loop Until j = nB Or i = x
    End With
    Application.ScreenUpdating = False
End Sub
A+
kjin
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…