MA MACRO

Résolu/Fermé
jeandchanel Messages postés 135 Date d'inscription vendredi 10 juin 2016 Statut Membre Dernière intervention 31 mai 2017 - 26 déc. 2016 à 10:44
jeandchanel Messages postés 135 Date d'inscription vendredi 10 juin 2016 Statut Membre Dernière intervention 31 mai 2017 - 30 déc. 2016 à 13:35
Salut a tous,

Je voudrais écrire une macro qui insert une cellule vide après chaque groupe d'article. En fait dans chaque cellule un article est répété plusieurs fois(bonbon, chocolat, biscuit etc...) voici ma macro qui ne fonctionne pas correctement :

Sub variables()
'Declaration des variables
Dim nbLignes As Integer, critere As String
'Attribution des valeurs
critere = "bonbons"
nbLignes = WorksheetFunction.CountIf(Range("A1:A19"), critere)
'Utilisation de la condition
Do
If critere = "bonbons" Then
nbLignes = WorksheetFunction.CountIf(Range("A1:A19"), critere)
Cells(nbLignes + 1, 1).Insert
ElseIf critere <> "bonbons" Then
nbLignes = WorksheetFunction.CountIf(Range("A1:A19"), critere)
Cells(nbLignes + 1, 1).Insert
   End If
   
   Loop While critere <> "bonbons"
   
End Sub
A voir également:

4 réponses

ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
Modifié par ThauTheme le 26/12/2016 à 11:32
Bonjour Jean, bonjour le forum,

Peut-être comme ça :

Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)

Set O = Worksheets("Feuil1") 'définit l'onglet O (à adapter à ton cas)
TV = O.Range("A1").CurrentRegion 'définit le tableau des valeur TV
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For I = 2 To UBound(TV, 1) - 1 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde et sans la dernière)
    If TV(I + 1, 1) <> TV(I, 1) Then 'condition : si la donnée en ligne I + 1 est différente que la donnée en ligne I (dans la colonne 1)
        ReDim Preserve TL(J) 'redimensionne le tableau des lignes TL
        TL(J) = I + 1 'stocke le numéro de ligne I + 1
        J = J + 1 'incrémente J
    End If 'fin de la condition
Next I 'prochaine ligne de la boucle
For J = UBound(TL) To LBound(TL) Step -1 'boucle inversée sur tous les éléments J du tableau des lignes TL
    O.Rows(TL(J)).Insert shift:=xlShiftDown 'insère une ligne avant la ligne de l'élément J de TL
Next J 'prochain élément de la boucle
End Sub

À plus,
ThauTheme
0
jeandchanel Messages postés 135 Date d'inscription vendredi 10 juin 2016 Statut Membre Dernière intervention 31 mai 2017
26 déc. 2016 à 11:53
Bonjour et Merci pour votre aide si précieuse. Je suis un vrai débutant en VBA et j’espère qu'avec votre aide je pourrais me perfectionner.
0
jeandchanel Messages postés 135 Date d'inscription vendredi 10 juin 2016 Statut Membre Dernière intervention 31 mai 2017
26 déc. 2016 à 12:31
Salut Ça marche pour le cas ou les cellules contiennent un seul mot (ex: bonbon) mais pour les désignations comme : ABATTANT WC BLANC LOURD ca ne fonctionne pas.
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160 > jeandchanel Messages postés 135 Date d'inscription vendredi 10 juin 2016 Statut Membre Dernière intervention 31 mai 2017
26 déc. 2016 à 13:26
Re,

Fais l'effort de fournir un fichier, on perdra moins de temps. Regarde du coté de https://www.cjoint.com/ par exemple...
0
jeandchanel Messages postés 135 Date d'inscription vendredi 10 juin 2016 Statut Membre Dernière intervention 31 mai 2017 > ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022
26 déc. 2016 à 13:57
voici le lien : https://www.cjoint.com/c/FLAm3jJxJmL

il s’agit pour moi d’écrire une macro qui va m'aider a regrouper les articles par "famille"
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160 > jeandchanel Messages postés 135 Date d'inscription vendredi 10 juin 2016 Statut Membre Dernière intervention 31 mai 2017
26 déc. 2016 à 14:20
Ton exemple n'a rien à voir avec tes explications. Désolé mais je passe la main. Trop compliqué pour moi...
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 779
26 déc. 2016 à 16:09
Bonjour,

Quel est l'objectif recherché, pourquoi détruire la base de données en y insérant des lignes ?
0
jeandchanel Messages postés 135 Date d'inscription vendredi 10 juin 2016 Statut Membre Dernière intervention 31 mai 2017
27 déc. 2016 à 07:54
Salut Patrice, l'objectif recherchée est le suivant, je voudrais écrire une macro qui va me permettre de séparer (inserer une ligne) une liste d'article en les regroupant par famille.
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 779 > jeandchanel Messages postés 135 Date d'inscription vendredi 10 juin 2016 Statut Membre Dernière intervention 31 mai 2017
27 déc. 2016 à 08:12
Ça, je l''avais bien compris, mais ce n'est pas un objectif, dans quel but fais-tu ça ?
Sachant que ça aura pour effet de détruire la cohérence de ta base de données, ne serait-t-il pas préférable de travailler dans un autre onglet ?
0
jeandchanel Messages postés 135 Date d'inscription vendredi 10 juin 2016 Statut Membre Dernière intervention 31 mai 2017 > Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023
27 déc. 2016 à 08:38
Patrice, il ne s’agit pas d'une base de données, je voudrais simplement automatisée une tache que j'ai l'habitude de faire manuellement pour gagner du temps. En fait le but est de faire des régularisations de stock. C'est un document d'inventaire.
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 779
Modifié par Patrice33740 le 27/12/2016 à 08:42
Un exemple de différentiation par MFC, sans macro et sans insérer de ligne supplémentaire :
https://www.cjoint.com/c/FLBhPQoyNC1
Cordialement
Patrice
0
jeandchanel Messages postés 135 Date d'inscription vendredi 10 juin 2016 Statut Membre Dernière intervention 31 mai 2017
27 déc. 2016 à 09:19
Voici un exemple du résultat recherché dans l'onglet (Feuil2) :
https://www.cjoint.com/c/FLBirpP5OAL
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 779
27 déc. 2016 à 15:04
Re,


Donc l'objectif c'est de pouvoir faire des sous-totaux par famille !
Excel sait faire ça tout seul sans macro !

Par contre que ce soit avec une macro ou sans, il faut pouvoir identifier les familles.
Au vu de ton exemple, il s'avère que la méthode que tu envisageais (avec des mots clés) ne peut pas fonctionner. Le fichier MFC que je t'ai envoyé, montre les limites de cette méthode (que ce soit par formule ou par macro).


Le plus simple est d'ajouter une colonne qui identifie les familles. Dans ce cas il suffira de demander à Excel des sous-totaux.
0
jeandchanel Messages postés 135 Date d'inscription vendredi 10 juin 2016 Statut Membre Dernière intervention 31 mai 2017
Modifié par jeandchanel le 29/12/2016 à 08:53
Bonjour Patrice, la methode des Sous-totaux ne marche pas. voici un apercu du resultat obtenu dans le fichier ci-joint (onglet Feuil3) :
https://www.cjoint.com/c/FLDhXmkfobL
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 779
29 déc. 2016 à 09:48
Bonjour,

La méthode fonctionne si tu fait ce que j'ai écrit :
Le plus simple est d'ajouter une colonne qui identifie les familles. Dans ce cas il suffira de demander à Excel des sous-totaux.

Par exemple :
https://www.cjoint.com/c/FLDiUNVfEj1

Patrice
0
jeandchanel Messages postés 135 Date d'inscription vendredi 10 juin 2016 Statut Membre Dernière intervention 31 mai 2017 > Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023
29 déc. 2016 à 13:04
Bonjour,

Effectivement ça marche, merci beaucoup. J'ai un autre soucis, je voudrais que vous m'expliquiez un peu la formule que vous avez tapé dans l'onglet Feuil1 colonne K, elle pourra m’être très utile.
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 779
29 déc. 2016 à 20:27
Bonjour,

Dans la formule, la partie :
GAUCHE($B3;CHERCHE(" ";$B3&" "))

permet d'extraire le premier mot du texte de la cellule B3. C'est à dire depuis le début du texte jusqu'au premier espace, ou jusqu’à la fin si il n'y a pas d'espace dans le texte

Donc :
GAUCHE($B3;CHERCHE(" ";$B3&" "))=GAUCHE($B2;CHERCHE(" ";$B2&" "))
permet de comparer le premier mot de B3 avec le premier mot de B4

La partie :
N(K2)
donne la valeur du nombre situé dans la cellule précédente K2. Si la cellule contient du texte le résultat de N(K2) est 0.

La formule complète : Si le premier mot de la cellule précédente de la colonne désignation est égal au premier mot de la cellule de la colonne désignation, alors, le résultat est le même que celui de la cellule résultat précédente, sinon le résultat est égal au résultat de la cellule précédente + 1.

Quand à la formule de la MFC :
=MOD($K3;2)=0
elle es VRAI quand le reste de la division par 2 du nombre en K3 esr égal à 0, c'est a dire que la MFC apparaît pour tous les nombres pairs de la colonne K.

Patrice
0
jeandchanel Messages postés 135 Date d'inscription vendredi 10 juin 2016 Statut Membre Dernière intervention 31 mai 2017 > Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023
30 déc. 2016 à 13:35
Merci pour toutes vos explications . A bientot !
0