Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
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 !
Bonjour ou rebonjour à tous.
Je sollicite une fois de plus votre aide...
J'ai une macro qui lorsqu'elle tourne fait des recherchev. J'aimerai ajouter des conditions:
-que la recherchev ne se fache que si la cellule A correspondante est non vide et si la cellule C est différente de ST
-si la macro renvoi #N/A, alors il n'affiche rien.
J'ai essayé différentes choses avec if...then et if not...then mais je crois que je ne comprend pas la syntaxe.
Je joins mon fichier pour plus de clarté.
Dim z As Variant
For x = 2 To derligne - 1
Val = Sheets("Rubriques_SS_TOTAUX").Range("A" & x)
Val2 = Sheets("Rubriques_SS_TOTAUX").Range("C" & x)
If Not IsEmpty(Cells(ActiveCell.Row, 1).Value) And Cells(ActiveCell.Row, 3).Value <> "ST" Then
z = Evaluate(ActiveCell.FormulaR1C1 = "=VLOOKUP(" & Val & ",'RUBRIQUES PAIE MOIS'!R4C1:R500C7,7,0)")
If Not IsError(z) Then ActiveCell.Value = z
End If
ActiveCell.Offset(1, 0).Select
Next x
J'ai une macro qui lorsqu'elle tourne fait des recherchev. J'aimerai ajouter des conditions:
-que la recherchev ne se fache que si la cellule A correspondante est non vide et si la cellule C est différente de ST
-si la macro renvoi #N/A, alors il n'affiche rien.
Petites remarques anodines :
- Il n'y a ni devin, ni télépathe sur ce forum !
- donner une formule qui ne fonctionne pas comme on veut sans son but, nous oblige à interpréter ce qu'elle fait... mal. C'est pas la meilleure chose à faire.
- Il existe des méthodes/propriétés qui remplacent efficacement pour le code les formules de feuille de calcul.
Quand on passe sur VBA, il faut essayer de raisonner en mode feuille de calcul !
Ton code pour sélectionner une colonne : Une suite inutile de If.
Code:
Select Case Me.ComboBox1
Case "JANVIER": Range("D2").Select
Case "FÉVRIER": Range("E2").Select
Case "MARS": Range("F2").Select
Case "AVRIL": Range("G2").Select
Case "MAI": Range("H2").Select
Case "JUIN": Range("I2").Select
Case "JUILLET": Range("J2").Select
case "AOÛT": Range("K2").Select
Case "SEPTEMBRE": Range("L2").Select
Case "OCTOBRE": Range("M2").Select
Case "NOVEMBRE": Range("N2").Select
Case "DÉCEMBRE": Range("O2").Select
End Select
Serait déjà moins mauvais. Comme ce sont des mois rangés chronologiquement, on peut utiliser ListIndex :
Code:
If Me.ComboBox1 = -1 Then
MsgBox "pas de mois choisi", vbCritical, "Erreur de Saisie"
Exit Sub
Else
Col = Me.ComboBox1.ListIndex + 4
End If
Janvier donnant 0 => col = 4 (D). Décembre => 11 => col = 15 (O)
Presque même résultat que ton code, puisqu’il détermine la colonne... (et gère l'erreur de combo vide).
Pas sûr d'être bon sur ce coup... si je lis bien :
Val = Ax de "Rubriques_SS_TOTAUX" => là, je comprends
Val2 = Cx de "Rubriques_SS_TOTAUX" => là, je comprends
Application.Calculation = xlCalculationManual => là ça commence à se flouter... mais on va dire que c'est pour ne pas ralentir la macro
ActiveCell.FormulaR1C1 = "..." => Bon, c'est là le problème qu'on verra en dessous... mais tant qu'on n'a pas donné d'ordre de calcul...
Selection.Copy => on copie la formule... Ouais...
Selection.PasteSpecial Paste:=xlPasteValues => ???? on a rien calculé et on efface la formule pour ne garder qu'un résultat non calculé ??? Même sans le reste, le raisonnement pèche un peu. D'après moi, il faudrait lancer un calcul sur la cellule avant d'estimer que le calcul est correct.
La formule :
Code:
"=VLOOKUP(" & Val & ",'RUBRIQUES PAIE MOIS'!R4C1:R500C7,7,0)"
Rechercher la première occurrence de Ax (avec Ax<>"" ET Cx<>"ST") Dans la plage A4:A500 de la feuille RUBRIQUES PAIE MOIS et retourner la valeur en G.
Dans le cas où j'ai bon pour ce qu'on cherche, on se retrouve avec une macro de type:
Code:
Private Sub CommandButton2_Click()
'Déclaration ====================================
Dim Col As Long, Lig As Long, Cel As Range
Dim F As Worksheet, F_S As Worksheet
'MEI ============================================
Set F = Sheets("Rubriques_SS_TOTAUX")
Set F_S = Sheets("RUBRIQUES PAIE MOIS")
'Validité du traitement et choix colonne ========
If Me.ComboBox1 = -1 Then
MsgBox "pas de mois choisi", vbCritical, "Erreur de Saisie"
Exit Sub
Else
Col = Me.ComboBox1.ListIndex + 4
End If
'Recherche et écriture =========================
For Lig = 2 To F.Cells(Rows.Count, "A").End(xlUp).Row
'Pour ligne de 2 à dernière non vide en A
If F.Cells(Lig, "A") <> "" And F.Cells(Lig, "C") <> "ST" Then
'si A n'est pas vide et C différent de ST
Set Cel = F_S.Columns(1).Find(What:=F.Cells(Lig, "A"), LookAt:=xlWhole)
'Cel = rechercher Cellule de A de F_S = A de F (cellules entières : xlWhole)
If Not (Cel Is Nothing) Then F.Cells(Lig, Col) = F_S.Cells(Cel.Row, "G")
'si la cellule est trouvée, écrire dans (col,Lig) la valeur de G de la même ligne
End If
Next Lig
Unload Me
End Sub
J'ai commenté mon code, si ça ne suffit pas, demander.
Je me moque, mais comme je l'ai dit, on ne peut pas deviner un raisonnement avec une formule fausse. On a souvent besoin de savoir ce qu'on cherche, avec exactitude, pas de le deviner!
A+
Edit Salut Pierrot
Wouah !
Merci pour cette super réponse, complète et détaillée.
J'essaie toujours d'être le plus clair possible dans mes messages. J'avais l'impression de l'être une fois de plus (d'ailleurs les réponses correspondent parfaitement à ma demande...).
Je prend bonne note de tes remarques. Je suis débutant sous vba, ce qui explique mon code pas toujours très propre. En effet, je réalise tout ça dans le cadre de mon travail, par conséquent je dois aller vite et n'ai pas toujours le temps de chercher toutes les solutions possibles pour résoudre mes problèmes.
La macro proposée me convient parfaitement, il me reste juste à la décortiquer un peu plus pour me l'approprier.
Afin de m'améliorer je suis à la recherche de tuto. J'ai déja acheté plusieurs livres, mais aucun n'est super clair. Si quelqu'un connait de bons sites...
Encore merci pour le temps passé à résoudre mes problèmes et à m'aider à progresser. Ce forum est une mine d'or ! 🙂
- 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