Créer un macro pour une recherche V

Aimy67

XLDnaute Nouveau
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.
 

Fichiers joints

job75

XLDnaute Barbatruc
Bonjour Aimy67, JB,

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

Et l'AutoFill est bien inutile, perso j'aurais écrit :
Code:
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+
 

Aimy67

XLDnaute Nouveau
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
 

Aimy67

XLDnaute Nouveau
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.
 

job75

XLDnaute Barbatruc
Re,

Pour traiter les 6 colonnes RC-RCN-CHAB-RCR-PI-HA il faut une boucle :
Code:
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+
 

Fichiers joints

Aimy67

XLDnaute Nouveau
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.
 

job75

XLDnaute Barbatruc
Re,
faire en sorte que la formule d'écart se mette à jour automatiquement
En BASE!O2 formule matricielle à valider par Ctrl+Maj+Entrée :
Code:
=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+
 

Fichiers joints

BOISGONTIER

XLDnaute Barbatruc
Bonjour,

Sans formules

Code:
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
 

Fichiers joints

Dernière édition:

job75

XLDnaute Barbatruc
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+
 

job75

XLDnaute Barbatruc
Re,

Ci-joint le fichier (4) si l'on veut éviter les formules matricielles des écarts :
Code:
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+
 

Fichiers joints

Dernière édition:

Discussions similaires


Haut Bas