EXCEL VBA modifier le contenu d'une cellule d'un tableau

Résolu
patrick1870 Messages postés 63 Date d'inscription dimanche 23 novembre 2014 Statut Membre Dernière intervention 6 juin 2024 - 22 avril 2024 à 14:44
patrick1870 Messages postés 63 Date d'inscription dimanche 23 novembre 2014 Statut Membre Dernière intervention 6 juin 2024 - 6 juin 2024 à 14:53

Bonjour à tous


Je me lance pour la 1ère fois dans l'écriture d'une macro pour Excel.

Je me heurte à un problème : comment modifier une cellule d'un tableau en y copiant, par macro, le contenu d'une autre cellule ?
Je sais faire l'opération inverse : extraire une donnée d'un tableau et la placer dans une autre cellule.

Mes données sont placées dans deux feuilles distinctes d'un même classeur : une feuille "saisie" et une feuille "compteurs".

Voici une partie simplifiée de la macro qui devrait permettre de mieux faire comprendre mon problème, je l'espère :)
 
' MACRO "VALIDATION"

Dim compteur1 As Integer
    
    
'   1 -  récupération du compteur
    
    Sheets("saisie").Select
    Range("F5").Select
    ActiveCell.FormulaR1C1 = "=VLOOKUP(R6C3,Compteurs!R3C1:R50C7,2)"
 
'   2 -  traitements divers sur les données de la feuille "saisie"
 
'   3 -  incrémentation de compteur1
    
     compteur1=compteur1 +1
     range("F5") = compteur1
'   
'    4 -  copier le contenu de F5 dans la cellule du tableau de la feuille
'         "compteurs" (la même cellule que celle utilisée pour la récupération
'          du 1- ci-dessus) ... et c'est là que je sèche ....

Merci d'avance à qui pourra m'aider.

A voir également:

6 réponses

yg_be Messages postés 23327 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 15 novembre 2024 Ambassadeur 1 551
22 avril 2024 à 15:48

bonjour,

Je ne comprends pas "la même cellule que celle utilisée pour la récupération du 1- ci-dessus".

Donne peut-être un exemple, et explique cela clairement en français.

0
yg_be Messages postés 23327 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 15 novembre 2024 1 551
Modifié le 22 avril 2024 à 16:16

Je pense que tu essaies d'obtenir ceci:

Dim tabl As Range, trouve As Range
Set tabl = Sheets("compteurs").[a3:a50]
Set trouve = tabl.Find(Sheets("saisie").[c6])
If Not trouve Is Nothing Then
    trouve.Offset(, 2) = trouve.Offset(, 2) + 1
End If
0
patrick1870 Messages postés 63 Date d'inscription dimanche 23 novembre 2014 Statut Membre Dernière intervention 6 juin 2024 11
Modifié le 22 avril 2024 à 17:18

Désolé de n'avoir pas été suffisamment clair ... je pensais m'être exprimé en français. Cela est peut-être dû au fait que je ne maîtrise pas le VBA et que je n'ai peut-être pas employé les mots exacts.

Dans le 1 - je vais chercher dans le tableau (qui est dans la feuille 'Compteurs") une donnée, en utilisant

RechercheV(contenu de la cellule C6 de la feuille "saisie"; tableau A3:G50 de la feuille "Compteurs"; 2ème colonne) **

et c'est dans  cette même cellule du tableau que je veux recopier le contenu de la cellule F5 à la fin de la macro.

Est-ce plus clair comme ça ? sinon quel genre d'exemple souhaiterais-tu ?

**  transcription de"=VLOOKUP(R6C3,Compteurs!R3C1:R50C7,2)"

0
yg_be Messages postés 23327 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 15 novembre 2024 1 551
Modifié le 23 avril 2024 à 13:38

En fait, tu décris ton code, au lieu d'expliquer le résultat que tu veux obtenir.

Un exemple d'exemple:

Soit un tableau:

123    456   789
555    888   999

la cellule C6 de la feuille "saisie" contient 555.

le but, c'est de remplacer 999 par le contenu de la cellule F5 de la feuille "saisie".

.

Suggestion, très proche de la suggestion en #2:

Set tabl = Sheets("compteurs").[a3:a50]
Set trouve = tabl.Find(Sheets("saisie").[c6])
If Not trouve Is Nothing Then
    trouve.Offset(, 2) = Sheets("saisie").[f5]
End If
0
yg_be Messages postés 23327 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 15 novembre 2024 1 551
23 avril 2024 à 13:39

As-tu testé le code que j'ai suggéré le 22 avril 2024 à 16:15?

1
patrick1870 Messages postés 63 Date d'inscription dimanche 23 novembre 2014 Statut Membre Dernière intervention 6 juin 2024 11
7 mai 2024 à 18:34

Bonjour,

Toutes mes excuses pour ce long silence (vacances avec petits-enfants :)).

Tu avais bien compris dès le début ce que je voulais faire.
Malheureusement, une étourderie de ma part m'avait fait croire que j'avais si mal expliqué mon problème que tu ne l'avais pas compris du tout.
Je viens de m'y atteler à nouveau et ta première macro correspond exactement à ce que je cherchais.

Je te remercie infiniment pour ton aide car seul je n'y serais probablement jamais arrivé. Je n'ai pas totalement compris les instructions contenues dans la macro mais l'essentiel est qu'elle fonctionne. Comme je le disais je suis novice (à 75 ans passés!) en matière de VBA.
Encore merci.

0
yg_be Messages postés 23327 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 15 novembre 2024 1 551
7 mai 2024 à 19:01

Super, n'hésite pas à faire appel si tu veux comprendre et/ou modifier la macro.

1
patrick1870 Messages postés 63 Date d'inscription dimanche 23 novembre 2014 Statut Membre Dernière intervention 6 juin 2024 11
Modifié le 1 juin 2024 à 22:35

Bonjour yg_be

Je fais encore appel à toi, au risque d'abuser de ta patience, car je ne comprends vraiment pas ce qui se passe.

J'ai tout réécrit mon projet j'ai changé les noms des feuilles, nom des variables, emplacements des cellules, etc.

Je pensais avoir réécrit la macro à l'identique, en tenant compte de ces changements. Mais maintenant elle ne fonctionne plus. De plus, j'ai écrasé l'ancienne version de la macro (celle qui fonctionnait) sans pouvoir la récupérer.

La variable  "trouve" garde obstinément la valeur "Nothing", ce qui rend la macro inopérante.
Saurais-tu me dire ce qui pourrait en être la cause, et comment y remédier ?

Merci d'avance pour l'aide que tu pourrais m'apporter.

---------

Ci-dessous la nouvelle macro :

Sub YY6_MAJ_compteurs()

'
' 6. Mise à jour des compteurs
'
'    6.1 compteur de saisie
'
    Sheets("YY_Paramètres").Select
    Range("J2").Select
    Range("J2") = Sheets("YY_Saisie").[G9]
    
'
'    6.2 compteur par mois et type opération
'
'dans le tableau a3:g50 de la feuille "YY_Paramètres" on trouve :
'- le mois dans la colonne A  et
'- dans les colonnes B à G les compteurs correspondant aux 6 types d'opérations
'
    Dim tabl As Range, trouve As Range
    Dim colonn As Integer
    colonn = Sheets("YY_Saisie").[i9]   'la cellule i9 de la feuille YY_Saisie contient le numéro de la colonne du tableau
    Set tabl = Sheets("YY_Paramètres").[a3:g50]
    Set trouve = tabl.Find(Sheets("YY_Saisie").[c9])  'dans la cellule c9 de la feuille YY_Saisie se trouve le mois
    If Not trouve Is Nothing Then
        trouve.Offset(, colonn) = trouve.Offset(, colonn) + 1
    End If
   
 
End Sub
0
yg_be Messages postés 23327 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 15 novembre 2024 1 551
2 juin 2024 à 12:14

bonjour,

Je suppose, sans voir ton classeur, que la valeur en [c9] dans la feuille saisie n'est pas exactement identique à une des valeurs du tableau.  L'important, c'est la valeur enregistrée dans une cellule, pas la valeur affichée dans cette cellule.

En passant, pourquoi cherches-tu dans tout le tableau et pas uniquement en colonne A?

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
patrick1870 Messages postés 63 Date d'inscription dimanche 23 novembre 2014 Statut Membre Dernière intervention 6 juin 2024 11
6 juin 2024 à 08:41

Bonjour yg_be

Merci beaucoup pour ta réponse.

J'ai cherché pendant des heures où pouvait se trouver l'erreur, mais rien n'y a fait.

Cependant j'ai retrouvé sur une clé USB une ancienne version de la macro ... qui fonctionnait à l'époque.

J'ai repris cette macro et je l'ai modifiée pour tenir compte des changements intervenus et .... ça marche !!!

Pourtant la nouvelle ligne " set trouve ..." (qu'on peut soupçonner d'être responsable de mes difficultés) est identique à celle  qui figurait dans la macro dont j'ai donné copie dans mon message précédent.

Je commence à m’inquiéter pour la suite de mon projet car ce n'est pas la première fois que je rencontre des difficultés dont je ne comprends pas la cause. Par exemple j'ai eu des formules qui s'affichaient dans la feuille de saisie mais ne s'exécutaient pas ... J'ai cherché pendant très longtemps avant de me résigner à réécrire toute la page de saisie dans une nouvelle feuille, avec les formules, les formats, les mises en forme conditionnelles, les contrôles de saisie ... J'ai eu également des problèmes de mémoire disponible ... pourtant j'ai 16 Go de mémoire vive et je n'avais aucun autre programme ouvert à part Excel.

J'utilise Excel de la suite 365 par abonnement mensuel et j'imagine donc que cette version n'est pas buguée.

Je ne suis pas très optimiste pour la suite. Je m'étais lancé un défi pour faire travailler mon vieux cerveau, mais j'ai bien peur que cela soit hors de portée.

En tout cas, je te remercie vivement de l'intérêt et de la patience que tu as accordé à mes problèmes de débutant.

Patrick.

0
yg_be Messages postés 23327 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 15 novembre 2024 1 551
6 juin 2024 à 09:36

"problèmes de mémoire disponible": j'ai souvent cela dans l'éditeur vba, je ferme alors Excel puis le rouvre.

Si tu partages ton fichier, je pourrais chercher la cause du souci avec "set trouve".

0
patrick1870 Messages postés 63 Date d'inscription dimanche 23 novembre 2014 Statut Membre Dernière intervention 6 juin 2024 11
6 juin 2024 à 14:53

bonjour yg_be

et merci pour ton message.

La macro fonctionne maintenant, même si je ne comprends pas pourquoi elle ne fonctionnait pas auparavant.

Je vais donc continuer à avancer ...

Salut à toi

Patrick

0