Erreur code : "Variable objet ou variable de bloc With non définie".

Marco56

XLDnaute Nouveau
Bonsoir,

Je souhaite développer une macro dont le but est de trouver la date dans une cellule de la feuille 2 et de la rechercher dans une ligne de la feuille 1 (cette feuille est un planning, donc il y a 7 cellules correspondant aux jours de la semaine). Cette valeur s'enregistre dans une variable et colle des données de la feuille 2 en feuille 1.

Voici le code :

HTML:
Sub Macro()

With Worksheets("Feuil1").Range("A2:Z2")
'Enregistrer dans une variable la date du jour.
Set datejour = Worksheets("Feuil2").Range("E4")
'Rechercher la date du jour dans la feuille Feuil2
Set datej = .Find(datejour, LookIn:=xlValues)
'Définir et enregistrer dans une variable le numéro de la ligne de la date trouvée dans la feuille Feuil2
Dim X As Integer
[COLOR="yellow"]X = datej.Column[/COLOR]
'Copier/Coller les données de la feuille 2 vers la feuille 1
Worksheets("Feuil2").Range("Q4:Q200").Copy
ActiveSheet.Paste Destination:=Worksheets("Feuil1").Range(.Cells(4, X + 1), .Cells(200, X + 1))

End With
End Sub

Cependant l'erreur "Variable objet ou variable de bloc With non définie" s'affiche pour la ligne "X = datej.Column .
Après avoir cherché un peu toutes les solutions qui ne s'avèrent pas très fructueuse, je bloque. Donc si quelqu'un voit d'où cela peut venir...

Merci d'avance :)
 

Grand Chaman Excel

XLDnaute Impliqué
Re : Erreur code : "Variable objet ou variable de bloc With non définie".

Bonjour Marco,

J'ai essayé ton code et cela semble bien fonctionné si la date en E4 fait partie de la plage A2:Z2.
Par contre, j'ai la même erreur que toi si la date en E4 ne fait pas partie de la plage ou si le format n'est pas le même.
Exemple : E4 en format Texte et A2:Z2 en format Date

À vérifier.
 

Marco56

XLDnaute Nouveau
Re : Erreur code : "Variable objet ou variable de bloc With non définie".

Bonjour Marco,

J'ai essayé ton code et cela semble bien fonctionné si la date en E4 fait partie de la plage A2:Z2.
Par contre, j'ai la même erreur que toi si la date en E4 ne fait pas partie de la plage ou si le format n'est pas le même.
Exemple : E4 en format Texte et A2:Z2 en format Date

À vérifier.

Bonjour Grand Chaman Excel,

La date en E4 fait partie de la feuille "Feuil2" tandis que la plage A2:Z2 fait partie de la feuille "Feuil1", donc forcément la date en E4 ne fait pas parti de la plage A2:Z2 il me semble, à moins que je me trompe ?

Concernant le format de cellule, la plage A2:Z2 est en "jjj jj/mm/aa" alors que la cellule E4 est en format "jj/mm/aa". J'ai essayé en modifiant la plage A2:Z2 avec le format "jj/mm/aa", et l'erreur est toujours là.

Je ne vois pas trop comment faire...
 

Hippolite

XLDnaute Accro
Re : Erreur code : "Variable objet ou variable de bloc With non définie".

Bonsoir à tous,
S'il ne trouve pas, datej est égal à Nothing et X = datej.Column ne peut que planter.
Il faut ajouter une condition pour traiter ce cas.
A+
 

Marco56

XLDnaute Nouveau
Re : Erreur code : "Variable objet ou variable de bloc With non définie".

Bonsoir à tous,
S'il ne trouve pas, datej est égal à Nothing et X = datej.Column ne peut que planter.
Il faut ajouter une condition pour traiter ce cas.
A+

Bonjour Hippolite,

Pourrais-tu me donner le code à rajouter qui correspond à la fonction Nothing, je ne connais pas encore tous les rouages du VBA... ^^

Merci
 

Staple1600

XLDnaute Barbatruc
Re : Erreur code : "Variable objet ou variable de bloc With non définie".

Bonsoir le fil

Personnellement j'écrirai ce code ainsi
VB:
Sub Macro()
Dim  datejour as Range
Dim  datej as Range
Dim X As Integer

Set datejour = Worksheets("Feuil2").Range("E4")
With Worksheets("Feuil1").Range("A2:Z2")
'Enregistrer dans une variable la date du jour.

'Rechercher la date du jour dans la feuille Feuil2
Set datej = .Find(datejour, LookIn:=xlValues)
'Définir et enregistrer dans une variable le numéro de la ligne de la date trouvée dans la feuille Feuil2
X = datej.Column
'Copier/Coller les données de la feuille 2 vers la feuille 1
Worksheets("Feuil2").Range("Q4:Q200").Copy
ActiveSheet.Paste Destination:=Worksheets("Feuil1").Range(.Cells(4, X + 1), .Cells(200, X + 1))

End With
End Sub
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Erreur code : "Variable objet ou variable de bloc With non définie".

Re, salutations Sharky ;) ; prêt pour le Chantier


Après réflexion , j'éviterai de passer par le copier/coller, et je l'écrirai donc ainsi:

VB:
Sub macro_m()
Dim datej As Range, X As Integer
Set datej = Feuil1.[A2:Z2].Find(Feuil2.[E4], LookIn:=xlValues): X = datej.Column
Feuil1.Cells(4, X).Resize(200).Value = Feuil2.[Q4].Resize(200).Value
End Sub
 

Hippolite

XLDnaute Accro
Re : Erreur code : "Variable objet ou variable de bloc With non définie".

Bonjour,
Pourrais-tu me donner le code à rajouter qui correspond à la fonction Nothing, je ne connais pas encore tous les rouages du VBA...
J'aurais mis :
VB:
If datej = Nothing Then
    'ici le code si date non trouvée
Else
    'ici ton code X = datej.Column ...
End If
Mais tu devrais joindre ton fichier pour qu'on y voie plus clair
A+
 

Marco56

XLDnaute Nouveau
Re : Erreur code : "Variable objet ou variable de bloc With non définie".

Bonjour à tous,

J'ai essayé les codes, toujours le même problème, ce fameux "Objet non défini"...

Je vous transmet le fichier en pièces jointes.

Ce code est juste une partie de la macro, je n'ai pas mis le reste pour ne pas trop compliquer. Pour faire simple, on extrait un fichier texte récupérant les infos concernant les heures travaillées qu'on place en feuille 2, et, en fonction de la date, il faudrait les intégrer au planing de la feuille 1.

Merci de votre aide !
 

Pièces jointes

  • Planning vierge.xls
    61.5 KB · Affichages: 158
  • Planning vierge.xls
    61.5 KB · Affichages: 157
  • Planning vierge.xls
    61.5 KB · Affichages: 155

Hippolite

XLDnaute Accro
Re : Erreur code : "Variable objet ou variable de bloc With non définie".

Re à tous,
Si tu ne mets pas tous les arguments de Find, il est plus prudent de mettre Application.Findformat.Clear avant. En effet, Les recherche et remplacements par macro ou de façon manuelle font mémoriser la dernière configuration utilisée et ce sont ces dernières valeurs qui sont utilisées par défaut pour les arguments non spécifiés. Il peut y avoir quelques surprises si la configuration n'a pas été réinitialisée.
A+
 

Marco56

XLDnaute Nouveau
Re : Erreur code : "Variable objet ou variable de bloc With non définie".

Bonjour à tous,

Merci déjà pour votre aide. Sinon, j'ai testé ton code Grand Chaman Excel et ça marche enfin :)

Par contre, en l'intégrant dans la macro complète, j'ai quelques petits problèmes...

Code:
Sub Extract()
Dim MonFichier As String                'Extraction du fichier texte
    MonFichier = Application.GetOpenFilename
      Workbooks.Open MonFichier
    With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;S:\prestation\STAGIAIRES\Marc\Dossier Extract temps\Nouveau Document texte.txt" _
        , Destination:=Range("A1"))
        .Name = "Fichier extrait"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 1252
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = False
        .TextFileSemicolonDelimiter = True
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With                              'Fin de l'extraction du fichier texte

Columns(16).Delete                    'Là je supprime les colonnes inutiles.
Columns(17).Delete
Columns(18).Delete
Columns(19).Delete
Columns(20).Delete
Columns(21).Delete
Columns(22).Delete
Columns(23).Delete
Columns(24).Delete
Columns(25).Delete
Columns(26).Delete

Dim intI As Integer                       'Suppression des lignes vides (c'est à dire les personnes n'ayant pas travaillées ont un 0 dans la colonne des heures effectuées)
intI = 3

Do While Cells(intI, 14) <> "FIN"       'Je ne peux pas mettre "" car il y a des lignes vides dans le tableau entre les personnes
    If Cells(intI, 14) = 0 Then
        Rows(intI).Delete
    Else
        intI = intI + 1
    End If
Loop
    
    Windows("Nouveau document texte.txt").Activate      'Récupération du fichier texte
    Range("A1:O500").Select
    Selection.Copy
    Windows("Essai macro.xls").Activate
    Sheets("Feuil2").Select
    ActiveSheet.Paste


    Range("Q4").Select                                  'Création de la colonne des heures
    ActiveCell.FormulaR1C1 = "=RC[-3]/60"
    Range("Q4").Select
    Selection.AutoFill Destination:=Range("Q4:Q413"), Type:=xlFillDefault
    Range("Q4:Q413").Select

Dim Nom As String, i As Long, j As Long
Sheets(1).Select
i = 4
With Sheets(2)
  Do While Cells(i, 2) <> "FIN"                    'Ligne (i,A)
    Nom = Cells(i, 2)
    For j = 4 To .Range("B65536").End(xlUp).Row
      If Nom = .Cells(j, 2) Then
        With Worksheets("Feuil1").Range("A2:Z2")
'Enregistrer dans une variable la date du jour.
Set datejour = Worksheets("Feuil2").Range("E4")
'Rechercher la date du jour dans la feuille Calcul
Set datej = .Find(datejour, LookIn:=xlFormulas)
'Définir et enregistrer dans une variable le numéro de la ligne de la date trouvée dans la feuille Calcul
Dim X As Integer
X = datej.Column
'Copier/Coller les données F400 du formulaire vers la feuille de calcul
Worksheets("Feuil2").Range("Q4:Q200").Copy
ActiveSheet.Paste Destination:=Worksheets("Feuil1").Range(.Cells(4, X + 1), .Cells(200, X + 1))

End With

            Exit For
      End If
    Next
    i = i + 1
  Loop
End With
End Sub

Donc le problème est qu'à la place de coller les heures (colonne Q créé) en fonction des personnes comme le code le précise, la macro colle la liste à suivre et ne prend pas en compte le nom des personnes. De plus, lors du collage, il reprend la formule "=RC[-3]/60" à la place de coller simplement la valeur, donc je pense qu'il faut intégrer à la macro un collage spécial, mais comment ?

Je ne sais pas si je suis très clair, si besoin de plus de précisions n'hésitez pas.

Merci beaucoup !
 

Marco56

XLDnaute Nouveau
Re : Erreur code : "Variable objet ou variable de bloc With non définie".

Finalement ça marche pour le collage spécial après plusieurs tentatives.
Par contre, je ne comprends toujours pas pourquoi ce code :
Code:
Nom = Cells(i, 2)
    For j = 4 To .Range("B65536").End(xlUp).Row
      If Nom = .Cells(j, 2) Then

ne s'applique pas.
En fait il vérifie que le nom de la feuille 1 correspond avec celui de la feuille 2, et ensuite si les deux cellules correspondent, ils collent en fonction du nom.

Ca marchait avant, mais depuis que j'ai rajouté le nouveau morceau de code ça ne fonctionne plus et je ne vois pas trop pourquoi, il se colle bien mais ne prend pas en compte le fait que les deux cellules doivent être semblables
 

Marco56

XLDnaute Nouveau
Re : Erreur code : "Variable objet ou variable de bloc With non définie".

Bonjour à tous,

Je rencontre toujours le même problème, c'est à dire que la macro ne prend toujours pas en compte la condition qui précise que le nom doit correspondre dans les deux feuilles. En application, cela correspond à ce que la cellule de la feuille 1 = cellule de la feuille 2.

Code:
Dim Nom As String, i As Long, j As Long
Sheets(1).Select
i = 4
With Sheets(2)
  Do While Cells(i, 2) <> "FIN"                    'Ligne (i,A)
  [B]  Nom = Cells(i, 2)
    For j = 4 To .Range("B65536").End(xlUp).Row
      If Nom = .Cells(j, 2) Then[/B]
        With Worksheets("Feuil1").Range("A2:Z2")
'Enregistrer dans une variable la date du jour.
Set datejour = Worksheets("Feuil2").Range("E4")
'Rechercher la date du jour dans la feuille Calcul
Set datej = .Find(datejour, LookIn:=xlFormulas)
'Définir et enregistrer dans une variable le numéro de la ligne de la date trouvée dans la feuille Calcul
Dim X As Integer
X = datej.Column
'Copier/Coller les données F400 du formulaire vers la feuille de calcul
Worksheets("Feuil2").Range("Q4:Q200").Copy
Worksheets("Feuil1").Range(.Cells(4, X + 1), .Cells(200, X + 1)).Select
Selection.PasteSpecial Paste:=xlPasteValues

End With

            Exit For
      End If
    Next
    i = i + 1
  Loop
End With

A mon avis cela provient du code à partir de "With Worksheets ("Feuil1"), puisque la macro fonctionne si on enlève la condition de la date.

Merci de votre aide ;)
 

Otto_81

XLDnaute Nouveau
Re : Erreur code : "Variable objet ou variable de bloc With non définie".

Bonjour à tous,

J'ai le même problème que Marco56 concernant mon développement de code.
Je suis sous Excel Mac et j'ai l'erreur 91 qui apparaît également.
Je dois réaliser ca dans le cadre de mes études et je ne comprend pas pourquoi est ce que quelqu'un peut m'orienter ?

Dim tbl_workbook As Workbook
Dim read_workbook As Workbook
Dim name As String
Dim I As Integer
Dim J As Integer
Dim nb_articles As Integer 'ligne 2
Dim nb_ventes As Integer 'ligne 3
Dim montant_ventesHT As Double 'ligne 4
Dim montant_achatsHT As Double
Dim marge As Double 'ligne 5
Dim panier_moyen As Double 'ligne 6
Dim marge_moyenne As Double 'ligne 7
Dim marge_livres As Double 'ligne 8
Dim achat_livres As Double
Dim vente_livres As Double


''''''''''''''''''''''''''''''''''''''''''''''''''''''BLOC OUVERTURE ET CHOIX FICHIER'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Set tbl_workbook = ActiveWorkbook ' nous prenons le tableau de travail qui est le tableau r_capitulatif

MsgBox "Sélectionner le fichier nécessaire ˆ la compilation du tableau."

Set read_workbook = Application.Workbooks.Open(Application.GetOpenFilename) ' on va choisir le fichier li_ au mois --> Octobre, Novembre, D_cembre

name = InputBox("Veuillez entrer le nom du mois que vous souhaitez archiver.", "Choix")

'''''''''''''''''''''''''''''''''''''''''''''''''''''''BLOC DE CALCUL''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

For I = 2 To read_workbook.Sheets(1).Range("A1").End(xlDown).Row 'On s_lectionne le premier prix qui d_marre ˆ la 2ème ligne, et on prend la première ligne vide

nb_articles = nb_articles + read_workbook.Sheets(1).Range("F" & I) 'à mettre dans la ligne 1 de la bonne colonne après la boucle for

If read_workbook.Sheets(1).Range("A" & I) <> read_workbook.Sheets(1).Range("A" & I - 1) Then '
nb_ventes = nb_ventes + 1 ' On augmente de 1 dès qu'on a un nouveau numéro de facture; à mettre dans ligne 2
End If '
montant_ventesHT = montant_ventesHT + read_workbook.Sheets(1).Range("I" & I) * nb_ventes ' à multiplier par la quantité à chaque fois; à mettre en ligne 4
montant_achatsHT = montant_achatsHT + read_workbook.Sheets(1).Range("G" & I) * nb_ventes ' à multiplier par la quantité à chaque fois

If read_workbook.Sheets(1).Range("C" & I) = "LIVRES" Then
achat_livres = achat_livres + read_workbook.Sheets(1).Range("G" & I) * nb_ventes ' à multiplier par la quantité à chaque fois
vente_livres = vente_livres + read_workbook.Sheets(1).Range("I" & I) * nb_ventes ' à multiplier par la quantité à chaque fois
End If
Next I

marge = montant_ventesHT - montant_achatsHT ' à mettre en ligne 5
panier_moyen = montant_ventesHT / nb_ventes ' à mettre en ligne 6
marge_moyenne = marge / nb_ventes ' à mettre en ligne 7
marge_livres = vente_livres - achat_livres ' à mettre en ligne 8


''''''''''''''''''''''''''''''''''''''''''''''''''BLOC ECRITURE''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

For I = 2 To 13 ' il y a 13 colonnes dans le tableau r_capitulatif des donn_es (mois)
If tbl_workbook.Sheets(1).Cells(1, I) = name Then
tbl_workbook.Sheets(1).Cells(2, I) = nb_articles 'Vérifiez bien que vous mettez les bonnes variables dans les bonnes lignes
tbl_workbook.Sheets(1).Cells(3, I) = nb_ventes
tbl_workbook.Sheets(1).Cells(4, I) = montant_ventesHT
tbl_workbook.Sheets(1).Cells(5, I) = marge
tbl_workbook.Sheets(1).Cells(6, I) = panier_moyen
tbl_workbook.Sheets(1).Cells(7, I) = marge_moyenne
tbl_workbook.Sheets(1).Cells(8, I) = marge_livres
End If
Next I

MsgBox "La manipulation s'est r_alis_e avec succès."

End Sub

Je vous remercie pour votre aide, car c'est un peu compliqué.
 

Discussions similaires

Statistiques des forums

Discussions
312 489
Messages
2 088 853
Membres
103 975
dernier inscrit
denry