1. Ce site utilise des "témoins de connexion" (cookies) conformes aux textes de l'Union Européenne. Continuer à naviguer sur nos pages vaut acceptation de notre règlement en la matière. En savoir plus.

Créer un macro pour une recherche V

Discussion dans 'Forum Excel' démarrée par Aimy67, 14 Septembre 2018.

  1. Aimy67

    Aimy67 XLDnaute Nouveau

    Inscrit depuis le :
    7 Août 2018
    Messages :
    30
    "J'aime" reçus :
    0
    Sexe :
    Féminin
    Utilise:
    Excel 2010 (PC)
    Bonjour,

    Je débute en macro et j'ai besoin de votre aide.

    Je souhaite automatiser une recherche V via une macro mais ça ne fonctionne pas via l'enregistreur.

    J'ai deux onglets dans mon tableau un onglet BASE que j'alimente via une recherche V des données que j'exporte d'un logiciel et copie dans l'onglet 'Données mensuelles".
    Je dois chaque mois effectuer cette opération.

    Dans le fichier joint, je souhaite compléter le mois de juin via une recherche V. Je veux compléter les colonnes I, V, AD, AL, AT et BB en reprenant les informations qui figurent dans l'onglet données mensuelles en colonne D à I. J'étant la formule à toutes la colonne et copie colle au format texte le résultat.

    Mon bouton de déclenchement de la macro s'intitule juin et est situé dans l'onglet Données mensuelles.

    Je souhaite reproduire cette macro pour chaque mois en créant un bouton par mois. En juillet les colonnes à compléter seront J, W, AE, AM, AU, BC. (Peut être est il même possible de ne faire qu'une macro et pas une pour chaque mois).

    Pouvez vous m'aider à faire cela.

    Merci beaucoup pour ceux qui prendront le temps de se pencher sur cette demande.
     

    Pièces jointes:

  2. Chargement...

    Discussions similaires - Créer macro recherche Forum Date
    créer un moteur de recherche avec une macro Forum Excel 15 Mars 2016
    Créer une macro avec condition, recherche ou trouver, perdue Forum Excel 4 Juillet 2015
    VBA - créer macro de recherche à partir d'une valeur de cellule susceptible de change Forum Excel 14 Août 2014
    Creer macro de recherche avancee Forum Excel 11 Août 2011
    Recherche macro pour créer des cases à cocher automatiquement Forum Excel 15 Août 2009

  3. job75

    job75 XLDnaute Barbatruc

    Inscrit depuis le :
    15 Mai 2008
    Messages :
    25464
    "J'aime" reçus :
    2117
    Sexe :
    Masculin
    Habite à:
    Paris
    Utilise:
    Excel 2013 (PC)
    Bonjour Aimy67, JB,

    Très bizarre JB que tu utilises Copy/PasteSpecial.

    Et l'AutoFill est bien inutile, perso j'aurais écrit :
    Code (Text):
    Sub essai()
        décal = 2
        mois = Month(Range("zone").Item(1, 3))
        Set f = Sheets(1)
        taille = f.[A65000].End(xlUp).Row - 1
        With f.Cells(2, mois + décal).Resize(taille)
            .Formula = "=vlookup(A2,zone,4,false)"
            .Value = .Value
        End With
    End Sub
    A+
     
  4. Aimy67

    Aimy67 XLDnaute Nouveau

    Inscrit depuis le :
    7 Août 2018
    Messages :
    30
    "J'aime" reçus :
    0
    Sexe :
    Féminin
    Utilise:
    Excel 2010 (PC)
    Bonjour,

    Je vous remercie pour votre aide, je viens de tester à mon arrivée au bureau mais cela ne fonctionne pas j'ai une erreur au niveau de la seconde ligne qui me dit :

    La méthode Range de l'objet _Global a échoué

    Je ne sais pas comment rectifier cela, pouvez vous m'aider.

    Merci d'avance
     
  5. job75

    job75 XLDnaute Barbatruc

    Inscrit depuis le :
    15 Mai 2008
    Messages :
    25464
    "J'aime" reçus :
    2117
    Sexe :
    Masculin
    Habite à:
    Paris
    Utilise:
    Excel 2013 (PC)
    Bonjour Aimy67,

    Bien sûr il faut définir le nom zone ='Données mensuelles'!$A$2:$D$813 voyez le fichier joint.

    A+
     

    Pièces jointes:

    Aimy67 aime votre message.
  6. Aimy67

    Aimy67 XLDnaute Nouveau

    Inscrit depuis le :
    7 Août 2018
    Messages :
    30
    "J'aime" reçus :
    0
    Sexe :
    Féminin
    Utilise:
    Excel 2010 (PC)
    Merci beaucoup cela marche parfaitement.

    Par contre, je souhaite recopier cette macro pour faire la même chose pour les autres indicateurs. J'ai modifié dans le code les éléments de la recherche V mais je ne sait pas ce que je dois modifier d'autre pour que la nouvelle macro s'applique cette fois ci pour les RCN en colonne U.

    Code :
    Sub Transfert_RCN()
    '
    ' Transfert_RCN Macro
    '
    décal = 2
    mois = Month(Range("zone").Item(1, 3))
    Set f = Sheets(1)
    taille = f.[A65000].End(xlUp).Row - 1
    With f.Cells(2, mois + décal).Resize(taille)
    .Formula = "=vlookup(A2,zone,5,false)"
    .Value = .Value
    End With
    End Sub

    Pouvez vous m'expliquer que je comprenne comment la modifier et que je puisse ainsi l'appliquer pour d'autres choses.

    Merci de votre patience et de votre aide.
     
  7. job75

    job75 XLDnaute Barbatruc

    Inscrit depuis le :
    15 Mai 2008
    Messages :
    25464
    "J'aime" reçus :
    2117
    Sexe :
    Masculin
    Habite à:
    Paris
    Utilise:
    Excel 2013 (PC)
    Re,

    Pour traiter les 6 colonnes RC-RCN-CHAB-RCR-PI-HA il faut une boucle :
    Code (Text):
    Sub essai()
    Dim décal%, mois%, f As Worksheet, taille&, i%
    décal = 2
    mois = Month(Range("zone").Item(1, 3))
    Set f = Sheets(1)
    taille = f.[A65000].End(xlUp).Row - 1
    For i = 0 To 5
        With f.Cells(2, mois + décal).Resize(taille).Offset(, 13 * i)
            .Formula = "=vlookup(A2,zone," & 4 + i & ",false)"
            .Value = .Value
        End With
    Next
    End Sub
    Le nom zone est défini par ='Données mensuelles'!$A$2:$K$813.

    Fichier (2).

    A+
     

    Pièces jointes:

  8. Aimy67

    Aimy67 XLDnaute Nouveau

    Inscrit depuis le :
    7 Août 2018
    Messages :
    30
    "J'aime" reçus :
    0
    Sexe :
    Féminin
    Utilise:
    Excel 2010 (PC)
    Merci beaucoup ça marche parfaitement et je pense pouvoir réadapter cela à d'autres fichiers.

    J'ose pousser un peu plus loin est ce que vous pourriez m'aider pour également faire en sorte que la formule d'écart se mette à jour automatiquement en fonction des deux dernières colonnes complétées.

    Merci beaucoup pour votre aide précieuse, je vais gagner énormément de temps et j'espère réussir à reproduire cela.
     
  9. job75

    job75 XLDnaute Barbatruc

    Inscrit depuis le :
    15 Mai 2008
    Messages :
    25464
    "J'aime" reçus :
    2117
    Sexe :
    Masculin
    Habite à:
    Paris
    Utilise:
    Excel 2013 (PC)
    Re,
    En BASE!O2 formule matricielle à valider par Ctrl+Maj+Entrée :
    Code (Text):
    =SIERREUR(INDEX($A2:N2;GRANDE.VALEUR(SI(C2:N2<>"";COLONNE(C2:N2));1))-INDEX($A2:N2;GRANDE.VALEUR(SI(C2:N2<>"";COLONNE(C2:N2));2));"")
    A tirer vers la bas et copier-coller sur les autres colonnes.

    Fichier (3).

    A+
     

    Pièces jointes:

  10. Aimy67

    Aimy67 XLDnaute Nouveau

    Inscrit depuis le :
    7 Août 2018
    Messages :
    30
    "J'aime" reçus :
    0
    Sexe :
    Féminin
    Utilise:
    Excel 2010 (PC)
    Merci infiniment pour votre aide ! :)
     
  11. BOISGONTIER

    BOISGONTIER XLDnaute Barbatruc

    Inscrit depuis le :
    28 Septembre 2007
    Messages :
    7022
    "J'aime" reçus :
    463
    Habite à:
    Montigny
    Page d'accueil :
    Utilise:
    Excel 2003 (PC)
    Bonjour,

    Sans formules

    Code (Text):
    Sub MajMoisEnCours()
       Set f = Sheets(1): Set f2 = Sheets(2)
       Set RngMensuel = f2.Range("A2:I" & f2.[A65000].End(xlUp).Row)
       Mois = Month(RngMensuel.Item(1, 3))
       Taille = f.[A65000].End(xlUp).Row - 1
       For col = 1 To 6
         With f.Cells(2, Mois + 2 + (col - 1) * 13).Resize(Taille)
          .Formula = "=vlookup(a2,'" & f2.Name & "'!" & RngMensuel.Address & "," & 3 + col & ",False)"
          .Value = .Value
         End With
         '---écarts
         a = f.Cells(2, Mois + 1 + (col - 1) * 13).Resize(Taille).Value
         b = f.Cells(2, Mois + 2 + (col - 1) * 13).Resize(Taille).Value
         Set RngEcart = f.Cells(2, "O").Offset(, (col - 1) * 13).Resize(Taille)
         For i = 1 To Taille
           If Not IsNumeric(a(i, 1)) Then a(i, 1) = 0
           RngEcart.Item(i, 1) = b(i, 1) - a(i, 1)
         Next i
       Next col
    End Sub
     
    Boisgontier
    http://boisgontierjacques.free.fr
     

    Pièces jointes:

    Dernière édition: 18 Septembre 2018
  12. job75

    job75 XLDnaute Barbatruc

    Inscrit depuis le :
    15 Mai 2008
    Messages :
    25464
    "J'aime" reçus :
    2117
    Sexe :
    Masculin
    Habite à:
    Paris
    Utilise:
    Excel 2013 (PC)
    Bonjour JB,

    Attention : pour le mois de mai ton code ne renseigne pas les colonnes T-AG-AT-BG-BT de la feuille "BASE".

    A+
     
  13. job75

    job75 XLDnaute Barbatruc

    Inscrit depuis le :
    15 Mai 2008
    Messages :
    25464
    "J'aime" reçus :
    2117
    Sexe :
    Masculin
    Habite à:
    Paris
    Utilise:
    Excel 2013 (PC)
    Re,

    Ci-joint le fichier (4) si l'on veut éviter les formules matricielles des écarts :
    Code (Text):
    Sub Transfert_mois()
    Dim décal%, mois%, f As Worksheet, taille&, i%, ecart As Range, P As Range, c1 As Range, c2 As Range
    décal = 2
    [A1].CurrentRegion.Name = "zone" 'plage nommée
    mois = Month(Range("zone").Item(2, 3))
    Set f = Sheets(1)
    taille = f.Range("A" & f.Rows.Count).End(xlUp).Row - 1
    If taille = 0 Then Exit Sub
    For i = 0 To 5
        With f.Cells(2, mois + décal).Resize(taille).Offset(, 13 * i)
            .Formula = "=vlookup(A2,zone," & 4 + i & ",false)"
            .Value = .Value 'supprime les formules
            Set ecart = .Offset(, 13 - mois)
            Set P = .Offset(, 1 - mois).Resize(, 12) 'plage de 12 mois
            Set c1 = P.Find("*", , xlValues, , xlByColumns, xlPrevious)
            If c1 Is Nothing Then
                ecart.ClearContents
            ElseIf c1.Column = P.Column Then
                ecart.ClearContents
            Else
                Set c2 = P.Find("*", f.Cells(2, c1.Column), xlValues, , xlByColumns, xlPrevious)
                If c2.Column = c1.Column Then
                    ecart.ClearContents
                Else
                    ecart = "=" & f.Cells(2, c1.Column).Address(0, 0) & "-" & f.Cells(2, c2.Column).Address(0, 0)
                    ecart = ecart.Value 'supprime les formules
                End If
            End If
        End With
    Next
    End Sub
    Nota : par formule ou par VBA l'écart est toujours calculé entre les 2 derniers mois renseignés.

    A+
     

    Pièces jointes:

    Dernière édition: 18 Septembre 2018
  14. Aimy67

    Aimy67 XLDnaute Nouveau

    Inscrit depuis le :
    7 Août 2018
    Messages :
    30
    "J'aime" reçus :
    0
    Sexe :
    Féminin
    Utilise:
    Excel 2010 (PC)
    Merci beaucoup cela marche également parfaitement et évite les formules.
     

Partager cette page