Création d'une macro excel



Bonjour à tous et à toutes,

J'ai besoin de votre aide, je suis une bille en macro et je souhaite réaliser un fichier excel qui je pense nécessite ce recours.

Je vous explique mon problème.

Je souhaite remplir différentes cellules de mon tableur automatiquement en utilisant un code chiffre.

La correspondance se fait sur une feuille située sur le même fichier (Elle est nommée Analyse). On retrouve sur celle-ci en colone A les numéros (servant de code) puis différents critères. La cellule comportant ce numéro peut être fusionnée pour renvoyer à 2, 3 ou 4 lignes différentes.

Ce que je souhaite c'est que quand je rentre dans la cellule Jn° de ma feuille Nommée DUAuto je puisse executer la marco qui détecte le N° code, puis insère le nombre de ligne suffisante, fusionne verticalement les cellules précédent la colone J Puis vienne Copier/Coller les différents critères correspondants à mes lignes de la feuille Analyse.

Je pense ensuite mettre un bouton d'action pour excuter la macro à partir de la cellule sélectionnée...

Ce problème à l'air trés clair pour moi, mais il l'est peut être moins pour vous!!
N'hésitez pas à me poser des questions si il manque des informations importantes.

Merci de votre aide .

M

6 réponses

  1. Alors je reprend,
    Oui c'est bien l'active cell du début, La valeur contenue dans cette cellule me permet de fixer le numéro ou chiffre à rechercher dans la colonne A de la feuille Analyse.

    Je vais voir avec tes nouvelles indications.

    Merci
    0
    1. Comme je le disais dnas le début de ma question,
      je suis vraiment un débutant en macro.

      J'ai beau rechercher sur d'autre forum j'arrive pas à faire ce que je veux...

      Comment on dit au "programe de retourner à la cellule initiale et de passer à la ligne suivante et d'y inserer nbrlign-1?
      0
      1. Modérateur
        Ou est ta cellule initiale? Qu'elle feuille? Quelle colonne, ligne?
        Je suppose qu'il s'agit de l'activecell du début :
        Sub test()
        Dim nbrlign, i, lign As Integer
        Dim c As Range
        'Mémoriser la Cellule de départ
        Dim valeur As String 'ou Long selon s'il s'agit de nombres ou de caractères
        valeur = ActiveCell.Value 'que l'on peux remplacer par : valeur = Sheets("NomDeLaFeuille").Range("A5").Value
        'rechercher la valeur dans le tableau colonne A
        With Worksheets("Analyse").Range("A1:A500")
        Set c = .Find(valeur, LookIn:=xlValues)
        'message d'erreur si le N° n'existe pas
        If c Is Nothing Then
        MsgBox "Ce N° n'existe pas!!!"
        'sortir de la procédure car le N° n'existe pas
        Exit Sub
        End If
        'compter le nombre de cellules fusionnées
        nbrlign = c.Offset(1, 0).Row - c.Row
        End With
        ActiveCell.Offset(1, 0).Activate
        lign = ActiveCell.Row
        For i = lign To lign + nbrlign - 2
        Cells(i, 1).EntireRow.Insert
        Next i
        ActiveCell.Offset(-1, 0).Activate
        Range(ActiveCell, ActiveCell.Offset(9, 0)).Merge
        End Sub

        Ne te reste qu'à copier coller les valeurs qui t'intéressent...
        0
    2. Sur le End Sub il me dit End With attendu
      0
      1. Modérateur
        oui ben faut le rajouter...
        Dim nbrlign As Integer
        Dim c As Range
        'Mémoriser la Cellule de départ
        Dim valeur As String 'ou Long selon s'il s'agit de nombres ou de caractères
        valeur = ActiveCell.Value 'que l'on peux remplacer par : valeur = Sheets("NomDeLaFeuille").Range("A5").Value
        'rechercher la valeur dans le tableau colonne A
        With Worksheets("Analyse").Range("A2:A500")
        Set c = .Find(valeur, LookIn:=xlValues)
        End With
        'message d'erreur si le N° n'existe pas
        If c Is Nothing Then
        MsgBox "Ce N° n'existe pas!!!"
        'sortir de la procédure car le N° n'existe pas
        Exit Sub
        End If
        'compter le nombre de cellules fusionnées
        nbrlign = c.Offset(1, 0).Row - c.Row
        End Sub
        0
    3. J'avance à taton mais pour le moment les résultats sont pas probants.
      J'ai pu redéfinir les étapes de la macro:
      1-mémoriser la cellule active.
      2-Rechercher dans la colonne A de la feuille Analyse le code numérique de la cellule active.
      3-Compter le nombre de ligne dans cette cellule (MERCI PIJAKU) (Dans le cas ou 3 Lignes)
      4- Toujours sur cette feuille Copier les cellules B, C, C+1, C+2
      5-revenir à la feuille d'origine
      6-Selectionner la cellule sous la cellule active d'origine.
      7-Inserer NbrLigne-1
      8-Coller les cellules copiées à l'etape 4 en colonne K, M, M+1 et M+2
      9-Fusionner verticalement les cellules (A:A+1:A+2) et(B:B+1:b+2) à (J:J+1:J+2)

      Pour le moment j'ai écrit ça mais ça bloque à "MsgBox". Pouvez vous me filer un coup de main?

      Sub TestMacro2()

      1: 'Mémoriser la Cellule de départ'
      Set Ici = ActiveCell
      2: 'rechercher la valeur de la ligne active'
      With Worksheets(Analyse).Range("a2:a500")
      Set c = .Find(ActiveCell, LookIn:=x1Values)
      If Not c Is MsgBox(Prompt, vbOKOnly, [Erreur], ["Ce N° n'existe pas!!!]) Then

      firstAddress = c.Address

      3: 'compter le nombre de cellule fusionnées'
      Dim nbrlign As Integer
      Dim c As Range
      Dim valeur As String
      valeur = c.Address
      With Sheets(1).Columns(1)
      Set c = .Cells.Find(valeur, LookIn:=xlValues)
      End With
      nbrlign = c.Offset(1, 0).Row - c.Row

      4: 'retourner à la cellule initiale'
      End Sub
      0
      1. Modérateur
        Bon ce code est à tester... :
         Sub test() 
        Dim nbrlign As Integer  
        Dim c As Range 
        'Mémoriser la Cellule de départ 
        Dim valeur As String 'ou Long selon s'il s'agit de nombres ou de caractères 
        valeur = ActiveCell.Value 'que l'on peux remplacer par : valeur = Sheets("NomDeLaFeuille").Range("A5").Value 
        'rechercher la valeur dans le tableau colonne A 
        With Worksheets("Analyse").Range("A2:A500")  
        Set c = .Find(valeur, LookIn:=xlValues) 
        'message d'erreur si le N° n'existe pas 
        If c Is Nothing Then  
        MsgBox "Ce N° n'existe pas!!!" 
        'sortir de la procédure car le N° n'existe pas 
        Exit Sub 
        End If 
        'compter le nombre de cellules fusionnées 
        nbrlign = c.Offset(1, 0).Row - c.Row 
        End Sub 
        
        0
    4. Modérateur
      Bonjour,
      calculer le nombre de lignes fusionnées :
      Dim nbrlign As Integer 
      Dim c As Range 
      Dim valeur As String 
      valeur = ActiveCell.Value 
      With Sheets(1).Columns(1) 
      set c= .Cells.Find(valeur,lookin:=xlValues) 
      End With 
      nbrlign = c.Offset(1, 0).Row - c.Row

      le nombre de lignes sera alors stocké dans la variable "nbrlign" que tu pourras utiliser pour insérer nbrlign-1 dans l'autre feuille.
      Cordialement,
      -- Tout problème à sa solution. S'il n'y a pas de solution, ou est le problème? --
      0
      1. J'ai commencé à fouiller de mon coté.
        Pour chercher la valeur dans ma feuille Analyse j'utilise la fonction set c= find(activecell,lookin:=x1Values)

        Une fois que la cellule correspondnate au critère numérique est localisée je veux ensuite compter le nombre de ligne contenues dans cette cellule (Car des cellules fusionnées).

        Ensuite nommer la valeur trouvée K, pour ensuite retourner sur l'autre feuille et inserer K-1 ligne à la suite de la cellule Jn°

        Quelqu'un à une idée?

        Merci
        0