VBA / Générer un inventaire ignorer les cellules vides

topap

XLDnaute Nouveau
Bonjour, ça fait un petit moment que je cherche, mais mes compétences en VBA sont encore novices...

Mon problème : J'ai une base de données de stock géré par des userform pour les opérateurs toutes ma programmation est donc réalisée en fonction d'une organisation des cellules bien définie et donc non modifiable, toutes les références possible sont listées dans le classeur mais les stocks sont parfois à nul.
Quand vient la date de l'inventaire annuel je voudrais qu'en cliquant sur le bouton 'inventaire' la liste des stock se génère automatiquement et soit prête à l'impression.

Je ne sais même pas par où commencer !
Dois-je rechercher les cases non-vide, puis récupérer les valeurs de la ligne puis copy/paste ?
Ou existe t'il un genre de tableau croisé dynamique en VBA ?

Enfin... je vous joint un exemple extrêmement simplifié de ce que je voudrais réaliser. J'espère que vous saurez me débloquer et j'espère être assez clair dans ma demande !

Merci d'avance pour votre aide !
 

Pièces jointes

  • test inventaire.xlsx
    15.1 KB · Affichages: 39
  • test inventaire.xlsx
    15.1 KB · Affichages: 55

jp14

XLDnaute Barbatruc
Re : VBA / Générer un inventaire ignorer les cellules vides

Bonjour

Ci joint un code pour supprimer les lignes vides.

Code:
Option Explicit
Sub essai()
Select Case MsgBox("La procédure va supprimer des données" _
                   & vbCrLf & "" _
                   & vbCrLf & "Voulez vous continuer" _
                   , vbYesNo Or vbExclamation Or vbDefaultButton1, "Attention")

    Case vbYes
        
    Case vbNo
        Exit Sub
End Select
Suprimer2 ("Feuil2")
End Sub

Sub Suprimer2(Nomfeuille1 As String)
Dim Cel1 As Range, Cellule1 As Range
Dim S1 As Worksheet
Dim Li1 As Long, Li2 As Long, col1 As String

col1 = "a"
If Nomfeuille1 <> "" Then
    With Worksheets(Nomfeuille1)
    'suppression des lignes
    For Each Cellule1 In .Range(col1 & "2:" & col1 & .Range(col1 & .Rows.Count).End(xlUp).Row)
        Set Cel1 = .Range("B" & Cellule1.Row & ":" & "G" & Cellule1.Row).SpecialCells(xlCellTypeBlanks)
          If Cel1.Count = 6 Then Cellule1 = ""
    Next Cellule1
    End With
    'suppression des lignes si la cellule de la colonne a est vide
        Set S1 = Worksheets(Nomfeuille1)
        Set Cel1 = S1.Range("a:a").SpecialCells(xlCellTypeBlanks) 'Cellules vides
        Cel1.EntireRow.Delete Shift:=xlUp
    ' suppression des lignes restantes
        Set Cel1 = S1.Range("a:a").SpecialCells(xlCellTypeBlanks)
        Li1 = Cel1.Row
        Set Cel1 = S1.Range("a:a").SpecialCells(xlCellTypeLastCell) 'Dernière cellule utilisée dans la plage 
        Li2 = Cel1.Row
        S1.Rows(Li1 & ":" & Li2).Delete Shift:=xlUp
End If
End Sub

Première partie
Recherche des lignes vides
Si la ligne est vide on efface la donnée dans la colonne A
Deuxième partie
On supprime les lignes qui nous n'ont pas de valeur dans A.

Macro à lancer que sur une copie des données.

A tester

JP
 
Dernière édition:

topap

XLDnaute Nouveau
Re : VBA / Générer un inventaire ignorer les cellules vides

Merci pour la réponse ! Cependant je cherche pas à supprimer les lignes vides mais juste à afficher celles qui ne le sont pas ! =)

Je ne dois pas supprimer les lignes car ce sont toutes les référence possible (plus de 400 références utilisée dans la combobox)

Pour être plus clair, j'aimerais simplement qu'il recherche là ou il y a des quantités de stock, et qu'il créé une ligne sur un autre tableau ou un autre onglet avec quantité trouvée, la référence correspondante et sa couleur. (Comme dans l'exemple que j'ai joint)
 

jp14

XLDnaute Barbatruc
Re : VBA / Générer un inventaire ignorer les cellules vides

Bonjour

En utilisant le code suivant, création d'une feuille et suppression des lignes vides.
L'avantage du système est sa rapidité, il n'y a pas de test.

https://www.excel-downloads.com/threads/aide-pour-optimisation-du-code-vba-resolu.20007060/

Code:
Sub essai()
 With Sheets("Feuil1")
        .Copy after:=Sheets(Sheets.Count)
  '      On Error GoTo PbNomFeuille
        ActiveSheet.Name = "EtatStoc" ' référence
  '
    End With

Suprimer2 ("EtatStoc")
End Sub

JP
 

topap

XLDnaute Nouveau
Re : VBA / Générer un inventaire ignorer les cellules vides

Ah oui ! Pas bête du tout en fait ;-) ça devrait marcher comme ça ! pourriez vous juste mettre un peu plus de comentaire d'explications dans les lignes de code afin que je puisse l'adapter à mon programme ? :) (j'aime bien comprendre ce que je fais pour éviter de poser 10 fois les memes question ^^)
 

jp14

XLDnaute Barbatruc
Re : VBA / Générer un inventaire ignorer les cellules vides

Bonjour topap



La procédure est basé sur le code SpecialCells(constantes) qui "Renvoie un objet Range qui représente toutes les cellules correspondant au type et à la valeur spécifiés" (Extrait de la documentation excel)

Cel1 = .Range("B" & Cellule1.Row & ":" & "G" & Cellule1.Row).SpecialCells(xlCellTypeBlanks)
Cel1 contient l'adresse de toutes les cases qui sont vides
Cel1.Count indique le nombre de cellule vide
Si le nombre de cellule vide est égal au nombre de colonnes utilisées alors je supprime la valeur dans la colonne A.

Set Cel1 = S1.Range("a:a").SpecialCells(xlCellTypeBlanks)
Cel1 contient toutes les cellules qui sont vides et Cel1.EntireRow.Delete Shift:=xlUp supprime toutes les lignes vides.

Set Cel1 = S1.Range("a:a").SpecialCells(xlCellTypeLastCell) Cel1 indique l'adresse de la dernière cellule, on peur utiliser ce code pour trouver la dernière ligne d'une colonne Li1 = Cel1.Row.

Set Cel1 = S1.Range("a:H").SpecialCells(xlCellTypeLastCell) dernière ligne d'un tableau Li1 = Cel1.Row

A tester


JP
 

Discussions similaires

Statistiques des forums

Discussions
314 628
Messages
2 111 337
Membres
111 107
dernier inscrit
cdel