Probleme de macro sur modif cellule C2
Bonjour j'ai un problème avec ma macro qui se lance quand la cellule C2 change, jais le message "Repère existant Doublon" qui s affiche que j'ai un doublon ou pas. Alors que tous marche si je mais la macro sur un bouton
Voici mon code
Sub MaMacro()
'-------------- Bloc ou Réactive le mouvement du curseur ------------------------------------------
Application.ScreenUpdating = False ' au début de ton code permet de demander à ton programme
' de ne pas afficher ces " mouvements " pendant le traitement.
' 1 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Range("AJ1").Select
ActiveCell.FormulaR1C1 = "=MID(RC[-33],1,4)" 'AJ1 AN1 Z000
Range("AK1").Select
ActiveCell.FormulaR1C1 = "=MID(RC[-34],5,3)" 'AK1 AN1 Z000 102
Range("AL1").Select
ActiveCell.FormulaR1C1 = "=MID(RC[-35],8,3)" 'AL1 AN1 Z000 102 980
Range("AM1").Select
ActiveCell.FormulaR1C1 = "=MID(R[1]C[-36],22,3)" 'AM1 AN1 Z000 102 980 262
Range("AO1").Select
ActiveCell.FormulaR1C1 = "=MID(RC[-38],13,5)" 'AO1 2558T
Range("AN1").Select
ActiveCell.FormulaR1C1 = "=CONCATENATE(RC[-4],"" "",RC[-3],"" "",RC[-2],"" "",RC[-1])"
' 1 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
' 2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Cells(1, 40).Select ' Se place a la ligne 1, colonne 40 ( Celulle AN1 ) ' Cellule ou il y a Z000 102 980 262
Selection.Copy ' Copy
Range("AE1").Select ' Se positionne en AE1
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False ' Et colle la valeur seule
Cells(1, 41).Select ' Se place a la ligne 1, colonne 41 ( Celulle AO1 )
Selection.Copy ' Copy
Range("AH1").Select ' Se positionne en AH1 ' Cellule ou il y a 2558T
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False ' Et colle la valeur seule
Range("AJ1:AO1").Select ' Effacement des celulles AJ1:AO1 de la
Selection.ClearContents ' Feuille " Référence "
Range("C3").Select
' 2 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
' 3 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'--------------- Début Boucle A -------------------------------------
For A = 1 To 15 ' Cette boucle permet de passer d'une colonne à une autre
' ( en tout il y a 15 colonnes "For=Pour" "A = variable" )
'-------------------------------------------------------------
'--------------- Début Boucle i ------------------------------
For i = 1 To 200 ' Cette boucle permet de tester toutes les cellules d'une
' colonne( 200 cellules par colonne )
ActiveCell.Offset(1, 0).Select
If ActiveCell = Range("AH1") Then
MsgBox (" Repère existant Doublon ")
End
End If
Next i ' Next = Suivant (1 à 200)
'--------------- Fin Boucle i ----------------------------------
'---------------------------------------------------------------
ActiveCell.Offset(-200, 0).Select '200
ActiveCell.Offset(0, 1).Select
Next A ' Next = Suivant (1 à 15)
'--------------- Fin Boucle A ---------------------------------------
' 3 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'-------------- Bloc ou Réactive le mouvement du curseur ------------------------------------------
Application.ScreenUpdating = True ' A la fin de ta macro, tu mets ensuite cette
' fonction à TRUE pour la réactiver.
'--------------- Début Boucle X --------------------------------------------------------------------
Range("B3").Select
For x = 1 To 200
ActiveCell.Offset(1, 0).Select
If ActiveCell = Range("AE1") Then
GoTo CELLULE_VIDE ' Branche CELLULU_VIDE
End If
Next x ' Next = Suivant (1 à 200)
Range("D1").Select ' Else(sinon)
MsgBox (" Référence non trouvée - ressaisir une autre fiche ")
Range("D1").Select
End
'--------------- FIN Boucle X ----------------------------------------
'-------------------------------------------------------------------------------------------------
'------------------ GOTO CELLULE_VIDE --------------------------------
CELLULE_VIDE:
Do While Not (IsEmpty(ActiveCell)) ' Boucle pour se positionner sur la première cellule vide
' Do(fais) While(Pendant que) Not(Pas) IsEmpty(Est vide)
ActiveCell.Offset(0, 1).Select ' NbLigne = NbLigne + 1
Loop
ActiveCell.Value = Cells(1, 34).Value
'------------------- Fin Goto ----------------------------------------
'-------------------------------------------------------------------------------------------------
Range("D1:D2").Select ' Effacement des celulles D1:D2 de la
Selection.ClearContents ' Feuille " Référence "
Range("C1").Select ' Positionne le curseur en D1
End Sub ' Fin de la macro
Merci de vos réponse, ha est pas trop de rire SVP je ne connais rien en vba j'ai fais se code avec des morceaux sur internet
Bonjour
Ton fichier complet serait plus utile que la macro seule
Bonsoir, voila le fichier et merci
Bonjour
Avec les données existantes tu as bien un doublon en cellule H31
Dans le cas où normalement tu n'as pas de doublon
Ce qui se passe en fin de macro tu effaces Range("D1:D2") et à cause des cellules fusionnées cela touche la cellule C2 donc la macro recommence en recherchant une cellule vide
Pour y remédier modifies ta macro événementielle (partie surlignée)
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("C2")) Is Nothing Then
If Target.Cells(1, 1) = "" Then Exit Sub
Call MaMacro 'ici le nom de ta macro précéde de Call
End If
End SubUn grand merci a toi Banzai64 et surtout pour la rapidité de la réponse, ça fonctionne nickel.