Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Bricoltou

XLDnaute Occasionnel
Bonsoir le Fil
Pouvez vous m'aider à trouver mon erreur ?
dans le fichier ci joint j'ai mis un code pour comparer deux colonnes ,il fonctionne bien .
Les deux onglets sont réellement deux fichiers séparés ,j'ai essayé de l'adapter mais il bloque sur la ligne bleu:
Merci d'avance pour votre aide
Voici mon code
Private Sub CdButOK_Click()
Dim i As Long, j As Long, plagehebdo As Range, plagejour As Range
Select Case CbBox_choixjour.Value
Case "Lundi"
'Workbooks.Open Filename:= _
'"K:\Pilotage\Camionnage\Matrice_Chauffeur.xls"
Workbooks.Open Filename:= _
"C:\Documents and Settings\Desktop\Camionnage\Heures_chauffeurs.xls"
Sheets("Hebdo").Select
ActiveSheet.Unprotect Password:="Terminal"
Set plagehebdo = Sheets("Hebdo").Range("A6:A" & Range("A65356").End(xlUp).Row)
For Each nom1 In plagehebdo
i = nom1.Row
heure1 = Sheets("Hebdo").Range("C" & i)
heure1 = Format(heure1, "hh:mm")
'Workbooks.Open Filename:= _
'"K:\Pilotage\Camionnage\Matrice_Chauffeur.xls"
Workbooks.Open Filename:= _
"C:\Documents and Settings\Desktop\Camionnage\Matrice_chauffeur.xls"
Sheets("Lundi").Select
ActiveSheet.Unprotect Password:="Terminal"
Set plagejour = Sheets("Lundi").Range("B3:B" & Range("B65356").End(xlUp).Row)
For Each nom2 In plagejour
plagejour.Select
j = nom2.Row
heure2 = Sheets("Lundi").Range("U" & j)
heure2 = Format(heure2, "hh:mm")
If nom1 = nom2 And heure1 <> heure2 Then
Range("U" & j).Interior.ColorIndex = 6 'Colorie en Jaune la cellule
Exit For
End If
Next nom2

Sheets("Lundi").Select

Next nom1
End Select
End Sub

@+
Bricoltou
 

Pièces jointes

Dernière édition:
Re : ou est mon erreur

Bonsoir Bricoltou,

Je ne peux t'aider, en revanche, je pourrais te faire une petite suggestion, utiliser les balises de code pour insérer ton code dans ton post :

Code:
Private Sub CdButOK_Click()
Dim i As Long, j As Long, plagehebdo As Range, plagejour As Range
Select Case CbBox_choixjour.Value
Case "Lundi"
'Workbooks.Open Filename:= _
'"K:\Pilotage\Camionnage\Matrice_Chauffeur.xls"
Workbooks.Open Filename:= _
"C:\Documents and Settings\btjoncke\Desktop\Camionnage\Heures_chauff eurs.xls"
Sheets("Hebdo").Select
ActiveSheet.Unprotect Password:="Terminal"
Set plagehebdo = Sheets("Hebdo").Range("A6:A" & Range("A65356").End(xlUp).Row)
For Each nom1 In plagehebdo
i = nom1.Row
[COLOR=blue]heure1 = Sheets("Hebdo").Range("C" & i)[/COLOR]
heure1 = Format(heure1, "hh:mm")
'Workbooks.Open Filename:= _
'"K:\Pilotage\Camionnage\Matrice_Chauffeur.xls"
Workbooks.Open Filename:= _
"C:\Documents and Settings\btjoncke\Desktop\Camionnage\Matrice_chauf feur.xls"
Sheets("Lundi").Select
ActiveSheet.Unprotect Password:="Terminal"
Set plagejour = Sheets("Lundi").Range("B3:B" & Range("B65356").End(xlUp).Row)
For Each nom2 In plagejour
plagejour.Select
j = nom2.Row
heure2 = Sheets("Lundi").Range("U" & j)
heure2 = Format(heure2, "hh:mm")
If nom1 = nom2 And heure1 <> heure2 Then
Range("U" & j).Interior.ColorIndex = 6 'Colorie en Jaune la cellule
Exit For
End If
Next nom2
 
Sheets("Lundi").Select
 
Next nom1
End Select
End Sub

Avec : ALLER en mode avancé, choisir la balise code... et insérer ton code à l'intérieur.

Mais bon après avoir fait control c dans vba... car là je pense que ca sera aussi peu lisible que le tien... DU FAIT que je l'ai pris dans ton post... Le fait de le mettre entre balises
Code:
 permet de respecter les tabulations, les couleurs de commentaire... et c plus facile.
 
Re : ou est mon erreur

Bonsoir Bricoltou,

Je ne peux t'aider, en revanche, je pourrais te faire une petite suggestion, utiliser les balises de code pour insérer ton code dans ton post :

Code:
Private Sub CdButOK_Click()
Dim i As Long, j As Long, plagehebdo As Range, plagejour As Range
Select Case CbBox_choixjour.Value
Case "Lundi"
'Workbooks.Open Filename:= _
'"K:\Pilotage\Camionnage\Matrice_Chauffeur.xls"
Workbooks.Open Filename:= _
"C:\Documents and Settings\Desktop\Camionnage\Heures_chauff eurs.xls"
Sheets("Hebdo").Select
ActiveSheet.Unprotect Password:="Terminal"
Set plagehebdo = Sheets("Hebdo").Range("A6:A" & Range("A65356").End(xlUp).Row)
For Each nom1 In plagehebdo
i = nom1.Row
[COLOR=blue]heure1 = Sheets("Hebdo").Range("C" & i)[/COLOR]
heure1 = Format(heure1, "hh:mm")
'Workbooks.Open Filename:= _
'"K:\Pilotage\Camionnage\Matrice_Chauffeur.xls"
Workbooks.Open Filename:= _
"C:\Documents and Settings\Desktop\Camionnage\Matrice_chauf feur.xls"
Sheets("Lundi").Select
ActiveSheet.Unprotect Password:="Terminal"
Set plagejour = Sheets("Lundi").Range("B3:B" & Range("B65356").End(xlUp).Row)
For Each nom2 In plagejour
plagejour.Select
j = nom2.Row
heure2 = Sheets("Lundi").Range("U" & j)
heure2 = Format(heure2, "hh:mm")
If nom1 = nom2 And heure1 <> heure2 Then
Range("U" & j).Interior.ColorIndex = 6 'Colorie en Jaune la cellule
Exit For
End If
Next nom2
 
Sheets("Lundi").Select
 
Next nom1
End Select
End Sub

Avec : ALLER en mode avancé, choisir la balise code... et insérer ton code à l'intérieur.

Mais bon après avoir fait control c dans vba... car là je pense que ca sera aussi peu lisible que le tien... DU FAIT que je l'ai pris dans ton post... Le fait de le mettre entre balises
Code:
 permet de respecter les tabulations, les couleurs de commentaire... et c plus facile.[/QUOTE]

Merci Brigitte
 
Re : ou est mon erreur

Bonjour Bricoltou, Brigitte, fhoest,

Bricoltou,

Voici ton code remanié (il fonctionne, je l'ai testé). Chez moi, l'erreur provenait de la ligne Set plagehebdo, dans laquelle la dernière ligne trouvée était la ligne 2 : J'ai donc remplacé End(xlUp) par UsedRange.Rows.Count. J'ai fait de même pour la ligne Set plagejour (lignes en rouge).

Code:
Private Sub CommandButton1_Click()
'Sub comparaison()
Dim i As Long, j As Long, plagehebdo As Range, plagejour As Range
[COLOR="SeaGreen"]Application.ScreenUpdating = False
[/COLOR]
Sheets("Hebdo").Select
[COLOR="Red"]Set plagehebdo = Sheets("Hebdo").Range("A6:A" & UsedRange.Rows.Count)[/COLOR]
 
For Each nom1 In plagehebdo
 i = nom1.Row
 heure1 = Sheets("Hebdo").Range("C" & i)
 heure1 = Format(heure1, "hh:mm")
  
 Sheets("Lundi").Select
 [COLOR="Red"]Set plagejour = Sheets("Lundi").Range("B3:B" & Range("B65356").End(xlUp).Row)[/COLOR]
  
    For Each nom2 In plagejour
     plagejour.Select
     j = nom2.Row
     heure2 = Sheets("Lundi").Range("J" & j)
     heure2 = Format(heure2, "hh:mm")
      
      If nom1 = nom2 And heure1 <> heure2 Then
      Range("J" & j).Interior.ColorIndex = 6 'Colorie en Jaune la cellule
      Exit For
      End If
    Next nom2
  
Sheets("Lundi").Select
 
Next nom1
 
[COLOR="SeaGreen"]Application.ScreenUpdating = True[/COLOR]

End Sub

NB : pour améliorer la rapidité et l'aspect visuel, j'ai rajouté les lignes en vert.


Espérant avoir été utile.

Cordialement.
 
Re : ou est mon erreur

Bonjour le Fil,Brigitte,Fhoest,Papou-net

Merci à vous trois pour votre aide,j'ai modifié le code de Papou-net afin d'agir sur deux fichiers et un select case pour le jour dans un des fichiers mais il bloque à la ligne bleu .j'ai le message d'erreur 424 objet requis
Qu'en pensez vous ?
Code:
Private Sub CdButOK_Click()
Dim i As Long, j As Long, plagehebdo As Range, plagejour As Range
Application.ScreenUpdating = False
Select Case CbBox_choixjour.Value
Case "Lundi"
'Workbooks.Open Filename:= _
'"K:\Pilotage\Camionnage\Matrice_Chauffeur.xls"
Workbooks.Open Filename:= _
"C:\Documents and Settings\Desktop\Camionnage\Heures_chauffeurs.xls"
ActiveSheet.Unprotect Password:="Terminal"
Sheets("Hebdo").Select
[COLOR="Blue"]Set plagehebdo = Sheets("Hebdo").Range("A6:A" & UsedRange.Rows.Count)[/COLOR]For Each nom1 In plagehebdo
i = nom1.Row
heure1 = Sheets("Hebdo").Range("C" & i)
heure1 = Format(heure1, "hh:mm")
         'Workbooks.Open Filename:= _
         '"K:\Pilotage\Camionnage\Matrice_Chauffeur.xls"
          Workbooks.Open Filename:= _
          "C:\Documents and Settings\Desktop\Camionnage\Matrice_chauffeur.xls"
          Sheets("Lundi").Select
          ActiveSheet.Unprotect Password:="Terminal"
          Set plagejour = Sheets("Lundi").Range("B3:B" & Range("B65356").End(xlUp).Row)
          For Each nom2 In plagejour
          plagejour.Select
          j = nom2.Row
          heure2 = Sheets("Lundi").Range("J" & j)
          heure2 = Format(heure2, "hh:mm")
          If nom1 = nom2 And heure1 <> heure2 Then
          Range("J" & j).Interior.ColorIndex = 6 'Colorie en Jaune la cellule
          Exit For
          End If
          Next nom2
          Sheets("Lundi").Select
          Next nom1
          Application.ScreenUpdating = True
End Select
End Sub
 
Re : ou est mon erreur

Bonjour Bricoltou, le fil, le forum,

j'ai le message d'erreur 424 objet requis

Le message est clair, il faut préciser l'objet :

Code:
Set plagehebdo = Sheets("Hebdo").Range("A6:A" & [COLOR="Red"]Sheets("Hebdo").[/COLOR]UsedRange.Rows.Count)

Edit : perso j'aurais gardé la 1ère formule, mais en précisant la feuille :

Code:
Set plagehebdo = Sheets("Hebdo").Range("A6:A" & [COLOR="Red"]Sheets("Hebdo").[/COLOR]Range("A65356").End(xlUp).Row)

A+
 
Dernière édition:
Re : ou est mon erreur

Bonjour le Fil,Job75

Merci Job75 pour ta réponse ,ce que je ne comprend pas c'est qu'il reconnait l'objet sur la ligne du dessus aprés avoir ouvert le fichier .

Bricoltou



Bonjour Bricoltou, le fil, le forum,



Le message est clair, il faut préciser l'objet :

Code:
Set plagehebdo = Sheets("Hebdo").Range("A6:A" & [COLOR="Red"]Sheets("Hebdo").[/COLOR]UsedRange.Rows.Count)

A+
 
Re : ou est mon erreur

Re,

UsedRange doit toujours avoir un objet (feuille) défini. Par contre pour les Range en effet, ce n'est pas nécessaire quand il s'agit de la feuille active.

Mais en VBA, il est en général inutile de sélectionner quoi que ce soit...

A+
 
Re : ou est mon erreur

Bonjour le Forum,Job75

Job75 merci pour ton aide , j'avoue que je ne comprend plus rien .
Ci desous un fichier avec 3 classeurs .

Merci d'avance

Bricoltou


Re,

Je n'avais pas bien lu :



Il faut peut-être préciser aussi le fichier quand ce n'est pas le fichier actif.

A+
 

Pièces jointes

Re : ou est mon erreur

Re,

Bon j'ai revu la macro du bouton du Classeur1, pour la rendre cohérente.

Mettez les 3 fichiers dans le même dossier, ainsi on peut utiliser ThisWorkbook.Path :

Code:
Private Sub CommandButton1_Click()
Dim F1 As Worksheet, F2 As Worksheet, plagehebdo As Range, plagejour As Range
Dim nom1 As Range, nom2 As Range, heure1, heure2
Application.ScreenUpdating = False

On Error Resume Next ' au cas où l'un des classeurs est déjà ouvert
Workbooks.Open Filename:=ThisWorkbook.Path & "\Bricoltou.xls"
Set F1 = Workbooks("Bricoltou.xls").Sheets("semaine")
[COLOR="Red"]If F1 Is Nothing Then Exit Sub ' si le fichier ou la feuille n'existent pas[/COLOR]
Set plagehebdo = F1.Range("A6:A" & F1.Range("A65536").End(xlUp).Row)
  
Workbooks.Open Filename:=ThisWorkbook.Path & "\Bricoltou1.xls"
Set F2 = Workbooks("Bricoltou1.xls").Sheets("Lundi")
[COLOR="red"]If F2 Is Nothing Then GoTo 1[/COLOR]
F2.Unprotect Password:="Terminal"
Set plagejour = F2.Range("B3:B" & F2.Range("B65356").End(xlUp).Row)
F2.Range("U3:U65536").Interior.ColorIndex = xlNone 'efface les couleurs
On Error GoTo 0

For Each nom1 In plagehebdo
  heure1 = Format(F1.Range("C" & nom1.Row), "hh:mm")
  For Each nom2 In plagejour
    heure2 = Format(F2.Range("U" & nom2.Row), "hh:mm")
    If nom1 = nom2 And heure1 <> heure2 Then
      F2.Range("U" & nom2.Row).Interior.ColorIndex = 6 'Colorie en Jaune la cellule
      Exit For
    End If
  Next nom2
Next nom1

F2.Protect Password:="Terminal"
1 ThisWorkbook.Activate
End Sub

Le résultat c'est qu'en colonne U de Bricoltou1 toutes les cellules sont colorées...

Edit : par sécurité, j'ai ajouté les 2 lignes en rouge.

A+
 

Pièces jointes

Dernière édition:
Re : ou est mon erreur

Bonsoir, salut Job 🙂,
Et oui, apparement rien ne correspond.
Cependant, il faut convertir heure1 et heure2 en variables de même type pour effectuer la comparaison et à priori seul le type texte fonctionne ?!
Code:
For Each nom1 In plagehebdo
  heure1 = Format(nom1.Offset(0, 2), "hh:mm")
  For Each nom2 In plagejour
    heure2 = Format(nom2.Offset(0, 19), "hh:mm")
    If nom1 = nom2 And heure1 <> heure2 Then
      nom2.Offset(0, 19).Interior.ColorIndex = 6 'Colorie en Jaune la cellule
      Exit For
    End If
  Next nom2
Next nom1
A+
kjin
 
Re : ou est mon erreur

Salut kjin,

J'avais shunté cette histoire de formats, pensant que ça ne servait à rien...

Mais effectivement les heures dans le fichier Bricoltou sont parfois des textes.

S'il n'y a jamais de secondes, on peut utiliser CDate :

Code:
For Each nom1 In plagehebdo
  heure1 = F1.Range("C" & nom1.Row)
  For Each nom2 In plagejour
    heure2 = F2.Range("U" & nom2.Row)
    If nom1 = nom2 And [COLOR="Red"]CDate[/COLOR](heure1) <> [COLOR="red"]CDate[/COLOR](heure2) Then
      F2.Range("U" & nom2.Row).Interior.ColorIndex = 6 'Colorie en Jaune la cellule
      Exit For
    End If
  Next nom2
Next nom1

Edit : mais il y aura problème si dans Bricoltou il y a des cellules contenant un texte vide...

J'édite mon post précédent avec le format hh:mm 😀

A+
 
Dernière édition:
Re : ou est mon erreur

Bonsoir le Fil,Job75,Kjin

Job75,Kjin merci a vous deux car le code fonctionne bien 😛, je me pose une question car je suis en cours de modification pour chercher le Jour .
Dans le code ci dessous ,comment faite vous pour faire référence a la C ( heures du Fichier Bricoltou 😱

Merci d'avance pour vos reponses

@+

Bricoltou

Code:
Private Sub CdButOK_Click()
Select Case CbBox_choixjour.Value
Case "Lundi"
Dim F1 As Worksheet, F2 As Worksheet, plagehebdo As Range, plagejour As Range
Dim nom1 As Range, nom2 As Range, heure1, heure2
Application.ScreenUpdating = False
On Error Resume Next ' au cas où l'un des classeurs est déjà ouvert
'Workbooks.Open Filename:= _
'"C:\Documents and Settings\btjoncke\Desktop\Camionnage\Heures_Chauffeurs.xls"
Workbooks.Open Filename:=ThisWorkbook.Path & "\Heures_Chauffeurs.xls"
Set F1 = Workbooks("Heures_chauffeurs.xls").Sheets("semaine")
If F1 Is Nothing Then Exit Sub ' si le fichier ou la feuille n'existent pas
Set plagehebdo = F1.Range("A6:A" & F1.Range("A65536").End(xlUp).Row)
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
33
Affichages
4 K
  • Question Question
Microsoft 365 Code VBA - Erreur
Réponses
1
Affichages
770
B
Réponses
6
Affichages
1 K
benjaminxls
B
Réponses
13
Affichages
2 K
G
  • Question Question
Réponses
3
Affichages
2 K
L
Réponses
1
Affichages
1 K
Lucien31
L
M
Réponses
11
Affichages
2 K
Melidan2006
M
M
Réponses
20
Affichages
3 K
massol
M
Retour