erreur formula

thyuki

XLDnaute Nouveau
bonjour à tous

j'essaie de faire une macro qui me permet de créer une nouvelle colonne pour le mois en cours en copiant la colonne à gauche (celle du mois précédent). puis je fais un rechercheV sur la cellule C de la ligne même ligne, sur la colonne G d'une autre feuille.

voici mon code:
Code:
Function MAJDispo()
'fonction pour l'onglet Dispo CR1
    
    'recherche de la dernière colonne non vide
    derniereColonne = Worksheets("Dispo CR1").Cells(1, Cells.Columns.Count).End(xlToLeft).Column
    nouvelleColonne = derniereColonne + 1
    
    'l'activation de l'onglet est nécessaire pour la bonne éxecution
    Worksheets("Dispo CR1").Activate
    
    'copie de la dernière colonne à coté
    Worksheets("Dispo CR1").Range(Cells(1, derniereColonne), Cells(60, derniereColonne)).Copy Worksheets("Dispo CR1").Cells(1, nouvelleColonne)

    'renommage au mois en cour
    Worksheets("Dispo CR1").Cells(1, nouvelleColonne).Value = Month(Date) & "/01/" & Year(Date)
    
    'recherche de la taille du tableau qui sert de matrice au rechercheV
    derniereLigne = Worksheets("log_Dispo").Range("A1").End(xlDown).Address
    derniereLigne = Worksheets("log_Dispo").Range(derniereLigne).Row
    derniereCol = Worksheets("log_Dispo").Cells(1, Cells.Columns.Count).End(xlToLeft).Column
    

    Worksheets("Dispo CR1").Range(Cells(2, nouvelleColonne)).Formula = "=RECHERCHEV($C2;log_Dispo!$A$1:" &_ Cells(derniereLigne, derniereCol).Address & ";7;FAUX)"

Et comme d'hab' j'ai une erreur 1004 erreur défini par l'application ou par l'objet sur la dernière ligne de code.

Pouvez-vous me dire ou cela bloque car là je ne comprends pas je veux juste affecter une formule a une cellule, pour ensuite l'étendre a tout mon tableau
 
C

Compte Supprimé 979

Guest
Re : erreur formula

Bonjour le fil
Maitre PJ

Tu peux également changer ton code de la façon suivante ;)
Code:
' fonction pour l'onglet Dispo CR1
Function MAJDispo()
  'recherche de la dernière colonne non vide
  With Sheets("Dispo CR1")
    ' l'activation de l'onglet est nécessaire pour la bonne éxecution : NON pas forcément
    '.Activate
    derniereColonne = .Cells(1, Cells.Columns.Count).End(xlToLeft).Column
    nouvelleColonne = derniereColonne + 1
    'copie de la dernière colonne à coté
    .Range(.Cells(1, derniereColonne), .Cells(60, derniereColonne)).Copy Destination:=.Cells(1, nouvelleColonne)
    'renommage au mois en cour
    .Cells(1, nouvelleColonne).Value = Month(Date) & "/01/" & Year(Date)
  End With
  With Sheets("log_Dispo")
    'recherche de la taille du tableau qui sert de matrice au rechercheV
    derniereLigne = .Range("A1").End(xlDown).Row
    derniereCol = .Cells(1, .Cells.Columns.Count).End(xlToLeft).Column
  End With
  With Sheets("Dispo CR1")
    .Range(Cells(2, nouvelleColonne)).FormulaLocal = "=RECHERCHEV($C2;log_Dispo!$A$1:" & Cells(derniereLigne, derniereCol).Address & ";7;FAUX)"
  End With
End Sub

A+
 

thyuki

XLDnaute Nouveau
Re : erreur formula

merci pour l'idée de la mise en page, je suis pas encore familier des with.

Malheureusement l'erreur persiste,toujours sur la même ligne.


Et pour mon information, quel est la différence entre formula et formulaLocal ?
 

Theze

XLDnaute Occasionnel
Re : erreur formula

Bonjour,

Déjà, la première chose à faire est de faire une sub et non une fonction, une fonction retourne une valeur ou un tableau de valeurs mais n'exécute pas des commandes.
Pour ta formule, utilise VLOOKUP avec Formula et bien sur des virgules en lieu et place des points-virgules :
Code:
Worksheets("Dispo CR1").Cells(2, nouvelleColonne).Formula = "=VLOOKUP($C2,log_Dispo!$A$1:" & Cells(derniereLigne, derniereCol).Address & ",7,False)"

Hervé.
 

pierrejean

XLDnaute Barbatruc
Re : erreur formula

Re

Salut ami Bruno :) :)
Salut Theze (suis tout à fait d'accord)

Avec formula il faut ecrire les noms de formule in english , avec formulaLocal il faut ecrire dans la langue de l'Excel installé

Pour debuguer , je crains que le fichier (ou une copie eventuellement epurée ) ne soit necessaire
 

Theze

XLDnaute Occasionnel
Re : erreur formula

Re,

Il te faut virer le Range :
Code:
.Cells(2, nouvelleColonne).FormulaLocal = "=RECHERCHEV($C2;log_Dispo!$A$1:" & Cells(derniereLigne, derniereCol).Address & ";7;FAUX)"
et non :
Code:
.Range(Cells(2, nouvelleColonne)).FormulaLocal = "=RECHERCHEV($C2;log_Dispo!$A$1:" & Cells(derniereLigne, derniereCol).Address & ";7;FAUX)"

Hervé.