Problème Exécution macro
Bonjour à tous,
lorsque j'exécute la macro, apparait un un tableau macros, nom de la macro, mais aucune macro disponible!
dans mon fichier, je cherche a exécuter en automatique que si je modifie les données de la case AW4 onglet DECLAR, la case AW3 change le texte en reprenant dans l'ordre onglet EQUIV, colonne K a partir de K3.
Merci pour votre aide
Bonjour,
Les évènements de feuilles ne sont pas à mettre dans un module mais dans la feuille elle même
https://www.excel-pratique.com/fr/vba/evenements_classeur
Déplacez votre code du module 2 dans la feuille DECLAR
Bon dimanche
Bonjour BrunoM45,
je vous remercie pour votre aide et pour le lien.
Bon dimanche a vous aussi.
Bonjour,
je ne comprend pas ce qui se passe, ma macro ne fonctionne pas!
merci pour votre aide
Re,
Franchement, vous vous moquez de moi c'est ça
Codes initial donné dans "classeur1"
Private Sub Worksheet_Change(ByVal Target As Range)
Dim declarSheet As Worksheet
Dim equivSheet As Worksheet
Dim declarCell As Range
Dim equivRange As Range
Dim lastRow As Long
Dim i As Long
' Définir les feuilles de calcul
Set declarSheet = ThisWorkbook.Sheets("DECLAR")
Set equivSheet = ThisWorkbook.Sheets("EQUIV")
' Vérifier si la modification a été effectuée dans la cellule AW4 de DECLAR
Set declarCell = declarSheet.Range("AW4")
If Not Intersect(Target, declarCell) Is Nothing Then
' Effacer le contenu de la cellule AW3
declarSheet.Range("AW3").ClearContents
' Trouver la dernière ligne avec des données dans la colonne K d'EQUIV
lastRow = equivSheet.Cells(equivSheet.Rows.Count, "K").End(xlUp).Row
' Définir la plage des cellules de la colonne K à partir de la cellule K3
Set equivRange = equivSheet.Range("K3:K" & lastRow)
' Remplir la cellule AW3 avec les valeurs de la colonne K d'EQUIV
For i = 1 To equivRange.Rows.Count
declarSheet.Range("AW3").Offset(i - 1, 0).Value = equivRange.Cells(i, 1).Value
Next i
End If
End SubCode donnés dans test
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim wsDeclar As Worksheet
Dim wsEquiv As Worksheet
Dim declarValue As Variant ' Utiliser Variant au lieu de Double
Dim equivColumn As Variant ' Utiliser Variant au lieu de Integer
' Définir les feuilles de calcul
Set wsDeclar = Sheets("DECLAR")
Set wsEquiv = Sheets("EQUIV")
' Vérifier si la modification a été effectuée dans la cellule AW4 de l'onglet DECLAR
If Target.Address = "$AW$4" Then
' Récupérer la valeur modifiée dans AW4
declarValue = Target.Value
' Vérifier si la valeur est numérique
If IsNumeric(declarValue) Then
' Trouver la correspondance dans la colonne K de l'onglet EQUIV à partir de la cellule K3
equivColumn = Application.Match(declarValue, wsEquiv.Range("K3:K" & wsEquiv.Cells(wsEquiv.Rows.Count, "K").End(xlUp).Row), 0)
' Vérifier si une correspondance a été trouvée
If Not IsError(equivColumn) Then
' Mettre à jour la cellule AW3 dans l'onglet DECLAR avec la valeur correspondante de la colonne K dans l'onglet EQUIV
wsDeclar.Range("AW3").Value = wsEquiv.Cells(2, equivColumn + 10).Value ' +10 car la colonne K commence à la colonne 11 (K)
Else
' Si aucune correspondance n'est trouvée, effacer la valeur dans AW3
wsDeclar.Range("AW3").ClearContents
End If
Else
' Si la valeur n'est pas numérique, effacer la valeur dans AW3
wsDeclar.Range("AW3").ClearContents
End If
End If
End SubVous n'avez pas l'impression d'avoir changé quelque chose, à part avoir ajouté du code
Bonjour,
j'ai modifié le code, car en exécutant la 1ère macro, le fichier se fermer tous seul? je ne sais plus quoi faire!!
si vous avez une idée?
Re,
Avec un évènement "change" il faut bloquer les évènements lors de la modification,
sinon cela créé une boucle infinie et Excel se ferme (plantage)
Private Sub Worksheet_Change(ByVal Target As Range)
Dim declarSheet As Worksheet
Dim equivSheet As Worksheet
Dim declarCell As Range
Dim equivRange As Range
Dim lastRow As Long
Dim i As Long
' Définir les feuilles de calcul
Set declarSheet = ThisWorkbook.Sheets("DECLAR")
Set equivSheet = ThisWorkbook.Sheets("EQUIV")
' **** IMPORTANT ***
' Arrêter les évènements
Application.EnableEvents = False
' Vérifier si la modification a été effectuée dans la cellule AW4 de DECLAR
Set declarCell = declarSheet.Range("AW4")
If Not Intersect(Target, declarCell) Is Nothing Then
' Effacer le contenu de la cellule AW3
declarSheet.Range("AW3").ClearContents
' Trouver la dernière ligne avec des données dans la colonne K d'EQUIV
lastRow = equivSheet.Cells(equivSheet.Rows.Count, "K").End(xlUp).Row
' Définir la plage des cellules de la colonne K à partir de la cellule K3
Set equivRange = equivSheet.Range("K3:K" & lastRow)
' Remplir la cellule AW3 avec les valeurs de la colonne K d'EQUIV
For i = 1 To equivRange.Rows.Count
declarSheet.Range("AW3").Offset(i - 1, 0).Value = equivRange.Cells(i, 1).Value
Next i
End If
' *** IMPORTANT ***
' Réactiver les évènements à la fin
Application.EnableEvents = True
End SubC'est bien indiqué dans le lien de formation donné précédemment
A+