A voir également:
- Copie coller d'une colonne
- Déplacer une colonne excel - Guide
- Copie cachée - Guide
- Formule somme excel colonne - Guide
- Trier colonne excel - Guide
- Colonne word - Guide
7 réponses
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
21 janv. 2014 à 22:12
21 janv. 2014 à 22:12
Bonjour,
Si les classeurs sont ouverts et volumineux, il faut peut être envisager d'effectuer les traitements différemment ou bien d'utiliser une base de données digne de ce nom et un gestionnaire indépendant des données...
Excel n'est ni une base de données, ni un environnement de développement. En voulant en faire une BdD et une application de gestion, on minimise fortement ses capacités.
Il est possible de travailler dans des classeurs fermés pour manipuler les données. Voir ici
Bon courage
Si les classeurs sont ouverts et volumineux, il faut peut être envisager d'effectuer les traitements différemment ou bien d'utiliser une base de données digne de ce nom et un gestionnaire indépendant des données...
Excel n'est ni une base de données, ni un environnement de développement. En voulant en faire une BdD et une application de gestion, on minimise fortement ses capacités.
Il est possible de travailler dans des classeurs fermés pour manipuler les données. Voir ici
Bon courage
Merci!
Je suis noviste dans le domaine de la programmation. C'est pourquoi je veux savoir Quel gestionnaire indépendant des données me recommande tu?
Sache qu'il existe des formules dans plusieurs cellules de ma feuille excel de sorte qu'une modification ( une copie coller d'une colonne par exemple actualise les données des autres cellules). A mon avis c'est l'avantage que j'ai a utiliser le VBA excel. C'est mon avis
Aide moi s'il te plait!
Je suis noviste dans le domaine de la programmation. C'est pourquoi je veux savoir Quel gestionnaire indépendant des données me recommande tu?
Sache qu'il existe des formules dans plusieurs cellules de ma feuille excel de sorte qu'une modification ( une copie coller d'une colonne par exemple actualise les données des autres cellules). A mon avis c'est l'avantage que j'ai a utiliser le VBA excel. C'est mon avis
Aide moi s'il te plait!
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 312
Modifié par michel_m le 23/01/2014 à 08:48
Modifié par michel_m le 23/01/2014 à 08:48
Bonjour
Si tu es novice, on évitera la technologie ADO proposée par notre ami Polux (bonjour)
modif à apporter dans ta macro
1 seul classeur ouvert à la fois si tes classeurs sont volumineux
On évite de trimballer des cellules toujours gourmandes en mémoire et on crée des variables tableaux ne comportant que les valeurs des cellules
on cherche le numéro de la colonne et la dernière ligne utilisée dans la colonne et on crée le tableau (baptisé "copie")
on ferme le classeur source et on ouvre le classeur cible
on suppose (tu n'as pas précisé) que la colonne destination ne comporte pas de données
Michel
Si tu es novice, on évitera la technologie ADO proposée par notre ami Polux (bonjour)
modif à apporter dans ta macro
1 seul classeur ouvert à la fois si tes classeurs sont volumineux
On évite de trimballer des cellules toujours gourmandes en mémoire et on crée des variables tableaux ne comportant que les valeurs des cellules
on cherche le numéro de la colonne et la dernière ligne utilisée dans la colonne et on crée le tableau (baptisé "copie")
on ferme le classeur source et on ouvre le classeur cible
on suppose (tu n'as pas précisé) que la colonne destination ne comporte pas de données
Dim Bte As String
Dim Col As Integer
Dim Lig As Integer
Dim Copie()
'ouvrir le fichier source Workbooks("Tampon.xlsx")
' ton code inputbox
With Worksheets("tamp_cumul")
On Error GoTo fin 'détecte une mauvaise saisie
Col = .Rows(1).Cells.Find(Bte, LookIn:=xlValues, LookAt:=xlWhole).Columns
On Error GoTo 0
Lig = .Columns(Col).Find("*", , , , , xlPrevious).Row
Copie = Application.Transpose(.Range(.Cells(2, Col), .Cells(Lig, Col).Value))
End With
'fermer le fichier source
'ouvrir le fichier cible
With Worksheets("Cumul")
Col = .Rows(1).Cells.Find(Bte, LookIn:=xlValues, LookAt:=xlWhole).Column
.Cells(2, Col).Resize(UBound(Copie), 1) = Application.Transpose(Copie)
End With
'.... code éventuel
Exit Sub
fin:
MsgBox Bte & " : saisie incorrecte !!!", vbCritical
End Sub
Michel
Bonsoir Michel !!
Apres avoir executer ton programme, je suis confronté à un problème. Je constate que tantot
Col =Worksheets ("tamp_cumul").Rows(1).Cells.Find(Bte, LookIn:=xlValues, LookAt:=xlWhole).Columns
Tantot
Col =Worksheets("Cumul").Rows(1).Cells.Find(Bte, LookIn:=xlValues, LookAt:=xlWhole).Column
Je me demande si tu t'es pas trompé ?
Si tel est le cas(si tu t'es trompé), je pense qu'il va falloir apporter des modifications aux parties faisant référence à col(juste preciser s'il s'agit de col1 ou col2)
voici tel que j'avais conçu le problème :
Je saisi dans un inputbox par exemple : Fevrier_2014 ; il cherche dans la première ligne de la feuille source la référence de la cellule dont le champ de titre est Fevrier_2014(col1)
Il cherche également dans la feuille de destination la référence de la cellule dont le champ de titre est Fevrier_2014(col2)
Il copie la colonne col1 et la colle dans la colonne col2.
Tant que fevrier_2014 n'existe pas dans les deux feuilles en tant que titre de champs, il envoie l'inputbox pour saisir de nouveau un titre de titre.
C'est pourquoi j'avais prevu un do while
Do While col1 is nothing or col2 is nothing then
Bte=inputbox("...............")
Col1= Worksheets ("tamp_cumul").Rows(1).Cells.Find(Bte, LookIn:=xlValues, LookAt:=xlWhole).Columns
Col2 =Worksheets("Cumul").Rows(1).Cells.Find(Bte, LookIn:=xlValues, LookAt:=xlWhole).Column
Loop
La commande de la copie.
Je suis vraiment noviste. A toi de m'aider a me retrouver.
Cordialement
Apres avoir executer ton programme, je suis confronté à un problème. Je constate que tantot
Col =Worksheets ("tamp_cumul").Rows(1).Cells.Find(Bte, LookIn:=xlValues, LookAt:=xlWhole).Columns
Tantot
Col =Worksheets("Cumul").Rows(1).Cells.Find(Bte, LookIn:=xlValues, LookAt:=xlWhole).Column
Je me demande si tu t'es pas trompé ?
Si tel est le cas(si tu t'es trompé), je pense qu'il va falloir apporter des modifications aux parties faisant référence à col(juste preciser s'il s'agit de col1 ou col2)
voici tel que j'avais conçu le problème :
Je saisi dans un inputbox par exemple : Fevrier_2014 ; il cherche dans la première ligne de la feuille source la référence de la cellule dont le champ de titre est Fevrier_2014(col1)
Il cherche également dans la feuille de destination la référence de la cellule dont le champ de titre est Fevrier_2014(col2)
Il copie la colonne col1 et la colle dans la colonne col2.
Tant que fevrier_2014 n'existe pas dans les deux feuilles en tant que titre de champs, il envoie l'inputbox pour saisir de nouveau un titre de titre.
C'est pourquoi j'avais prevu un do while
Do While col1 is nothing or col2 is nothing then
Bte=inputbox("...............")
Col1= Worksheets ("tamp_cumul").Rows(1).Cells.Find(Bte, LookIn:=xlValues, LookAt:=xlWhole).Columns
Col2 =Worksheets("Cumul").Rows(1).Cells.Find(Bte, LookIn:=xlValues, LookAt:=xlWhole).Column
Loop
La commande de la copie.
Je suis vraiment noviste. A toi de m'aider a me retrouver.
Cordialement
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 312
24 janv. 2014 à 15:59
24 janv. 2014 à 15:59
bonjour
je t'avoue que sans classeurs(s), écrire un code est assez aléatoire
essaies ceci (modifs en gras)
tu n'es pas obligé de garder le msgbox mais il est souvent préférable d'indiquer à l'utilisateur qu'il a fait une c....
le mieux alors est de choisir un msgbox avec un bouton yesno et le texte
"saisie incorrecte! continuer ?"
par ex
(rep est du type byte)
Bon WE
je t'avoue que sans classeurs(s), écrire un code est assez aléatoire
essaies ceci (modifs en gras)
Sub bb()
Dim Bte As String
Dim Col As Integer
Dim Lig As Integer
Dim Copie()
'ouvrir le fichier source Workbooks("Tampon.xlsx")
1 Bte = InputBox("Veuillez renseigner un champs! " & Chr(10) & "Par Exemple : Janvier 2014", "CHOIX DU MOIS!!!")
With Worksheets("tamp_cumul")
On Error GoTo fin 'détecte une mauvaise saisie
Col = .Rows(1).Cells.Find(Bte, LookIn:=xlValues, LookAt:=xlWhole).Columns
On Error GoTo 0
Lig = .Columns(Col).Find("*", , , , , xlPrevious).Row
Copie = Application.Transpose(.Range(.Cells(2, Col), .Cells(Lig, Col).Value))
End With
'fermer le fichier source
'ouvrir le fichier cible
With Worksheets("Cumul")
On Error GoTo fin
Col = .Rows(1).Cells.Find(Bte, LookIn:=xlValues, LookAt:=xlWhole).Column
On Error GoTo 0
.Cells(2, Col).Resize(UBound(Copie), 1) = Application.Transpose(Copie)
End With
'.... code éventuel
Exit Sub
fin:
MsgBox Bte & " : saisie incorrecte !!!", vbCritical
Resume 1
End Sub
tu n'es pas obligé de garder le msgbox mais il est souvent préférable d'indiquer à l'utilisateur qu'il a fait une c....
le mieux alors est de choisir un msgbox avec un bouton yesno et le texte
"saisie incorrecte! continuer ?"
par ex
rep=msgbox(""saisie incorrecte! continuer ?",vbyesno,vbexclamation)
If rep=vbyes then resume 1
(rep est du type byte)
Bon WE
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Merci!
Mais je me demande si le fait de dire
col= Worksheets("tamp_cumul").Rows(1).Cells.Find(Bte, LookIn:=xlValues, LookAt:=xlWhole).Column
et aller ecrire
Col =Worksheets("Cumul") .Rows(1).Cells.Find(Bte, LookIn:=xlValues, LookAt:=xlWhole).Column
ne crée pas probleme.
Je me dis c'est comme si tu ecrivais
X=1 et apres X=2
Cordialement
Mais je me demande si le fait de dire
col= Worksheets("tamp_cumul").Rows(1).Cells.Find(Bte, LookIn:=xlValues, LookAt:=xlWhole).Column
et aller ecrire
Col =Worksheets("Cumul") .Rows(1).Cells.Find(Bte, LookIn:=xlValues, LookAt:=xlWhole).Column
ne crée pas probleme.
Je me dis c'est comme si tu ecrivais
X=1 et apres X=2
Cordialement
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
24 janv. 2014 à 16:53
24 janv. 2014 à 16:53
(Petite incrust)
Salut Benjamin, Hello Michel ;0)
Ça ne pose aucun problème.
Dans le premier cas, Col sert à chercher la colonne contenant le retour du InputBox (Bte). Ensuite, si trouvé, les données de la colonne sont "transférées" dans Copie(). Col n'est plus utile à ce niveau et la variable Col peut être utilisée pour stocker autre chose
;0)
Salut Benjamin, Hello Michel ;0)
Ça ne pose aucun problème.
Dans le premier cas, Col sert à chercher la colonne contenant le retour du InputBox (Bte). Ensuite, si trouvé, les données de la colonne sont "transférées" dans Copie(). Col n'est plus utile à ce niveau et la variable Col peut être utilisée pour stocker autre chose
;0)
Bonjour Michel;
Après exécution de ton programme, cela me renvoie le message Bte & " : saisie incorrecte !!!", vbCritical.
Or j'ai saisi DISPONIBLE qui est à la première ligne (et dans une colonne dont j'ai oublié le numéro) de Worksheets("tamp_cumul").
Normalement, il devait copier toute cette colonne DISPONIBLE de Worksheets("tamp_cumul"), et la copier dans la colonne ou le titre de champ(1 ère ligne) de Worksheets("Cumul") est DISPONIBLE.
A cet effet, j'aimerais que tu me traduise ligne par ligne le programme que tu as écris.
Peut être je me retrouverai.
je compte sur toi!
cordialement
Après exécution de ton programme, cela me renvoie le message Bte & " : saisie incorrecte !!!", vbCritical.
Or j'ai saisi DISPONIBLE qui est à la première ligne (et dans une colonne dont j'ai oublié le numéro) de Worksheets("tamp_cumul").
Normalement, il devait copier toute cette colonne DISPONIBLE de Worksheets("tamp_cumul"), et la copier dans la colonne ou le titre de champ(1 ère ligne) de Worksheets("Cumul") est DISPONIBLE.
A cet effet, j'aimerais que tu me traduise ligne par ligne le programme que tu as écris.
Peut être je me retrouverai.
je compte sur toi!
cordialement
Bonjour Michel;
Après exécution de ton programme, cela me renvoie le message Bte & " : saisie incorrecte !!!", vbCritical.
Or si j'ai saisi DISPONIBLE qui est à la première ligne (et dans une colonne dont j'ai oublié le numéro) de Worksheets("tamp_cumul").
Normalement, il devait copier toute cette colonne DISPONIBLE de Worksheets("tamp_cumul"), et la copier dans la colonne ou le titre de champ(1 ère ligne) de Worksheets("Cumul") est DISPONIBLE.
A cet effet, j'aimerais que tu me traduise ligne par ligne le programme que tu as écris.
Peut être je me retrouverai.
je compte sur toi!
cordialement
Après exécution de ton programme, cela me renvoie le message Bte & " : saisie incorrecte !!!", vbCritical.
Or si j'ai saisi DISPONIBLE qui est à la première ligne (et dans une colonne dont j'ai oublié le numéro) de Worksheets("tamp_cumul").
Normalement, il devait copier toute cette colonne DISPONIBLE de Worksheets("tamp_cumul"), et la copier dans la colonne ou le titre de champ(1 ère ligne) de Worksheets("Cumul") est DISPONIBLE.
A cet effet, j'aimerais que tu me traduise ligne par ligne le programme que tu as écris.
Peut être je me retrouverai.
je compte sur toi!
cordialement
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 312
29 janv. 2014 à 10:27
29 janv. 2014 à 10:27
Bonjour,
j'avais écris
je t'avoue que sans classeurs(s), écrire un code est assez aléatoire
d'autant + que tu es novice et qu'en vBA (ou autre langage) il y a des "pinaillages" d'écriture pas triste
Donc, pour essayer d'^tre efficace:
mettre des extraits des 2 classeurs( je zappe au delà de 2mo au total) sans données confidentielles en pièce jointe sur
https://www.cjoint.com/
puis copier l'adresse du lien et la coller dans le message de réponse
j'avais écris
je t'avoue que sans classeurs(s), écrire un code est assez aléatoire
d'autant + que tu es novice et qu'en vBA (ou autre langage) il y a des "pinaillages" d'écriture pas triste
Donc, pour essayer d'^tre efficace:
mettre des extraits des 2 classeurs( je zappe au delà de 2mo au total) sans données confidentielles en pièce jointe sur
https://www.cjoint.com/
puis copier l'adresse du lien et la coller dans le message de réponse
Bonsoir Michel !!
J'ai bien reçu ton commentaire à travers lequel tu m'as demandé d'envoyer le classeur excel .je te remercie pour cette réponse qui marque ton engagement à m'aider.
Toutefois, le classeur de données que j'utilise est trop lourd et la quasi-totalité des données est confidentielle. Je suis en train de modifier les données avant d'effectuer l'envoi.
Par ailleurs, voici un autre classeur de données http://cjoint.com/14jv/DAFrfkr8jKO_ann_leg_.xlsx que je t'envoie pour m'aider à faire une opération de filtre que je considère d'avancé.
Dans ce classeur, je veux réaliser un filtre sur la colonne E de sorte à afficher que les éléments dont la valeur prise par la colonne E est 1.
Voici ce que j'ai fais
Sub Filtrer()
Workbooks("ANN_LEG.xlsx").Worksheets("données").Range("A1").AutoFilter _
field:=5, _
Criteria1:="1", _
VisibleDropDown:=False
End Sub
Cette commande fonctionne comme je l'ai écrite. Mais, étant données qu'il y a des lignes en gras (représentant des totaux)dans la colonne G, je veux que ces lignes apparaissent quelque soit le critère de filtre choisi. En plus, pour ces totales, les valeurs prises par la colonne ANNEE 2006 doivent changer à causes formules.
Par exemple, si le critère de filtre est 1, la valeur ANNEE 2006 de la ligne TOTAL ne doit plus être 31279
Celle de la ligne Agriculture doit être différente de 5058
Comment faire ? Aide moi s'il te plait. Je compte vraiment sur toi,
Merci d'avance
Voici le lien pour acceder au classeur . il suffit de le copier et le coller dans le navigateur web http://cjoint.com/14jv/DAFrfkr8jKO_ann_leg_.xlsx
J'ai bien reçu ton commentaire à travers lequel tu m'as demandé d'envoyer le classeur excel .je te remercie pour cette réponse qui marque ton engagement à m'aider.
Toutefois, le classeur de données que j'utilise est trop lourd et la quasi-totalité des données est confidentielle. Je suis en train de modifier les données avant d'effectuer l'envoi.
Par ailleurs, voici un autre classeur de données http://cjoint.com/14jv/DAFrfkr8jKO_ann_leg_.xlsx que je t'envoie pour m'aider à faire une opération de filtre que je considère d'avancé.
Dans ce classeur, je veux réaliser un filtre sur la colonne E de sorte à afficher que les éléments dont la valeur prise par la colonne E est 1.
Voici ce que j'ai fais
Sub Filtrer()
Workbooks("ANN_LEG.xlsx").Worksheets("données").Range("A1").AutoFilter _
field:=5, _
Criteria1:="1", _
VisibleDropDown:=False
End Sub
Cette commande fonctionne comme je l'ai écrite. Mais, étant données qu'il y a des lignes en gras (représentant des totaux)dans la colonne G, je veux que ces lignes apparaissent quelque soit le critère de filtre choisi. En plus, pour ces totales, les valeurs prises par la colonne ANNEE 2006 doivent changer à causes formules.
Par exemple, si le critère de filtre est 1, la valeur ANNEE 2006 de la ligne TOTAL ne doit plus être 31279
Celle de la ligne Agriculture doit être différente de 5058
Comment faire ? Aide moi s'il te plait. Je compte vraiment sur toi,
Merci d'avance
Voici le lien pour acceder au classeur . il suffit de le copier et le coller dans le navigateur web http://cjoint.com/14jv/DAFrfkr8jKO_ann_leg_.xlsx