Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Copier les valeurs d'une cellule après une RECHERCHEV si vide

r3vzone

XLDnaute Nouveau
Bonjour,

Je suis débutant, ne soyez pas trop raide ave moi svp

Je suis en train de mettre en place une petite feuille de calcul (pas de soucis jusque-là).
Feuille "Calculateur".
Ce Calculateur fait appel à mon autre feuille HS-Janvier-23.

Dans HS-Janvier-23 se trouve les noms du personnel, leur statut (TIT ou CTR - les codes à appliquer n'étant pas les même).

Dans mon Calculateur, j'ai la liste des personnes que je récupère sur HS-Janvier-23.

Depuis le nom, je fais une RECHERCHEV afin d'y trouver le prénom, le matricule et surtout la cellule correspondante à l'agent dans la colonne S(OBSERVATIONS).

Dans le Calculateur, dans la case Observations (qui fait référence à la colonne Observations de la feuille HS-Janvier-23), j'effectue une : =RECHERCHEV(Calculateur!K8;'HS-Janvier-23'!B2:S90;18;FAUX) afin de trouver la correspondance avec l'agent. Pas de soucis jusque-là.

Dans Résultat (Calculateur) je fais : =SI(RECHERCHEV(Calculateur!K8;'HS-Janvier-23'!B2:S90;18;FAUX)=0;J32;"Non vide") afin de savoir si lors de ma recherche la cellule est vide, si elle l'est alors j'écris mon résultat dans le calculateur (J32 (masquée) copié dans K12), si elle est déjà remplie, je ne fais rien (et marque NON VIDE).

Mon problème est que je souhaiterais quand j'ai finis mes calculs sur mon Calculateur, que se copie le résultat (K12) dans ma RECHERCHEV correspondante à l'agent CAD dans la cellule correspondante à l'agent dans HS-JANVIER-23 dans la colonne OBSERVATIONS si la case est vide.

Je ne sais pas si j'ai été clair, si ce n'est pas le cas, dites le moi .

Les valeurs calculées dans Calculateur sont affichées dans RESULTAT (K12) - Même résultat dans la cellule J32 (masquée).

Je mets le fichier en PJ.

En gros je fais un calcul, il cherche l'agent, vérifie que la cellule de l'agent dans la colonne S OBSERVATIONS (HS-Janvier-23) est vide, et y copie mon résultat (K12). Et c'est là que je n'arrive pas à renvoyer les valeurs de K12 dans la cellule OBSERVATIONS correspondante.

Merci par avance si vous prenez le temps de me lire.
 

Pièces jointes

  • MonClasseur.xlsm
    38.1 KB · Affichages: 4
Dernière édition:

Phil69970

XLDnaute Barbatruc
Re

@r3vzone

Tu peux raccourcir ta macro comme ceci :

VB:
Sub CalculB()
Application.ScreenUpdating = False
Dim Ws1 As Worksheet, Ws2 As Worksheet, Derlig&, i&

Set Ws1 = Sheets("HS-Janvier-23")
Set Ws2 = Sheets("Calculateur")

Derlig = Ws1.Range("A" & Rows.Count).End(xlUp).Row

With Ws1
    For i = 2 To Derlig
        If .Range("B" & i) = Ws2.Range("K8") Then
            If .Range("S" & i) = "" Then .Range("S" & i) = Ws2.Range("J32").Value
            If .Range("H" & i) = "" Then .Range("H" & i) = Ws2.Range("D26").Value
            If .Range("I" & i) = "" Then .Range("I" & i) = Ws2.Range("F26").Value
            If .Range("J" & i) = "" Then .Range("J" & i) = Ws2.Range("H26").Value
            If .Range("O" & i) = "" Then .Range("O" & i) = Ws2.Range("K13").Value
            If .Range("P" & i) = "" Then .Range("P" & i) = Ws2.Range("K14").Value
        End If
    Next i
End With

Set Ws1 = Nothing
Set Ws2 = Nothing
End Sub

@Phil69970
 

r3vzone

XLDnaute Nouveau
Re, PARFAIT. Penses-tu possible la réécriture forcé via la macro si des valeurs sont déjà présentent dans les cellules des colonnes H, I, J, O et P de HS-JANVIER-23 ? (et surtout pas de réécriture si S Non-vide ça faut pas que ça change c'est parfait).
 

Phil69970

XLDnaute Barbatruc
Re

Pas compris ta phrase

Penses-tu possible la réécriture forcé via la macro si des valeurs sont déjà présentent dans les cellules des colonnes H, I, J, O et P de HS-JANVIER-23 ? (et surtout pas de réécriture si S Non-vide

Ceci veut dire :
If .Range("H" & i) = "" Then .Range("H" & i) = Ws2.Range("D26").Value

Si dans la feuille "HS-Janvier-23" cellule H i = vide alors on copie la valeur D26 de la feuille "Calculateur" dans la cellule H i de la feuille "HS-Janvier-23"
Le i correspond au numéro de la ligne traité

Ainsi de suite pour toute les lignes

@Phil69970
 

r3vzone

XLDnaute Nouveau
Merci pour l'explication parfaite de la ligne
VB:
If .Range("H" & i) = "" Then .Range("H" & i) = Ws2.Range("D26").Value
Je pense que le VBA sera ma prochaine formation

Du coup en espérant avoir compris
VB:
With Ws1
    For i = 2 To Derlig
        If .Range("B" & i) = Ws2.Range("K8") Then
            If .Range("S" & i) = "" Then .Range("S" & i) = Ws2.Range("J32").Value
            .Range("H" & i) = Ws2.Range("D26").Value
            .Range("I" & i) = Ws2.Range("F26").Value
            .Range("J" & i) = Ws2.Range("H26").Value
            .Range("O" & i) = Ws2.Range("K13").Value
            .Range("P" & i) = Ws2.Range("K14").Value
        End If
    Next i
End With
serait bon ? vraiment navré ça doit te faire mal au yeux de voir tout ça
 

Phil69970

XLDnaute Barbatruc
Re

Perso je préfère écrit comme cela :

VB:
With Ws1
    For i = 2 To Derlig
        If .Range("B" & i) = Ws2.Range("K8") Then
            If .Range("S" & i) = "" Then
                .Range("S" & i) = Ws2.Range("J32").Value
                .Range("H" & i) = Ws2.Range("D26").Value
                .Range("I" & i) = Ws2.Range("F26").Value
                .Range("J" & i) = Ws2.Range("H26").Value
                .Range("O" & i) = Ws2.Range("K13").Value
                .Range("P" & i) = Ws2.Range("K14").Value
            End If
        End If
    Next i
End With

@Phil69970
 

r3vzone

XLDnaute Nouveau
OK je comprend
Je suis en train également de préparer un test avec la conversion des pdfs (feuilles d'HS qu'on reçoit)
Ex en PJ après transformation via OCR.
Dans l'exemple en PJ j'ai juste fait un 1ere essai de récup (ajout perso partie grise) de valeurs des cellules (partie haute qui sont extraites du pdf) histoire d'avoir un template de base pour la récup des valeurs sur tout les fichiers. Rien de bien compliqué et extrêmement basique. Il faudra que j’améliore ça.

Si tu as une technique pour faire la récup via macro en avec chaque correspondances (PÔLE/DIRECTION/SERVICE/NOM/...) je t'avoue que je ne te dirais pas non

Dans tout les cas, un ÉNORME REMERCIEMENT !
 

Pièces jointes

  • Pages de AJA RAC AOUT 2022_OCR.xlsx
    15.3 KB · Affichages: 1

Phil69970

XLDnaute Barbatruc
Re

Si tu as une technique pour faire la récup via macro en avec chaque correspondances (PÔLE/DIRECTION/SERVICE/NOM/...) je t'avoue que je ne te dirais pas non

Ouvre une nouvelle question car je crois que j'ai répondu à la 1ere

Rappel du principe du forum c'est :
==>une question ==> une ou plusieurs réponses ==> je valide la réponse qui me va et que j'ai retenu
==> Nouvelle question ==> une ou plusieurs réponses==> je valide la réponse qui me va et que j'ai retenu....

@Phil69970
 

r3vzone

XLDnaute Nouveau
Rebonjour, je reviens vers toi après une erreur de syntaxe qui m'est indiquée lors de l'essai de la macro modifiée :/ si tu as une solution j'ai même test en supprimant la condition initiale du vide pr la colonne S mais ça passe pas (bon jsuis pas bien doué non plus il faut l'avouer )

MODIFICATION DU POST: en me relisant ma faute de syntaxe est le manque d'un End If
ce qui donne
VB:
End If
    End If
        Next i
End With
 
Dernière édition:

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…